sklearn 中的 Pipeline 机制

sklearn 中的 Pipeline 机制

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 LabelEncoder

 

df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/'

                 'breast-cancer-wisconsin/wdbc.data', header=None)

                    

X, y = df.values[:, 2:], df.values[:, 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)
  • ……

from sklearn.preprocessing 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)),

                    ('clf', LogisticRegression(random_state=1))

                    ])

pipe_lr.fit(X_train, y_train)

print('Test accuracy: %.3f' % pipe_lr.score(X_test, y_test))

Pipeline对象接受二元tuple构成的list

3. Pipeline执行流程的分析

流水线的输入为一连串的数据挖掘步骤,其中最后一步必须是估计器(Estimator),可理解成分类器前几步是转换器(Transformer)。输入的数据集经过转换器的处理后,输出的结果作为下一步的输入。最后,用位于流水线最后一步的估计器对数据进行分类。

 

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

 

下面再举一个例子:

sklean提供的pipeline来将多个学习器组成流水线,通常流水线的形式为:

将数据标准化的学习器---特征提取的学习器---执行预测的学习器

除了最后一个学习器之外,前面的所有学习器必须提供transform方法,该方法用于数据转化(例如:归一化,正则化,以及特征提取)

from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
 
def test_Pipeline(data):
    x_train,x_test,y_train,y_test=data
    steps=[('Linear_SVM',LinearSVC(C=1,penalty='l1',dual=False)),
           ('LogisticRegression',LogisticRegression(C=1))]
    pipeline=Pipeline(steps)
    pipeline.fit(x_train,y_train)
    print('name steps:',pipeline.named_steps)
    print('Pipeline Score:',pipeline.score(x_test,y_test))
    
if __name__=='__main__':
    data=load_digits()
    X=data.data
    y=data.target
    test_Pipeline(cross_validation.train_test_split(X,y,test_size=0.25,
                                        random_state=0,stratify=y))
    
    
    
from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
'''
工作流程:先进行pca降为,然后使用Logistic回归,来分类
'''
def test_Pipeline(data):
    x_train,x_test,y_train,y_test=data
    steps=[('PCA',PCA()),
           ('LogisticRegression',LogisticRegression(C=1))]
    pipeline=Pipeline(steps)
    pipeline.fit(x_train,y_train)
    print('name steps:',pipeline.named_steps)
    print('Pipeline Score:',pipeline.score(x_test,y_test))
    
if __name__=='__main__':
    data=load_digits()
    X=data.data
    y=data.target
    test_Pipeline(cross_validation.train_test_split(X,y,test_size=0.25,
                                        random_state=0,stratify=y))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值