scikit中的pipeline和make_pipeline有什么区别?

Aiz*_*aac 28 python scikit-learn

我从sklearn网页上得到了这个:

a)管道:使用最终估算器进行变换的管道

b)Make_pipeline:根据给定的估算器构造管道.这是Pipeline构造函数的简写.

但是当我必须使用每一个时,我仍然不明白.谁能举个例子?

Mik*_*bov 58

唯一的区别是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)
Run Code Online (Sandbox Code Playgroud)

将它与make_pipeline进行比较:

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

所以,用Pipeline:

  • 名字是明确的,如果你需要,你不必弄明白;
  • 如果更改步骤中使用的估算器/变换器,名称不会更改,例如,如果使用LinearSVC()替换LogisticRegression(),您仍然可以使用clf__C.

make_pipeline:

  • 更短,更可读的符号;
  • 使用简单的规则(估算器的小写名称)自动生成名称.

什么时候使用它们取决于你:)我更喜欢make_pipeline用于快速实验和Pipeline用于更稳定的代码; 经验法则:IPython Notebook - > make_pipeline; Python模块在一个更大的项目中 - > Pipeline.但是在短脚本或笔记本中的模块或管道中使用make_pipeline肯定不是什么大问题.

  • 永远不要挖矿,只是发现这是正确的命名格式“ onevsrestclassifier__estimator__C”。 (2认同)