2016-11-20 35 views
5

我得到這個從sklearn網頁:scikit中pipeline和make_pipeline有什麼區別?

一)管道:構建從給定的估計管道:以最終估計

B)Make_pipeline變換的管道。這是Pipeline構造函數的簡寫。

但我仍然不明白當我必須使用每一個。任何人都可以給我一個例子嗎?

回答

14

唯一的區別是make_pipeline會自動爲步驟生成名稱。

需要步驟名稱,例如如果您想使用具有模型選擇實用程序的管道(例如GridSearchCV)。隨着網格搜索你需要指定一個管道的各個步驟參數:

pipe = Pipeline([('vec', CountVectorizer()), ('clf', LogisticRegression()]) 
param_grid = [{'clf__C': [1, 10, 100, 1000]} 
gs = GridSearchCV(pipe, param_grid) 
gs.fit(X, y) 

與make_pipeline比較吧:

pipe = make_pipeline(CountVectorizer(), LogisticRegression())  
param_grid = [{'logisticregression__C': [1, 10, 100, 1000]} 
gs = GridSearchCV(pipe, param_grid) 
gs.fit(X, y) 

所以,用Pipeline

  • 名稱是明確的,你如果你需要它們,不需要弄清楚它們;
  • 如果您更改某個步驟中使用的估算器/變壓器,名稱不會更改(例如,如果用LinearSVC()替換LogisticRegression(),則仍然可以使用clf__C

make_pipeline

  • 短,可以說是更可讀符號;
  • 名稱是使用簡單規則(估算器的小寫名稱)自動生成的。

何時使用它們取決於您:)我更喜歡make_pipeline進行快速實驗,並且使用Pipeline來獲得更穩定的代碼;經驗法則:IPython Notebook - > make_pipeline;更大項目中的Python模塊 - >管道。但在短文本或筆記本中,在模塊或管道中使用make_pipeline肯定不是什麼大問題。