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給出來最後一個學習器的預測性能得分,該學習器的輸入數據爲原始數據經過流水線處理後的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章