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给出了流水线上每一步使用的学习器
pipeline.score给出来最后一个学习器的预测性能得分,该学习器的输入数据为原始数据经过流水线处理后的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。