python - 使用 `GridSearchCV`来测试从管道中完全删除步骤的效果?

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

假设我正在使用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]
}

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

最佳答案

您可以通过将 passthrough 传递到您的 param_grid 来完成此操作,如下所示:

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

sklearn pipelines docs中所示

Individual steps may also be replaced as parameters, and non-final steps may be ignored by setting them to '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)

关于python - 使用 `GridSearchCV`来测试从管道中完全删除步骤的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67866563/

相关文章:

python - 字符串的一部分与字典键字符串匹配

python - SQLAlchemy:在调用构造函数时返回现有对象而不是创建新对象

python - for循环只循环3次。为什么?

python - 获取深度自动编码器的解码器

azure - AzureML 中特征类型的作用是什么?

python - 从函数定义外部向 Python 类添加数据成员

python - 在不打开 Excel 工作表的情况下计算它们(openpyxl 或 xlwt)

python - 从嵌套列表创建新列表并将字符串转换为 float

python - 刷新包含下载百分比的输出行

python - sklearn DecisionTreeClassifier 真的可以处理分类数据吗?