sklearn提供了Pipeline将多个学习器组成流水线。通常,流水线的形式为:将数据标准化的学习器-->特征提取的学习器-->执行预测的学习器。除了最后一个学习器之外,之前的所有学习器必须提供tranform方法,该方法用于数据变换(如归一化,正则化,以及特征提取等)。
Pipeline的原型为:
class sklearn.pipeline.Pipeline(steps)
参数:
steps:一个列表,列表的元素为(name,transform)元组,其中name是学习器的名字,用于输出和日志;transform是学习器,之所以叫transform是因为这个学习器(除了最后一个)必须提供transform方法。
属性:
named_steps:一个字典,字典的键就是steps中各元组的name元素,字典的值就是steps中各元组的transform元素。
方法:
fit(X[,y]):启动流水线,依次对各个学习器(除了最后一个学习器)执行fit方法和transform方法转换数据,对最后一个学习器执行fit方法训练学习器。
transform(X):启动流水线,依次对各个学习器执行fit方法和transform方法转换数据。要求每个学习器都实现了tranform方法。
fit_transform(X[,y]):启动流水线,依次对各个学习器(除了最后一个学习器)执行fit方法和transform方法转换数据,最后一个学习器执行fit_transform方法转换数据。
inverse_transform(X):将转换后的数据逆转换成原始数据,要求每个学习器都实现了inverse_transform方法。
predict(X)/predict_log_proba(X)/predict_proba(X):将X进行数据转换后,用最后一个学习器来预测。
score(X,y):将X进行数据转换后,用最后一个学习器来给出预测评分。
Demo:
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))
pipeline.named_steps给出了流水线上每一步使用的学习器