Pipeline学习器流水线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cicilover/article/details/77921418

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给出来最后一个学习器的预测性能得分,该学习器的输入数据为原始数据经过流水线处理后的数据。

猜你喜欢

转载自blog.csdn.net/cicilover/article/details/77921418