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

使用GridSearchCV优化含SelectKBest与KNN的管道时仅返回SelectKBest最优参数问题

问题原因与解决方法

问题根源

你在param_grid中传入的是两个独立的参数字典列表[param, parameters],这会让GridSearchCV执行两组完全独立的搜索:

  • 第一组:仅遍历kbest__k的所有取值,KNN全程使用默认参数
  • 第二组:仅遍历KNN的n_neighbors和p参数,SelectKBest全程使用默认参数

最终输出的最优结果来自第一组搜索,因此只会显示kbest__k的参数。

正确写法

要同时优化管道中两个组件的参数,需要把所有参数合并到同一个字典中,让GridSearchCV遍历所有参数组合:

classifier = KNeighborsClassifier()
sel = SelectKBest(f_classif)

# 将两个组件的参数合并到同一字典
param_grid = {
    "kbest__k": [10, 20, 30, 40, 50],
    "classify__n_neighbors": list(range(5,15)),
    "classify__p": [1,2]
}

# 传入合并后的参数网格
model = GridSearchCV(
    Pipeline([('kbest', sel), ('classify', classifier)]),
    param_grid=param_grid,
    cv=10
)

model.fit(X_new, y)
print(model.best_params_)

预期结果

修改后,best_params_会同时返回SelectKBest和KNN的最优参数,示例输出:

{'kbest__k': 40, 'classify__n_neighbors': 8, 'classify__p': 2}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:36:17