有没有一种方法可以让sklearn管道在网格搜索过程中进行有步骤和无步骤的训练?我可以删除步骤,但如何将其传递给Grid



我第一次问它时它就关闭了,因为这个问题问了类似的问题。然而,尽管答案显示了如何从管道中添加/删除步骤,但没有一个显示如何使用GridSearchCV,我想知道如何处理已删除步骤的管道。

我想使用网格搜索来训练模型,并测试先执行PCA和省略PCA时的性能。有办法做到这一点吗?我想要的不仅仅是简单地将n_components设置为输入变量的数量。

目前,我这样定义我的管道:

pca = PCA()
gbc = GradientBoostingClassifier()
steps = [('pca', pca), ('gbc', gbc)]
pipeline = Pipeline(steps=steps)
param_grid = {
'pca__n_components': [3, 5, 7],
'gbc__n_estimators': [50, 100]
}
search = GridSearchCV(pipeline, param_grid, n_jobs=-1, cv=5, scoring='roc_auc')

为此,您可以查看用户指南中嵌套参数段落下的内容:

单个步骤也可以被替换为参数,通过将非最终步骤设置为'passthrough',可以忽略这些步骤

在您的情况下,我会定义一个网格,其中包含两个字典的列表,一个用于使用整个管道,另一个用于省略PCA

param_grid = [
{
'pca__n_components': [3, 5, 7],
'gbc__n_estimators': [50, 100]
},
{
'pca': ['passthrough'], # skip the PCA
'gbc__n_estimators': [50, 100]
}
]

GridSearchCV现在将根据列表中的每个字典跨越网格,并尝试使用和不使用PCA的组合。

相关内容

最新更新