sklearn :Pipeline 与 FeatureUnion入门指南

Pipeline的作用

  Pipeline可以将许多算法模型串联起来,可以用于把多个estamitors级联成一个estamitor,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流。Pipleline中最后一个之外的所有estimators都必须是变换器(transformers),最后一个estimator可以是任意类型(transformer,classifier,regresser),若最后一个estimator是个分类器,则整个pipeline就可以作为分类器使用,如果最后一个estimator是个聚类器,则整个pipeline就可以作为聚类器使用。
  实际上,调用pipeline的fit方法,是用前n-1个变换器处理特征,之后传递给最后的estimator训练。pipeline继承最后一个estimator的所有方法。
  由此带来两点直接好处:

  • 1.直接调用fit和predict方法来对pipeline中的所有算法模型进行训练和预测。
  • 2.可以结合grid search对参数进行选择。

Pipeline的参数与使用

function

 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个学习器的参数

用法(例子)

步骤:1.首先对数据进行预处理,比如缺失值的处理
       2.数据的标准化
       3.降维
       4.特征选择算法
       5.分类或者预测或者聚类算法(估计器,estimator)
在这里插入图片描述

Pipeline的调用

Pipeline是使用(key, value)对的列表构建的,其中key是包含要给予此步骤的名称的字符串,value是对应的不同学习器。

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.svm import SVC
    from sklearn.decomposition import PCA
    from sklearn.datasets import load_iris
    iris=load_iris()
    pipe=Pipeline([('sc', StandardScaler()),('pca',PCA()),('svc',SVC())])
    #例如‘sc’是StandardScaler()的简称,亦或者是代称
    pipe.fit(iris.data,iris.target)

输出:

Pipeline(memory=None,
     steps=[('sc', StandardScaler(copy=True, with_mean=True, with_std=True)), ('pca', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
  svd_solver='auto', tol=0.0, whiten=False)), ('svc', SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False))])
  

其次可以通过make_pipeline函数实现pipeline的调用:它是Pipeline类的简单实现,只需传入每个step的类实例即可,不需自己命名,自动将类的小写设为该step的名:

    from sklearn.linear_model import ElasticNet, Lasso,  BayesianRidge, LassoLarsIC
    from sklearn.pipeline import make_pipeline
    from sklearn.preprocessing import RobustScaler #用来解决离群点
    new_pipeline=make_pipeline(RobustScaler(), Lasso(alpha =0.0005, random_state=1))

输出:

Pipeline(memory=None,
     steps=[('robustscaler', RobustScaler(copy=True, quantile_range=(25.0, 75.0), with_centering=True,
       with_scaling=True)), ('lasso', Lasso(alpha=0.0005, copy_X=True, fit_intercept=True, max_iter=1000,
   normalize=False, positive=False, precompute=False, random_state=1,
   selection='cyclic', tol=0.0001, warm_start=False))])
Pipeline参数改变

可以通过set_params重新设置每个类里边需传入的参数,设置方法为step的name__parma=参数值:

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.svm import SVC
    from sklearn.decomposition import PCA
    from sklearn.datasets import load_iris
    iris=load_iris()
    pipe=Pipeline([('sc', StandardScaler()),('pca',PCA()),('svc',SVC())])
    #例如‘sc’是StandardScaler()的简称,亦或者是代称
    
    pipe.set_params(sc__copy=False)
    #改变参数的格式为   学习器简称__该学习器对应参数名=参数值
    pipe.fit(iris.data,iris.target)

输出:

#可以看到sc中的copy确实由true改为false
Pipeline(memory=None,
     steps=[('sc', StandardScaler(copy=False, with_mean=True, with_std=True)), ('pca', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
  svd_solver='auto', tol=0.0, whiten=False)), ('svc', SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False))])
Pipeline与GridSearch

举例为pipeline与GridSearch在pca与svc中的使用:

from sklearn.model_selection import GridSearchCV
#以下格式为  学习器简写__该学习器对应的某个参数名=可选参数值范围
params = dict(pca__n_components=[2, 5, 10],
              svc__C=[0.1, 10, 100])
grid_search = GridSearchCV(pipe, param_grid=params)       

FeatureUnion的作用

 FeatureUnion把若干个transformer object组合成一个新的estimators。这个新的transformer组合了他们的输出,一个FeatureUnion对象接受一个transformer对象列表。
在训练阶段,每一个transformer都在数据集上独立的训练。在数据变换阶段,多有的训练好的Trandformer可以并行的执行。他们输出的样本特征向量被以end-to-end的方式拼接成为一个更大的特征向量。

  • 你只需要调用一次fit和transform就可以在数据集上训练一组estimators。

  • 可以把grid search用在FeatureUnion中所有的estimators的参数这上面。

FeatureUnion和Pi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值