在机器学习过程中,大多数机器学习应用不仅需要应该用单个算法,而且还需要将许多不同的处理步骤和机器学习模型链接在一起。

接下来我们将引入本章学习的内容——Pipeline类:该类可以简化构造变换和模型链的过程。这里重点介绍Pipeline的结果。下面以使用Pipeline和GridSearchCV来提高cancer数据库性能为例:

from sklearn.svm import SVC

from sklearn.datasets import load_breast_cancer

from sklearn.preprocessing import MinMaxScaler

#加载并划分数据

cancer = load_breast_cancer()

x_train, x_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)

#计算训练数据中的最大最小值

scaler = MinMaxScaler().fit(x_train)

x_train_scaled = scaler.transform(x_train)

svm = SVC()

#在缩放后的训练集上学习SVM

svm.fit(x_train, y_train)

#对测试数据进行缩放,并计算缩放后数据额分数

x_test_scaled = scaler.transform(x_test)

print("Test score is:{:.3f}".format(svm.score(x_test_scaled, y_test)))

运行后输出结果为:

Test score is:0.629

用预处理进行参数选择:现在,假设我们希望利用GridSearchCV找到更好的SVC参数,可以按照前面所学的方法进行,具体代码如下:

param_grid = {'gamma': [0.001,0.01,0.1,1,10]}

grid = GridSearchCV(SVC(), param_grid=param_grid, cv=5)

grid.fit(x_train, y_train)

print("Grid Search with accuracy")

print("Best parameters:", grid.best_params_)

print("Best cross_val_score (accuracy):{:.3f}".format(grid.best_score_))

print("Test set accuracy: {:.3f}".format(grid.score(x_test, y_test)))

运行后其结果如下:

Best parameters: {'gamma': 0.001}

Best cross_val_score (accuracy):0.923

Test set accuracy: 0.930

由此可见,通过缩放后其精度得到较大提高。不过,上述代码中有一个不容易察觉的陷阱,就是我们将数据进行缩放时,使用了训练集中所有数据来找到训练的方法,然后使用缩放后的训练数据来运行带交叉验证的网格搜索。相当于将其中的训练集和测试集都进行了每次的划分和缩放,这样就得到了过分乐观的预测结果。

对于模型来说,这种数据与新数据看起来截然不同,如果我们观察新数据(比如测试集中的数据),那么这些数据并没有用于对训练集中的数据进行缩放,其最大值和最小值也可能与训练数据不同,下图显示了交叉验证与最终评估这两个过程中数据处理的不同之处:

mglearn.plots.plot_improper_processing()

在交叉验证循环之外进行与处理时的数据情况

因此,对于建模过程,交叉验证中的划分无法正确地反映新数据的特征,我们已经将这部分数据信息泄露给建模过程,这将会导致在交叉验证过程中得到过于乐观的结果。

为了解决这个问题,在交叉验证中,应该在进行任何预处理之前完成数据集的划分,任何从数据集中提取信息的处理过程都应该仅应用于数据集的训练部分。因此,任何交叉验证都应该处于最外层循环。

在scikit-learn中,要想使用cross_val_score函数和GridSearchCV函数实现这一点,可以使用Pipeline类。Pipeline类可以将多个处理步骤进行合并为单个的scikit-learn估计器。

Pipeline类本身具有fit、predict和score方法,其行为与scikit-learn中的其他模型相同。Pipeline最常见的用力就是将预处理步骤(比如数据的缩放)与一个监督模型(比如分类器)链接在一起。

auot lisp 选择集处理_第64集 python机器学习:用预处理进行参数选择相关推荐

  1. python划分训练集和测试集_杨涛的Python机器学习3:单特征与多特征、训练集与测试集,杨桃...

    本人CSDN博客专栏:https://blog.csdn.net/yty_7 Github地址:https://github.com/yot777/ 单特征与多特征 在上一节标签和特征的示例中,我们使 ...

  2. python分类预测降低准确率_十分钟掌握python机器学习特征选择

    十分钟掌握python机器学习特征选择-1.jpg (33.2 KB, 下载次数: 0) 2018-6-26 23:01 上传 在机器学习中,特征选择是实践中的一步, 帮你在所有特征中选择对结果贡献最 ...

  3. 小象python培训班_小象最新Python机器学习升级版视频学习教程 共24节精品课

    小象最新Python机器学习升级版视频学习教程 共24节精品课 本课程特点是从数学层面推导最经典的机器学习算法,以及每种算法的示例和代码实现(Python).如何做算法的参数调试.以实际应用案例分析各 ...

  4. Python机器学习之模型评估及选择

    1. 评估方法 1.回归:RMSE(平方根误差).MAE(平均绝对误差).MSE(平均平方误差).Coefficient of determination (决定系数R2). MAPE(平均绝对百分误 ...

  5. node redis集群_如何使用集群扩展Node.js服务器

    node redis集群 by Michele Riva 由Michele Riva 如何使用集群扩展Node.js服务器 (How to scale your Node.js server usin ...

  6. kafka 集群_单机版kafka集群部署

    前言 分布式消息队列是大型分布式系统不可缺少的中间件,主要解决应用耦合.异步消息.流量削锋等问题.实现高性能.高可用.可伸缩和最终一致性架构. 今天跟大家讲解下如何部署单机Kafka集群,希望大家喜欢 ...

  7. 树莓派 mysql集群_多树莓派集群服务器

    树莓派使用实例之:2 Pi R 第二篇:Web服务器 在我的上一篇文章中讲过如何做一个高可用系统:两个树莓派布署上 GlusterFS 集群文件系统,就变成一个容错文件服务器了.在这篇文章中我们会基于 ...

  8. hadoop小型集群_小型Hadoop集群的Ganglia配置和一些故障排除

    hadoop小型集群 Ganglia是一个针对大型集群的开源,可扩展且分布式的监视系统. 它收集,汇总并提供数十种与计算机相关的指标(例如CPU,内存,存储,网络使用情况)的时序视图. 您可以在UC ...

  9. php配置mysql集群_【mysql集群】mysql集群配置

    http://topic.csdn.net/u/20100621/16/c9436c17-374c-4c3a-b075-a18670143fd1.html MySql-Cluster安装 系统 cen ...

最新文章

  1. 使用nc传输文件和目录【转】
  2. LINUX下的21个特殊符号 转
  3. C语言 求出平面直角坐标系中两点的距离
  4. 《POSIX多线程程序设计》读书笔记
  5. uniapp保存图片_Uniapp实现保存图片到相册(封装起来)
  6. SpringBoot异常处理-自定义错误页面
  7. 力扣174. 地下城游戏
  8. powerdesigner mysql 自增主键_PowerDesigner Mysql 主键自增、初始值、字符集
  9. IntelliJ IDEA 2018.2.2远程调试Tomcat的配置方法
  10. CN笔记:第二章 物理层
  11. 8-2 主从复制高可用
  12. Access无法打开 Windows 出现正在准备安装,正在配置
  13. 群联固态硬盘修复工具_固态硬盘有三大要素,那么你的固态硬盘买对了吗?
  14. 线下实体零售门店如何做好会员运营管理系统?
  15. 进程间通讯的四种方式
  16. 双绞线传输距离_双绞线电缆施工“潜规则”
  17. python恶搞代码打开对方摄像头_用Python获取摄像头并实时控制人脸的实现示例
  18. 我的世界电脑正版服务器地址大全,《我的世界》服务器地址大全 各个服务器一览分享...
  19. 专访腾讯高级交互设计师WingST:交互设计师的思维、眼界、手段和精神
  20. cad怎么将图层后置_CAD中如何将某一个图层置于其他图层之上???

热门文章

  1. ArcGIS Engine生成等值线(C#)
  2. Linux Xmanager
  3. eclipse No projects are found to import 的解决
  4. Windows 2003 主域控和DNS迁移到Windows 2008 R2(1)
  5. C#只允许启动一个WinFrom进程
  6. golang 不定参 可变参 使用 传递
  7. 基于python的开源商业软件套装 Odoo 简介
  8. zimbra xxe+ssrf 导致 getshell
  9. centos6.8 配置 tomcat
  10. pycharm 更改字体和界面样式