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

时间:2016-11-20 18:56:16

标签: python scikit-learn

我是从sklearn网页上得到的:

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

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

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

1 个答案:

答案 0 :(得分:44)

唯一的区别是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肯定不是什么大问题。