我想知道我们是否可以在sklearn.pipeline
中设置“可选”步骤。例如,对于分类问题,我可能希望尝试使用AND ExtraTreesClassifier
,而不使用PCA
转换。在实践中,它可能是一个带有额外参数的管道,指定PCA
步骤的切换,以便我可以通过GridSearch
等对其进行优化。我在sklearn中没有看到这样的实现来源,但有没有解决方法?
此外,由于管道中后续步骤的可能参数值可能取决于上一步骤中的参数(例如,ExtraTreesClassifier.max_features
的有效值取决于PCA.n_components
),是否可以指定sklearn.pipeline
和sklearn.grid_search
中的这种条件依赖?
谢谢!
答案 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)