阅读此分步教程,学会通过导入scikit-learn包来搭建一个简单的机器学习流水线(pipeline)

一个机器学习模型中,有很多可移动的组件需要被组合在一起,模型才能被执行并成功的得到结果。把机器学习过程的各个部分结合在一起的过程就被称作一条 pipeline(管道,流水线)。

Pipeline是一个很笼统广义的概念,但对于数据科学家来说却尤为重要。在软件工程领域,人们通过建立pipeline来开发软件,并且从源代码到软件发布都遵循该流程。

同样的,在机器学习中,构建pipeline,使数据沿pipeline“流动”,从原始格式,最终得到有用的信息。这使我们能够建立多种机器学习方法并行的pipeline系统,从而来比较各种方法的性能。

Pipeline的每一步输入的数据,都是经过前一步处理过的,也就是某一数据处理单元的输出,是下一步的输入。

数据在pipeline中流动,就像水在水管中流动。精通pipeline思想,能让我们有效的创建一个无差错的机器学习模型,另外,pipeline也是自动化机器学习系统中非常重要的组成部分。

一条简单的pipeline

我们首先导入一个名为 Iris 的数据集,该数据集可以在 scikit-learn 的简单数据集库中找到(http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html)。

该数据集包含 4 个特征和 150 条数据。我们会用以下几步来构建pipeline,并使用Iris数据集, 来训练我们的模型。对于该数据集,我们考虑的问题是:用四个特征来预测一个给定的 Iris 数据的种类,如图一所示的流程图。

在该pipeline中,我们使用 MinMaxScaler 方法对输入数据进行预处理,用 logistic 回归方法来预测 Iris 的种类。然后,根据准确性来评估模型:

1.第一步是从 scikit-learn 中导入所需的包,这些包提供很多函数来帮助我们完成该任务。

我们必须从 sklearn.pipline 中添加 pipline 方法,该方法会提供一些建立机器学习pipeline的一些必要方法:

from sklearn.datasets import load_iris

from sklearn.preprocessing import MinMaxScaler

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split

from sklearn.pipeline import Pipeline

2.接下来导入 Iris 数据集,并将其分为训练和测试集两部分。

在本次示例中,我们用原数据集的80%来训练模型,保留20%的数据来测试模型的准确率。我们能用 shape 函数来查看数据集的维度信息:

# Load and split the data

iris = load_iris()

X_train, X_test, y_train, y_test = train_test_split(iris.data,iris.target, test_size = .2, )

X_train.shape

3.结果显示训练集有4列和120行,符合 Iris 数据集 80% 的比例,结果如下:

4.接下来,我们输出该数据集:

print(X_train)以下是译者运行代码得到的结果:

[[5.1 3.8 1.5 0.3]

[7.7 3. 6.1 2.3]

[6.7 3.1 5.6 2.4]

[5.9 3. 4.2 1.5]

[6.3 2.5 4.9 1.5]

[6.3 3.4 5.6 2.4]

[6.8 3.2 5.9 2.3]

[4.8 3. 1.4 0.3]

[6.7 3. 5. 1.7]

......

5.下一步是创建一个 pipeline 对象,该对象的格式是 (key , value) 对。Key 包含每一步的名字,用字符串表示;value 是函数名或者实际的方法名称。下面的代码片段中,我们将 MinMaxScaler() 方法命名为 minmax,LogisticRegression() 方法命名为 lr:pipe_lr = Pipeline([('minmax', MinMaxScaler()), ('lr'LogisticRegression())])

6.然后,我们将 pipeline 对象 pipe_lr 在训练集上进行拟合:

pipe_lr.fit(X_train, y_train)

7.执行完上述代码后,你会得到下面的输出,该输出展示了拟合后的模型的最终结构:

8.最后一步是用评价函数在测试集上对模型进行评分:

score = pipe_lr.score(X_test, y_test)

print('Logistic Regression pipeline test accuracy: %.3f' % score)

如下图所示,模型的准确率是 0.867,也即 86.7%。

(译注:该准确率和数据集的划分有关系,每次运行,数据集的随机划分不同,准确率也不同)

在该示例中,我们创建了一个包含 minmax 标准化和 Logistic 回归两步的pipeline。当我们在 pipe_lr 上进行拟合时,MinMaxScaler 对输入数据执行了 fit 和 transform 方法,然后数据流向预测函数, logistic回归函数。pipeline中的这些中间步骤被称为 transformers,而最后一步被称作 estimator。

关注集智AI学园公众号

获取更多更有趣的AI教程吧!

搜索微信公众号:swarmAI

集智AI学园QQ群:426390994

学园网站:http://campus.swarma.org

iris流程图_如何搭建一个简单的机器学习流水线?相关推荐

  1. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

  2. python旅游推荐系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

  3. python代理池_用Python搭建一个简单的代理池

    其实每次爬东西的时候,特怕IP被封,所以每次都要把时间延迟设置得长一点...这次用Python搭建一个简单的代理池.获取代理IP,然后验证其有效性.不过结果好像不是很理想,为什么西刺代理的高匿代理都能 ...

  4. 用go来搭建一个简单的图片上传网站

    提前说明一下:代码参考了<Go语言编程>,稍有变动, 自己亲自玩了一遍. 之前玩过go web server, 现在来用go来搭建一个简单的图片上传网站, 工作目录是:~/photoweb ...

  5. 流媒体视频服务:快速搭建一个简单的流媒体视频服务(一)

    快速搭建一个简单的流媒体视频服务 前言 系统组成 RTMP协议简介 Red5 概述 Red5 服务器搭建 前言 最近自己在研究有关于流媒体播放的技术,网上资料甚少.出于开源精神以及在查阅资料得到各位大 ...

  6. 用思科网络模拟器搭建一个简单的局域网

    目录 前言 搭建 配置 前言 在搭建一个简单的局域网前,你必须知道一些常识. 网线(双绞)线的标准 T568A标准:白绿.绿.白橙.蓝.白蓝.橙.白棕.棕 T568B标准:白橙.橙.白绿.蓝.白蓝.绿 ...

  7. 使用SpringBoot搭建一个简单的webSocket服务

    前言 个人地址:使用SpringBoot搭建一个简单的webSocket服务 什么是WebSocket? WebSocket是一个HTML5新增的协议,它的目的在浏览器和服务器之间建立一个不受限的双向 ...

  8. 1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

    在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作: 所有路由不能全部都在myDjango下的urls.py路由文件中, ...

  9. 测试开发——搭建一个简单 web服务(flask框架基础)项目实战

    搭建一个简单 web服务-flask框架 一.什么是wsgi? 二.搭建一个简单 web服务 三.扩展 四.请求加参数的情况 五.安装flask 一.什么是wsgi? wsgi是webserver和a ...

最新文章

  1. mysql 存储过程 互斥_mysql中的存储过程和事务隔离
  2. 如何扩大控件的触控响应区域
  3. I/O端口和I/O内存
  4. Linux下关机、重启
  5. 每天一道LeetCode-----后缀表达式求值
  6. java 读取mysql数据_使用java从mysql数据库读取数据
  7. 【Sniffer】如何查看Sniffer截获的数据内容
  8. AI CC呼叫中心源码
  9. 20年前的人机大战,IBM“深蓝”耍了花招
  10. kodexplor类似php,Windows 下搭建 PHP + Nginx + KODExplorer
  11. 按键精灵输出中文乱码,输出不是?,输出如Ö16:48ÀÂ
  12. 用sympy库解常微分方程
  13. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)
  14. 2015061802 - 有道网页翻译
  15. csp认证考试准备Day-3
  16. 来自腾讯相当好的文章:研发效能度量实践指南
  17. D. Unusual Sequences (数论,质因子分解,dp)
  18. HW:红队眼中的防守弱点与蓝队应对攻击的常用策略
  19. 防水行业在vivo投放广告有效果吗?vivo广告开户全国代理商!
  20. 「问题解决」java web项目打成jar包运行后工具类无法读取模板文件的解决方法

热门文章

  1. Linux常用的基本命令head、tail、tar、grep、date、cal(二)
  2. [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)
  3. GetFileAttributesEx读取文件相应属性
  4. SQLite 数据库注入总结
  5. 【安全漏洞】ProxyShell漏洞复现详解
  6. 【网络安全】反序列化漏洞底层扩展与制作WebShell
  7. 在word中粘贴代码保持高亮
  8. MySQL LIMIT:限制查询结果的记录条数
  9. MySQL数据类型简介
  10. 5、(字符串类型)CHAR、VARCHAR、TEXT、ENUM、SET