我想知道我们是否可以在sklearn.pipeline
中设置一个"可选"步骤。例如,对于分类问题,我可能想尝试一个带有 AND 的ExtraTreesClassifier
,而不进行PCA
转换。在实践中,它可能是一个带有额外参数的管道,用于指定PCA
步骤的切换,以便我可以通过GridSearch
等对其进行优化。我在 sklearn 源代码中没有看到这样的实现,但有什么解决方法吗?
此外,由于管道中后续步骤的可能参数值可能取决于上一步中的参数(例如,ExtraTreesClassifier.max_features
的有效值取决于PCA.n_components
),是否可以在sklearn.pipeline
和sklearn.grid_search
中指定这样的条件依赖关系?
谢谢!
从文档中:
单个步骤也可以作为参数替换,并且非最终 可以通过将步骤设置为"无"来忽略这些步骤:
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)
-
Pipeline
步骤目前不能在网格搜索中成为可选步骤,但您可以使用布尔参数将PCA
类包装到您自己的OptionalPCA
组件中,以便在请求时关闭 PCA,作为快速解决方法。您可能想看看 hyperopt 来设置更复杂的搜索空间。我认为它具有良好的 sklearn 集成,默认情况下支持这种模式,但我再也找不到文档了。也许看看这个演讲。 -
对于依赖参数问题,
GridSearchCV
支持参数树来处理这种情况,如文档中所示。