使用 `GridSearchCV` 测试完全从管道中删除步骤的效果? [复制]

Posted

技术标签:

【中文标题】使用 `GridSearchCV` 测试完全从管道中删除步骤的效果? [复制]【英文标题】:Use `GridSearchCV` to test effect of removing a step from the pipeline entirely? [duplicate] 【发布时间】:2021-08-24 05:44:39 【问题描述】:

假设我正在使用 GridSearchCV 搜索超参数,并且我也在使用 Pipeline 因为我(想我)想要预处理我的数据:

param_grid = 
    'svc__gamma': np.linspace(0.2, 1, 5)


pipeline = Pipeline(steps=[('scaler', StandardScaler()), ('svc', SVC())])

search = GridSearchCV(pipeline, param_grid, cv=10)
search.fit(train_x, train_y)

有没有办法测试我的假设,即包含 scaler 步骤实际上是有帮助的(不仅仅是删除它并重新运行它)?

即,有没有办法写:

param_grid = 
    'svc__gamma': np.linspace(0.2, 1, 5),
    'scaler': [On, Off]

或者我应该以不同的方式来解决这个问题?

【问题讨论】:

【参考方案1】:

您可以通过将passthrough 传递给您的param_grid 来做到这一点,如下所示:

param_grid = 
    'svc__gamma': np.linspace(0.2, 1, 5),
    'scaler': ['passthrough', StandardScaler()]

如sklearn pipelines docs中所见

个别步骤也可以作为参数替换,非最终步骤可以通过设置为“passthrough”来忽略:

>>> from sklearn.pipeline import Pipeline
>>> from sklearn.svm import SVC
>>> from sklearn.decomposition import PCA
>>> from sklearn.linear_model import LogisticRegression
>>> estimators = [('reduce_dim', PCA()), ('clf', SVC())]
>>> pipe = Pipeline(estimators)
>>> param_grid = dict(reduce_dim=['passthrough', PCA(5), PCA(10)],
...                   clf=[SVC(), LogisticRegression()],
...                   clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=param_grid)

【讨论】:

完美。谢谢。在文档中没有发现

以上是关于使用 `GridSearchCV` 测试完全从管道中删除步骤的效果? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将最佳参数(使用 GridSearchCV)从管道传递到另一个管道

使用管道和 GridSearchCV 的多维降维技术

sklearn - 如何从传递给 GridSearchCV 的管道中检索 PCA 组件和解释方差

在 GridSearchCV 的管道中替代不同的模型

在 GridSearch CV 之后进行预测时是不是遵循管道步骤

在 GridSearchCV 中对测试集进行预处理的问题