繁体   English   中英

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

[英]What is the difference between pipeline and make_pipeline in scikit?

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

  • Pipeline : 带有最终估计器的变换流水线

  • Make_pipeline :从给定的估计量构造一个管道。 这是 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

  • 名称是明确的,如果需要,您不必弄清楚它们;
  • 如果您更改步骤中使用的估算器/转换器,名称不会更改,例如,如果您将 LogisticRegression() 替换为 LinearSVC() 您仍然可以使用clf__C

make_pipeline :

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM