You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GridSearchCV的param_grid中访问SelectFromModel内LR的max_iter参数?

解决嵌套Pipeline中GridSearchCV参数名错误问题

问题根源

你的参数路径错误,因为SelectFromModel位于嵌套Pipeline的内层:

  • 外层lr_pipe的第一个步骤被自动命名为pipeline(对应你定义的fs_pipe)
  • 内层fs_pipe里的特征选择步骤是selectfrommodel
  • SelectFromModel的估算器参数名为estimator,而非你写的logisticregression

正确的参数访问方式

修改param_grid中的特征选择部分参数名,将selectfrommodel__logisticregression__max_iter替换为pipeline__selectfrommodel__estimator__max_iter:

param_grid = {
    'pipeline__selectfrommodel__estimator__max_iter': [400, 500],
    'logisticregression__penalty': ['l1', 'l2'],
    'logisticregression__solver': ['saga'],
    'logisticregression__max_iter': [400, 500],
}

验证参数名的方法

如果不确定参数名,可以通过以下代码打印所有可用参数:

print(lr_pipe.get_params().keys())

搜索包含estimator__max_iter的条目,就能找到正确的参数路径。

修改后完整代码示例

preprocessor = make_column_transformer(
    (num_transformer, make_column_selector(dtype_include=np.number)),
    (cat_transformer, make_column_selector(dtype_include=object))
)

fs_pipe = make_pipeline(
        preprocessor,
        SelectFromModel(estimator=LogisticRegression(solver='saga'))
)

lr_pipe = make_pipeline(fs_pipe, LogisticRegression(n_jobs=-1))

# 修正后的参数网格
param_grid = {
    'pipeline__selectfrommodel__estimator__max_iter': [400, 500],
    'logisticregression__penalty': ['l1', 'l2'],
    'logisticregression__solver': ['saga'],
    'logisticregression__max_iter': [400, 500],
}

lr_grid = GridSearchCV(
    estimator=lr_pipe,
    param_grid=param_grid,
    verbose=1, scoring='f1_micro',
    error_score='raise')

lr_grid.fit(trainX, trainY)

内容的提问来源于stack exchange,提问作者forest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:20:32