scikit learn工具箱pipeline模块:串联方法
pipeline模块
scikit learn工具箱的pipeline模块提供了将算法模型串联/并联的工具,多个estimator并联起来用于模型结果比较,或者将多个estamitors级联成一个estamitor,比如将特征提取、归一化、分类组织在一起,形成一个典型的机器学习问题工作流。
使用Pipeline的优点在于:
1.直接调用fit和predict方法来对pipeline中的所有算法模型进行训练和预测。
2.可以结合grid search对整个pipeline上estimator的参数进行选择.
3.安全。pipeline可以有效控制transformer和predictor上训练数据的一致性,防止交叉验证时测试数据泄漏给训练好的模型。
scikit learn的pipeline模块提供了以下函数:
- pipeline.FeatureUnion(transformer_list[, …]) 并联拼接多个transformer的结果用于模型比较
- pipeline.Pipeline(steps[, memory]) 串联连接多个estimator,中间的模型可以是transformer,也可以是estimator,但最后一个必须是estimator.
- pipeline.make_pipeline(*steps, **kwargs) 根据给定的estimator列表构造串联Pipeline
- pipeline.make_union(*transformers, **kwargs) 根据给定的transformer构造并联FeatureUnion.
可以看出,上面函数中,Pipeline()和make_pipeline()都是用于构造串联Pipeline的,FeatureUnion()和make_union() 则是构造并联FeatureUnion的。
串联Pipeline的使用
直接加载sklearn工具箱的pipeline方法的Pipeline函数,例如:
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import StandardScaler
...
Pipeline(memory=None,
steps=[('standardscaler',
StandardScaler(copy=True, with_mean=True, with_std=True)),
('gaussiannb',
GaussianNB(priors=None, var_smoothing=1e-09))])
Pipeline函数中:
steps 是一个由(key, value)对构建的列表,其中key是包含要给予此步骤的名称的字符串,value是estimator名称。
memory 是可选参数,可以设置为None或者字符串,这里memory参数应该符合joblib的Meory模块接口,这样做可以将模型训练的结果保存到磁盘上,避免重复计算。Memory适合复杂的输入、输出,特别是在non-hashable的数据和大型数组这样的输入输出上。
或者用make_pipeline函数, 上面的代码可以写为:
from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
make_pipeline(StandardScaler(), GaussianNB())
在pipeline 中的estimator参数可以通过.steps属性查看。
例1 :pca+svm
以经典的手写数字识别数据为例, 首先用pca方法得到几个最显著的特征,之后用SVM做分类。
from sklearn import svm
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
from sklearn