有没有一种方法可以让 sklearn 管道在网格搜索期间进行有步骤和无步骤的训练?我可以删除步骤,但如何将其传递给 GridSearchCV?
Is there a way for sklearn pipeline to train with and without a step during a grid search? I can remove steps but how do i pass this to GridSearchCV?
我第一次问这个就关了,因为 问了类似的问题。然而,尽管答案显示了如何从管道的一个步骤 add/remove,其中 none 显示了它如何与 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')
为此,您可以查看 user guide 嵌套参数段落下方的内容:
Individual steps may also be replaced as parameters, and non-final steps may be ignored by setting them to '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
.
的组合
我第一次问这个就关了,因为 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')
为此,您可以查看 user guide 嵌套参数段落下方的内容:
Individual steps may also be replaced as parameters, and non-final steps may be ignored by setting them to
'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
.