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

简介

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

管道机制(也有人翻译为流水线学习器?这样翻译可能更有利于后面内容的理解)在机器学习算法中得以应用的根源在于,参数集在新数据集(比如测试集)上的重复使用。使用管道机制可以大幅度减少代码量.总的来说这是一个非常实用而有趣的方法

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

通常流水线学习器的通常步骤
数据标准化学习器=>特征选取学习器=>执行预测的学习器
除了最后一个学习器之外,所有学习器必须提供transform算法,该方法用于数据转换

常用方法与属性

sklearn官方文档

Parameters

  • steps : 步骤:列表(list)
    被连接的(名称,变换)元组(实现拟合/变换)的列表,按照它们被连接的顺序,最后一个对象是估计器(estimator)。

  • memory:内存参数,Instance of sklearn.external.joblib.Memory or string, optional (default=None)

  • 属性,name_steps:bunch object,具有属性访问权限的字典
    只读属性以用户给定的名称访问任何步骤参数。键是步骤名称,值是步骤参数。或者也可以直接通过”.步骤名称”获取

funcution

  • Pipline的方法都是执行各个学习器中对应的方法,如果该学习器没有该方法,会报错
  • 假设该Pipline共有n个学习器

  • transform,依次执行各个学习器的transform方法

  • inverse_transform,依次执行各个学习器的inverse_transform方法

  • fit,依次对前n-1个学习器执行fit和transform方法,第n个学习器(最后一个学习器)执行fit方法

  • predict,执行第n个学习器的predict方法
  • score,执行第n个学习器的score方法

  • set_params,设置第n个学习器的参数

  • get_param,获取第n个学习器的参数

例子

一般步骤

  • 首先对数据进行预处理,比如缺失值的处理
  • 数据的标准化
  • 降维
  • 特征选择算法
  • 分类或者预测算法(估计器,estimator)

流程图

Pipline流程图

加载数据

import pandas as pd
from sklearn.model_selection 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[:, 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)

利用Pipline合并算法流程

Pipline


def Examples_SklearnOrg_Pipline(X_train, X_test, y_train, y_test):
    from sklearn import svm
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import f_regression
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.decomposition import PCA

    anova_filter = SelectKBest(f_regression, k=5)
    # clf = svm.LinearSVR(kernel='linear')
    clf = svm.LinearSVC()
    anova_svm = Pipeline([('sc', StandardScaler()),
                        ('pca', PCA(n_components=2)),('anova', anova_filter), ('svc', clf)])
    # You can set the parameters using the names issued
    # For instance, fit using a k of all in the SelectKBest
    # Because the PCA,we only have 2 features
    # and a parameter 'C' of the svm
    anova_svm.set_params(anova__k="all", svc__C=.1).fit(X_train, y_train)

    # prediction_trian = anova_svm.predict(X_train)
    # prediction_test = anova_svm.predict( X_test)
    score_train = anova_svm.score(X_train, y_train)
    score_test = anova_svm.score(X_test, y_test)

    # print("prediction_train :", prediction_trian)
    # print("prediction_test :", prediction_test)
    print("score_train :", score_train)
    print("score_test :", score_test)
    # getting the selected features chosen by anova_filter
    Pri_nameed_steps00 = anova_svm.named_steps['anova'].get_support()
    print(Pri_nameed_steps00)

    # Another way to get selected features chosen by anova_filter
    Pri_nameed_steps01 = anova_svm.named_steps.anova.get_support()
    print(Pri_nameed_steps01)

UCI_sc_pca_logisticRe(X_train, X_test, y_train, y_test)
Examples_SklearnOrg_Pipline(X_train, X_test, y_train, y_test)

输出:


score_train : 0.964835164835
score_test : 0.921052631579
[ True  True]
[ True  True]

参考

posted @ 2017-10-14 14:37  FontTian  阅读(1452)  评论(0编辑  收藏  举报