2013-10-09 32 views
9

我想知道我们是否可以在sklearn.pipeline中设置“可选”步骤。例如,对于分类问题,我可能希望在没有PCA转换的情况下尝试带有AND的ExtraTreesClassifier。实际上,它可能是一个具有额外参数的管道,用于指定PCA步骤的切换,以便我可以通过GridSearch等对其进行优化。我在sklearn源代码中看不到这样的实现,但是是否有任何工作 - 周围?是否可以在sklearn管道中切换某个步骤?

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

谢谢!

回答

14
  • Pipeline措施目前还不能进行选购网格中搜索,但你可以包裹PCA类到自己的OptionalPCA组件用布尔参数时,作为一个快速的解决方法要求关闭PCA。您可能需要查看hyperopt以设置更复杂的搜索空间。我认为它默认支持这种模式的sklearn集成很好,但我无法再找到该文档。也许看看this talk

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

+7

作为请注意,“ExtraTreesClassifier.max_features”可以是0.0到1.0之间的浮点值,而不是整数值。这在实际功能数量变化时很有用,就像你的情况一样。 –

+0

谢谢你们两位有见识的答案。我认为他们正是我所期待的。 – dolaameng

2

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) 
相关问题