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

时间:2013-10-09 03:34:18

标签: python machine-learning scikit-learn pipeline

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

此外,由于管道中后续步骤的可能参数值可能取决于上一步骤中的参数(例如,ExtraTreesClassifier.max_features的有效值取决于PCA.n_components),是否可以指定sklearn.pipelinesklearn.grid_search中的这种条件依赖?

谢谢!

2 个答案:

答案 0 :(得分:15)

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

  • 对于依赖参数问题,GridSearchCV支持参数树来处理这种情况as demonstrated in the documentation

答案 1 :(得分:4)

来自docs

  

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

可以忽略步骤
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)