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