【问题标题】:Use `GridSearchCV` to test effect of removing a step from the pipeline entirely? [duplicate]使用 `GridSearchCV` 测试完全从管道中删除步骤的效果? [复制]
【发布时间】: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]
}

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

【问题讨论】:

    标签: python python-3.x machine-learning scikit-learn gridsearchcv


    【解决方案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)
    

    【讨论】:

    • 完美。谢谢。在文档中没有发现
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2021-08-15
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多