是否可以在sklearn管道中切换某个步骤?

dol*_*eng 14 python pipeline machine-learning scikit-learn

我想知道我们是否可以设置一个"可选"步骤sklearn.pipeline.例如,对于分类问题,我可能想要在ExtraTreesClassifier没有PCA转换的情况下尝试使用AND .在实践中,它可能是一个带有额外参数的管道,指定PCA步骤的切换,以便我可以通过GridSearch等进行优化.我没有在sklearn源中看到这样的实现,但是有没有解决方法?

此外,由于流水线中后续步骤的可能参数值可能取决于前一步骤中的参数(例如,ExtraTreesClassifier.max_features依赖的有效值PCA.n_components),是否可以在sklearn.pipeline和中指定这样的条件依赖性sklearn.grid_search.

谢谢!

ogr*_*sel 15

  • Pipeline目前,网格搜索中的步骤不可选,但您可以使用布尔参数将PCA类包装到您自己的OptionalPCA组件中,以便在请求时关闭PCA作为快速解决方法.您可能希望查看hyperopt以设置更复杂的搜索空间.我认为默认情况下它具有良好的sklearn集成以支持这种模式,但我再也找不到该文档了.也许看看这个讲话.

  • 对于依赖参数问题,GridSearchCV支持参数树来处理这种情况,如文档中所示.

  • 作为旁注,请注意`ExtraTreesClassifier.max_features`可以是介于0.0和1.0之间的浮点值,而不是整数值.当实际的特征数量变量时,这很有用,如您的情况. (7认同)

Mur*_*nch 8

文档

也可以将单个步骤替换为参数,并将非最终步骤设置为“无”可以忽略它们:

from sklearn.linear_model import LogisticRegression
params = dict(reduce_dim=[None, PCA(5), PCA(10)],
              clf=[SVC(), LogisticRegression()],
              clf__C=[0.1, 10, 100])
grid_search = GridSearchCV(pipe, param_grid=params)
Run Code Online (Sandbox Code Playgroud)

  • 最近的文档指出,您应该忽略带有字符串“passthrough”而不是“None”的非最终步骤:https://scikit-learn.org/stable/modules/compose.html (6认同)