注:本教程是本人尝试使用scikit-learn的一些经验,scikit-learn真的超级容易上手,简单实用。30分钟学会用调用基本的回归方法和集成方法应该是够了。 
本文主要参考了scikit-learn的官方网站 
前言:本教程主要使用了numpy的最最基本的功能,用于生成数据,matplotlib用于绘图,scikit-learn用于调用机器学习方法。如果你不熟悉他们(我也不熟悉),没关系,看看numpy和matplotlib最简单的教程就够了。我们这个教程的程序不超过50行

1. 数据准备

为了实验用,我自己写了一个二元函数,y=0.5*np.sin(x1)+ 0.5*np.cos(x2)+0.1*x1+3。其中x1的取值范围是0~50,x2的取值范围是-10~10,x1和x2的训练集一共有500个,测试集有100个。其中,在训练集的上加了一个-0.5~0.5的噪声。生成函数的代码如下:
def f(x1, x2):y = 0.5 * np.sin(x1) + 0.5 * np.cos(x2)  + 0.1 * x1 + 3 return ydef load_data():x1_train = np.linspace(0,50,500)x2_train = np.linspace(-10,10,500)data_train = np.array([[x1,x2,f(x1,x2) + (np.random.random(1)-0.5)] for x1,x2 in zip(x1_train, x2_train)])x1_test = np.linspace(0,50,100)+ 0.5 * np.random.random(100)x2_test = np.linspace(-10,10,100) + 0.02 * np.random.random(100)data_test = np.array([[x1,x2,f(x1,x2)] for x1,x2 in zip(x1_test, x2_test)])return data_train, data_test

其中训练集(y上加有-0.5~0.5的随机噪声)和测试集(没有噪声)的图像如下: 

2. scikit-learn最简单的介绍。

scikit-learn非常简单,只需实例化一个算法对象,然后调用fit()函数就可以了,fit之后,就可以使用predict()函数来预测了,然后可以使用score()函数来评估预测值和真实值的差异,函数返回一个得分。例如调用决策树的方法如下

In [6]: from sklearn.tree import DecisionTreeRegressorIn [7]: clf = DecisionTreeRegressor()In [8]: clf.fit(x_train,y_train)
Out[11]:
DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,max_leaf_nodes=None, min_samples_leaf=1, min_samples_split=2,min_weight_fraction_leaf=0.0, presort=False, random_state=None,splitter='best')
In [15]: result = clf.predict(x_test)In [16]: clf.score(x_test,y_test)
Out[16]: 0.96352052312508396In [17]: result
Out[17]:
array([ 2.44996735,  2.79065744,  3.21866981,  3.20188779,  3.04219101,2.60239551,  3.35783805,  2.40556647,  3.12082094,  2.79870458,2.79049667,  3.62826131,  3.66788213,  4.07241195,  4.27444808,4.75036169,  4.3854911 ,  4.52663074,  4.19299748,  4.42235821,4.48263415,  4.16192621,  4.40477767,  3.76067775,  4.35353213,4.6554961 ,  4.99228199,  4.29504731,  4.55211437,  5.08229167,

接下来,我们可以根据预测值和真值来画出一个图像。画图的代码如下:

    plt.figure()plt.plot(np.arange(len(result)), y_test,'go-',label='true value')plt.plot(np.arange(len(result)),result,'ro-',label='predict value')plt.title('score: %f'%score)plt.legend()plt.show()

然后图像会显示如下: 

3. 开始试验各种不同的回归方法

为了加快测试, 这里写了一个函数,函数接收不同的回归类的对象,然后它就会画出图像,并且给出得分. 
函数基本如下:

def try_different_method(clf):clf.fit(x_train,y_train)score = clf.score(x_test, y_test)result = clf.predict(x_test)plt.figure()plt.plot(np.arange(len(result)), y_test,'go-',label='true value')plt.plot(np.arange(len(result)),result,'ro-',label='predict value')plt.title('score: %f'%score)plt.legend()plt.show()
train, test = load_data()
x_train, y_train = train[:,:2], train[:,2] #数据前两列是x1,x2 第三列是y,这里的y有随机噪声
x_test ,y_test = test[:,:2], test[:,2] # 同上,不过这里的y没有噪声

3.1 常规回归方法

常规的回归方法有线性回归,决策树回归,SVM和k近邻(KNN)

3.1.1 线性回归

In [4]: from sklearn import linear_modelIn [5]: linear_reg = linear_model.LinearRegression()In [6]: try_different_method(linar_reg)

3.1.2数回归

from sklearn import tree
tree_reg = tree.DecisionTreeRegressor()
try_different_method(tree_reg)

然后决策树回归的图像就会显示出来: 

3.1.3 SVM回归

In [7]: from sklearn import svmIn [8]: svr = svm.SVR()In [9]: try_different_method(svr)

结果图像如下: 

3.1.4 KNN

In [11]: from sklearn import neighborsIn [12]: knn = neighbors.KNeighborsRegressor()In [13]: try_different_method(knn)

竟然KNN这个计算效能最差的算法效果最好 

3.2 集成方法(随机森林,adaboost, GBRT)

3.2.1随机森林

In [14]: from sklearn import ensembleIn [16]: rf =ensemble.RandomForestRegressor(n_estimators=20)#这里使用20个决策树In [17]: try_different_method(rf)

3.2.2 Adaboost

In [18]: ada = ensemble.AdaBoostRegressor(n_estimators=50)In [19]: try_different_method(ada)

图像如下: 

3.2.3 GBRT

In [20]: gbrt = ensemble.GradientBoostingRegressor(n_estimators=100)In [21]: try_different_method(gbrt)

图像如下 

4. scikit-learn还有很多其他的方法,可以参考用户手册自行试验.

5.完整代码

我这里在pycharm写的代码,但是在pycharm里面不显示图形,所以可以把代码复制到ipython中,使用%paste方法复制代码片. 
然后参照上面的各个方法导入算法,使用try_different_mothod()函数画图. 
完整代码如下:

import numpy as np
import matplotlib.pyplot as pltdef f(x1, x2):y = 0.5 * np.sin(x1) + 0.5 * np.cos(x2) + 3 + 0.1 * x1 return ydef load_data():x1_train = np.linspace(0,50,500)x2_train = np.linspace(-10,10,500)data_train = np.array([[x1,x2,f(x1,x2) + (np.random.random(1)-0.5)] for x1,x2 in zip(x1_train, x2_train)])x1_test = np.linspace(0,50,100)+ 0.5 * np.random.random(100)x2_test = np.linspace(-10,10,100) + 0.02 * np.random.random(100)data_test = np.array([[x1,x2,f(x1,x2)] for x1,x2 in zip(x1_test, x2_test)])return data_train, data_testtrain, test = load_data()
x_train, y_train = train[:,:2], train[:,2] #数据前两列是x1,x2 第三列是y,这里的y有随机噪声
x_test ,y_test = test[:,:2], test[:,2] # 同上,不过这里的y没有噪声def try_different_method(clf):clf.fit(x_train,y_train)score = clf.score(x_test, y_test)result = clf.predict(x_test)plt.figure()plt.plot(np.arange(len(result)), y_test,'go-',label='true value')plt.plot(np.arange(len(result)),result,'ro-',label='predict value')plt.title('score: %f'%score)plt.legend()plt.show()

30分钟学会用scikit-learn的基本回归方法(线性、决策树、SVM、KNN)和集成方法(随机森林,Adaboost和GBRT)相关推荐

  1. Pyechart:30分钟学会pyecharts数据可视化

    30分钟学会pyecharts数据可视化 小红:你先跟我说说什么是pyecharts吧. 小明:Echarts 是一个由百度开源的数据可视化javascript库,凭借着良好的交互性,精巧的图表设计, ...

  2. 【转】30分钟学会UML类图

    转自:30分钟学会UML类图 - 知乎 30分钟学会UML类图 肖继潮 UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作.一般说来,在UML图中,只要掌握类图.用例图.时序 ...

  3. 30 分钟学会 Flex 布局

    30 分钟学会 Flex 布局 关注公众号 风色年代(itfantasycc) 更多好玩的前端资料等你拿~~ 林东洲 30 分钟学会 Flex 布局 - 知乎 (zhihu.com) 为什么我要写这一 ...

  4. python程序-30分钟学会用Python编写简单程序

    原标题:30分钟学会用Python编写简单程序 参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方 ...

  5. python写软件实例-30分钟学会用Python编写简单程序

    原标题:30分钟学会用Python编写简单程序 参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方 ...

  6. 30分钟学会EventBus3 0详解(二)(EventBus3 0的详细使用)(by星空武哥)

    转载声明原创地址:http://blog.csdn.net/lsyz0021/article/details/52094855 30分钟学会EventBus3.0详解(一)(引入和初始化EventBu ...

  7. 30分钟学会专利提案

    30分钟学会专利提案 预期效果 引起重视 掌握套路 激发灵感 分享内容 6个问题 1.专利.发明专利.交底书.申请书? 专利分为发明.实用新型和外观设计三种类型 授予发明专利应当具备三性:新颖性.创造 ...

  8. 服务器可视化_疫情来袭,30分钟学会用python开发部署疫情可视化网站

    2019-nCov疫情实时数据可视化--30分钟python快速版 疫情来袭,宅在家不如学习用python如何开发并部署一个疫情实时追踪可视化页面.页面预览 本文将介绍如何使用python开发网站,「 ...

  9. 30分钟学会XAML

    1.狂妄的WPF 相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API.例如:WinForm(带控件表单).GDI+(2D图形).DirectX API(3D图形)以及流媒体和 ...

  10. c# xaml语言教程,c#学习之30分钟学会XAML

    1.狂妄的WPF 相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API.例如:WinForm(带控件表单).GDI+(2D图形).DirectX API(3D图形)以及流媒体和 ...

最新文章

  1. faster rcnn源码解读(四)之数据类型imdb.py和pascal_voc.py(主要是imdb和roidb数据类型的解说)
  2. Codeforces.1110E.Magic Stones(思路 差分)
  3. 感知算法论文(三):Feature Selective Anchor-Free Module for Single-Shot Object Detection
  4. 依据经纬度解析商圈scala实现
  5. Es6 let const var的区别
  6. ROS环境下采用PCL点云库对PCD格式点云进行滤波、旋转和平移等处理,并用RVIZ实时显示
  7. python写诗代码_我们分析了超过50万首诗歌,教你用代码写诗(附代码)
  8. RGMII接口(KSZ9031)
  9. js - JSON构造函数
  10. ppt如何利用视频作为背景
  11. word无法在公式编辑器中输入字符
  12. 【二分答案】Problem A:天堂_珍珠
  13. 采样定理与奈奎斯特极限
  14. Python 他来了,他来了!
  15. 珍藏多年的视频文案网站
  16. 萝卜怎么吃最治病:白菜萝卜汤养胃暖身
  17. 100+实用功能合集,手机中的神器,黑科技中的战斗鸡!
  18. 君正X2000/X2000E芯片性能和处理器介绍
  19. kubelet参数解释about kubelet gc image and evict pod.
  20. c语言length函数,length_length什么意思

热门文章

  1. Linux 实现与宿主机共享文件夹 Centos7
  2. MySQL如何按天统计数据,没有记录的天自动补充0
  3. SAP漏洞:为什么补丁没有发挥作用?
  4. 《Android游戏开发详解》——导读
  5. iNeedle系统之国舜项目
  6. Python 2.7.9 Demo - 015.元组的定义、取值、遍历
  7. Html5带来了什么?
  8. GPU图形绘制管线简介
  9. bzoj 1503: [NOI2004]郁闷的出纳员 (splay)
  10. 特征工程一:特征缩放、选择