1. ホーム
  2. python

[解決済み] scikitのpipelineとmake_pipelineの違いは何ですか?

2022-03-04 23:12:32

質問

sklearnのウェブページから入手しました。

  • パイプライン : 最終的な推定を伴う変換のパイプライン

  • メイクパイプライン : 与えられた推定値からパイプラインを構築する.これはPipelineコンストラクタの省略形である.

しかし、それぞれをどのような場合に使用しなければならないのか、まだ理解できていません。どなたか例を挙げていただけませんか?

どのように解決するのですか?

唯一の違いは 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 :

  • の名前は明示されているので、必要であれば把握する必要はない。
  • ステップで使用する estimator/transformer を変更しても名前は変わりません。例えば LogisticRegression() を LinearSVC() に変更しても clf__C .

make_pipeline :

  • より短く、間違いなく読みやすい記法です。
  • の名前は簡単なルールで自動生成される(推定量名は小文字)。

いつ使うかはあなた次第です :) 私は、手っ取り早く実験したいときはmake_pipeline、より安定したコードにしたいときはPipelineを使います。経験則としては、IPython Notebook -> make_pipeline; Python module in a larger project -> Pipeline。しかし、モジュールではmake_pipelineを、短いスクリプトやノートブックではPipelineを使うことは、確かに大したことではありません。