• 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]
    

    参考

  • 相关阅读:
    判断鼠标点击在div外时,更改背景图片
    CSS--border边框颜色渐变
    实验一:Java开发环境的熟悉
    实验楼第四次试验报告
    实验楼第三次试验报告
    实验楼第二次试验报告
    实验楼第一次试验报告
    c++程序设计中的函数重载
    C++中,new/delete和malloc/free的区别
    继承和多态二:虚析构函数
  • 原文地址:https://www.cnblogs.com/fonttian/p/9162769.html
Copyright © 2020-2023  润新知