from sklearn.pipeline import Pipeline

管道机制在机器学习算法中得以应用的根源在于,参数集在新数据集(比如测试集)上的重复使用

管道机制实现了对全部步骤的流式化封装和管理(streaming workflows with pipelines)。

注意:管道机制更像是编程技巧的创新,而非算法的创新。

接下来我们以一个具体的例子来演示sklearn库中强大的Pipeline用法:

1. 加载数据集

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import LabelEncoderdf = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/''breast-cancer-wisconsin/wdbc.data', header=None)# Breast Cancer Wisconsin datasetX, y = df.values[:, 2:], df.values[:, 1]# y为字符型标签# 使用LabelEncoder类将其转换为0开始的数值型
encoder = LabelEncoder()
y = encoder.fit_transform(y)>>> encoder.transform(['M', 'B'])array([1, 0])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=0)

2. 构思算法的流程

可放在Pipeline中的步骤可能有:

  • 特征标准化是需要的,可作为第一个环节
  • 既然是分类器,classifier也是少不了的,自然是最后一个环节
  • 中间可加上比如数据降维(PCA)
  • 。。。
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegressionfrom sklearn.pipeline import Pipelinepipe_lr = Pipeline([('sc', StandardScaler()),('pca', PCA(n_components=2)),('clf', LogisticRegression(random_state=1))])
pipe_lr.fit(X_train, y_train)
print('Test accuracy: %.3f' % pipe_lr.score(X_test, y_test))# Test accuracy: 0.947

Pipeline对象接受二元tuple构成的list,每一个二元 tuple 中的第一个元素为 arbitrary identifier string,我们用以获取(access)Pipeline object 中的 individual elements,二元 tuple 中的第二个元素是 scikit-learn与之相适配的transformer 或者 estimator。

Pipeline([('sc', StandardScaler()), ('pca', PCA(n_components=2)), ('clf', LogisticRegression(random_state=1))])

3. Pipeline执行流程的分析

Pipeline 的中间过程由scikit-learn相适配的转换器(transformer)构成,最后一步是一个estimator。比如上述的代码,StandardScalerPCA transformer 构成intermediate steps,LogisticRegression 作为最终的estimator

当我们执行 pipe_lr.fit(X_train, y_train)时,首先由StandardScaler在训练集上执行 fittransform方法,transformed后的数据又被传递给Pipeline对象的下一步,也即PCA()。和StandardScaler一样,PCA也是执行fit和transform方法,最终将转换后的数据传递给 LosigsticRegression。整个流程如下图所示:

4. pipeline 与深度神经网络的multi-layers

只不过步骤(step)的概念换成了层(layer)的概念,甚至the last step 和 输出层的含义都是一样的。

只是抛出一个问题,是不是有那么一丢丢的相似性?

sklearn 中的 Pipeline 机制相关推荐

  1. sklearn中的Pipline(流水线学习器)

    简介 管道机制实现了对全部步骤的流式化封装和管理(streaming workflows with pipelines). 管道机制(也有人翻译为流水线学习器?这样翻译可能更有利于后面内容的理解)在机 ...

  2. Tomcat中容器的pipeline机制

    本文主要目的是讲解tomcat中的pipeline机制,涉及部分源码分析 之前我们在前面的文章介绍过,tomcat中Container有4种,分别是Engine,Host,Context,Wrappe ...

  3. Sklearn中的CV与KFold详解

    关于交叉验证,我在之前的文章中已经进行了简单的介绍,而现在我们则通过几个更加详尽的例子.详细的介绍 CV %matplotlib inline import numpy as np from skle ...

  4. sklearn中一些参数

    转载:http://www.cnblogs.com/chenyaling/p/7826229.html 1.监督学习 1.1.广义线性模型 1.1.1.普通最小二乘法  class sklearn.l ...

  5. sklearn中的正则化

    文章目录 L1和L2 L2正则化.岭回归 L1正则化.Lasso回归 弹性网络 提前停止 正则化是处理模拟过拟合最常用的方式之一.本部分我们介绍常见的正则化方法. L1和L2 Lasso回归的一个重要 ...

  6. ASP.NET Core 中的管道机制

    首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...

  7. sklearn中的逻辑回归

    复习一下sklearn中的这些用法 给定一堆数据,并设置一个随机种子,让大家都能复现: import numpy as np import matplotlib.pyplot as pltnp.ran ...

  8. 这样讲 Netty 中的心跳机制,还有谁不会?

    作者:永顺 segmentfault.com/a/1190000006931568 基础 何为心跳 顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, ...

  9. tfidf处理代码_tf idf公式及sklearn中TfidfVectorizer

    在文本挖掘预处理之向量化与Hash Trick中我们讲到在文本挖掘的预处理中,向量化之后一般都伴随着TF-IDF的处理,那么什么是TF-IDF,为什么一般我们要加这一步预处理呢?这里就对TF-IDF的 ...

最新文章

  1. 看linux驱动程序看了几层之后就乱了,找到了linux分区顺序错乱修复方法
  2. If语句:你们到底想把我放到哪儿?
  3. 带你了解什么样的信息是陷阱或为勒索病毒在诱骗
  4. oralce创建用户
  5. Spring AOP根据JdbcTemplate方法名动态设置数据源
  6. 26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法
  7. Linux命令及文件操作
  8. zookeeper思维导图
  9. VS中代码格式及样式的统一处理
  10. python工资一般多少p-Python里的黄金库,学会了你的工资至少翻一倍
  11. c语言之fopen参数(r+,w+,a+)
  12. 分享:一个Java写的教师信息管理系统(windowbuilder)(附码云源码)~~~
  13. 数据挖掘经典十大算法_ID3算法
  14. 3D建模游戏动漫模型制作软件都有哪些?最全解析,工具免费领
  15. 原件常识:以“光”为传媒的光电耦合器
  16. 谁若97岁死,奈何桥上等三年。
  17. 架构师素养及从小菜进阶架构(CTO)的书籍【转】
  18. 【HAN】代码逐句理解二
  19. 计算机主机电源怎么换,如何更换电脑电源风扇
  20. 微信小程中wx.requert请求外部数据和.NET Core 发布服务支持https

热门文章

  1. 怎样才能恢复误删的数据-免费版本
  2. c++ 可变参数_深入剖析ProE可变扫描特征原理、操作和应用方法
  3. worker进程和task进程区别_swoole中使用task进程异步的处理耗时任务
  4. java数组元素的输入_java基础--键盘输入一个数,输出数组中指定元素
  5. adb命令启动某个action_Android adb shell启动应用程序的方法
  6. Navicat过期问题的解决
  7. 并发编程(1): volatile、原子变量、自旋锁和互斥锁
  8. 深入学习卷积神经网络中卷积层和池化层的意义(转)
  9. 试验笔记 - Eclipse的.class反编译插件
  10. pip install rrdtool