sklearn 中的 Pipeline 机制

前端之家收集整理的这篇文章主要介绍了sklearn 中的 Pipeline 机制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

1.加载数据集

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
from pandas as pd from sklearn.cross_validation import train_test_split from sklearn.preprocessing import LabelEncoder df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/' 'breast-cancer-wisconsin/wdbc.data',header=None) # Breast Cancer Wisconsin dataset X,y = df.values[:,2:],df.values[:,102); Box-sizing: border-Box;">1] # y为字符型标签 # 使用LabelEncoder类将其转换为0开始的数值型 encoder = LabelEncoder() y = encoder.fit_transform(y) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=.2,random_state=0)

2.构思算法的流程

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

  • 特征标准化是需要的,可作为第一个环节
  • 既然是分类器,classifier也是少不了的,自然是最后一个环节
  • 中间可加上比如数据降维(PCA)
  • 。。。
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    import StandardScaler from sklearn.decomposition import PCA from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline pipe_lr = Pipeline([('sc',StandardScaler()),('pca',PCA(n_components=2)),0); Box-sizing: border-Box;">'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 中的第一个元素为 arbitraryidentifier string,我们用以获取(access)Pipeline object 中的 individual elements,二元 tuple 中的第二个元素是 scikit-learn与之相适配的transformer 或者 estimator。

      
      
  • 1
    • 1
    Pipeline([(1))])

    3.Pipeline执行流程的分析

    Pipeline 的中间过程由scikit-learn相适配的转换器(transformer)构成,最后一步是一个estimator。比如上述的代码StandardScalerPCAtransformer构成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 和 输出层的含义都是一样的。

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

    原文链接:https://www.f2er.com/javaschema/283412.html

    猜你在找的设计模式相关文章