Pipeline学习器流水线
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给出来最后一个学习器的预测性能得分,该学习器的输入数据为原始数据经过流水线处理后的数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |