• 机器学习一般应用过程--以分类算法为例(一)中国气象数据案例



    第一:计算机硬件

    本例中只要普通的64位系统即可,使用的python的Anaconda,这个python平台的好处是已安装好经常使用的ML包,如sklearn和数据处理包,如numpy和scipy.


    第二:机器学习平台

    首先,本例中用到了数据处理包numpy对数据进行预处理,当然也可以直接使用scipy包,如果调用scipy就可以直接使用numpy,因为scipy是基于numpy的.

    其次,在机器学习模型训练和参数选择时使用万能的sklearn库,里面包含了机器学习的最广泛使用的算法


    第三:数据

    step1:数据收集

    网上有大量的免费数据和文本可以拿来使用,也可以自己简单生成或者是用sklearn的datasets的数据集,亦或是sklearn的make_regression来生成纯数据以及带有噪声的数据,本例中使用的是中国气象数据网2015年的上海的气象数据来让计算机学习上海这一年中的气温和一些因素的关系,即监督学习,其中Y是气温.

    代码如下:

     1 import numpy as np
     2  
     3 W = ['C:\Users\123\Desktop\weather\2015.txt',]
     4  
     5 weather = np. loadtxt ( W [0] , skiprows =1)
     6  
     7 weather[: ,7 ] = weather[: ,7 ] / 10plt . figure ()
     8 plt . axis ([0 , 370 , -5, 40])
     9 plt . ylabel (" Temperatures"  )
    10 plt . xlabel (" Month"  )
    11 plt . xticks ([30 , 58, 89, 119 , 150 , 180 ,211 , 242 , 272 , 303 , 333 , 364],
    12               ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] )
    13  
    14 plt . title (' Temperatures trent chart of Shanghai in year 2015 ')
    15  
    16 plt . plot ( np.arange(len(weather)),weather[: , 7 ],label=2015,marker='*',linestyle='-',color="black")
    17 plt . legend()
    18 plt . show()


    可视化如下:

    step2:数据清洗

    首先要看一下数据是否是完整的,如果不完整(可能缺失或者不对齐等)就需要清洗数据,这一步对后续模型的选择以及结果很重要,因为这篇文章重点在机器学习分类器的比较,所以选择了数据比较完整的气象数据~~

    第四:算法和模型

    step1:特征工程(feature selection)

    Y是气温,X是6个与气温相关的参量,为了预测准确,要排除X之间的相关性,找到独立的与Y 相关的X,用到了相关系数来对比

    代码如下:

    1 np. random . shuffle ( weather )
    2 z = (weather [:, 7], weather [: ,5] , weather [: ,10],
    3       weather [: ,11] , weather [: ,13] ,weather [: ,16] , weather [: ,21])
    4 z = np. transpose (z)
    5 cor = np. corrcoef (z, rowvar =0)
    6 np.savetxt("C:\Users\123\Desktop\weather\mydata.csv",cor,delimiter=",")

    由相关系数找到和气温最相关的四个变量作为输入x

    step2:CV交叉验证来看一下不同分类器会不会overfitting,以Random Forest分类器为例

    代码如下:

     1 from sklearn.ensemble import RandomForestRegressor
     2 from sklearn.learning_curve import validation_curve
     3  
     4 np. random . shuffle ( weather )
     5 y = weatherall [:, 7]
     6 x = np. vstack ((weatherall [:, 10], weatherall [:, 11],weatherall [:, 14], weatherall [:, 21])) 
     7 x = np. transpose (x)
     8 x = preprocessing . scale (x)
     9 RF = RandomForestRegressor()
    10 train_loss,test_loss = validation_curve(RF,x,y,,cv=10,scoring='mean_squared_error'.train_sizes=[0.1,0.25,0.5,0.75,1])
    11 train_loss_mean = -np.mean(train_loss,axis=1)
    12 test_loss_mean = -np.mean(test_loss,axis=1)
    13  
    14 plt.figure()
    15 plt.plot(param_range,train_loss_mean,'o-',c='r',label='Training')
    16 plt.plot(param_range,test_loss_mean,'o-',c='b',label='Cross_validation')
    17 plt.xlabel('Training exapmles')
    18 plt.ylabel('Loss')
    19 plt.legend(loc='best')
    20 plt.title("10 CV on Random Forest ")
    21 plt.show()


    可视化如下:

     

    从可视化结果看,training过程中训练集合验证集的loss一直下降,说明能计算机能一直很好的学到知识,不会有overfitting的问题,换用其他几个模型(lr/DT/SVM/KNN/SGD/GB)也是同样的效果,这可能和数据有直接的关系.

    step3:各个分类器的比较(残差,错误率),以GradientBoost为例,其他的LInear Regression,SGD,KNN,SVM,DT和集成算法RF,ET都是类似的方法

    代码如下:

    1 gb = GradientBoostingRegressor()
    2 y_gb = gb . fit ( x_train , y_train).predict ( x_test )
    3 print "Residual sum of Gradient Boosting Regression squares is", np. mean(( y_gb - y_test ) ** 2)


    得到各个分类器的结果如下:


    从error看出,在Sklearn默认参数的前提下,集成算法的错误率是最低的.

    将Gradient Boost的训练集,测试集和预测集可视化:可以看出来预测结和之前可视化的2015年的气温跟分布趋势还是比较吻合的.

     


    经过机器学习的基本的流程以及模型选择以及结果预测,总结如下:

    1.data和feature比算法和模型重要,data和feature已经决定了误差上界,模型和算法只是逼近这一上界的手段

    2.sklearn的各种算法的调参对错误率结果也会产生影响,在默认参数的情况下,准确率的的排列顺序是集成算法>SVM>DT>其他,但是也可以通过优化参数来提高各分类器的准确率

    3.在机器学习过程中,overfitting是一定要注意的,通过cv_可以看出来分类器过拟合的情况

    4.总体而言,集成分类器比单个的机器学习分类器的效果要好,这是集成学习将多个个体分类器联合起来预测结果,分而治之,弱弱变强的思想.

    5.在实际应用中要视具体问题以及自己的硬件等条件以及期望达到的精度来选择,毕竟每一种分类器都不是万能的,都有其优缺点,

    适合的才是最好的!


    转载原文:https://blog.csdn.net/July_sun/article/details/53122711


  • 相关阅读:
    C#中对文件进行选择对话框打开和保存对话框进行复制
    二、RabbitMQ操作
    二、TortoiseSVN 合并、打分支、合并分支、切换分支
    一、Google开发者工具功能页面截图
    一、RabbitMQ安装与测试连接
    二、jquery Try{}catch(e){}
    ViewMode
    三、MVC_JsonResult类型
    随笔集
    五、SQL Server Profiler追踪工具
  • 原文地址:https://www.cnblogs.com/daliner/p/10088696.html
Copyright © 2020-2023  润新知