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

sklearn HalvingGridSearchCV结果异常:best_params_与排名第一参数不符

HalvingGridSearchCV的best_params_与cv_results_排名不符的原因

问题背景

使用HalvingGridSearchCV对KNN模型调参,配置代码如下:

halving_cv = HalvingGridSearchCV(
    knn_model, knn_grid,
    scoring="roc_auc",
    n_jobs=-1,
    min_resources="exhaust",
    factor=3,
    cv=5, random_state=1234,
    refit=True,
)

grid_result = halving_cv.fit(x_trained, y_train)

得到的最优参数:

grid_result.best_params_  
{'algorithm': 'ball_tree', 'n_neighbors': 95, 'p': 1, 'weights': 'uniform'}

但cv_results_中排名前4的参数组合是:

params  rank_test_score
{'algorithm': 'ball_tree', 'n_neighbors': 55, 'p': 2, 'weights': 'uniform'} 1
{'algorithm': 'ball_tree', 'n_neighbors': 55, 'p': 1, 'weights': 'uniform'} 2
{'algorithm': 'ball_tree', 'n_neighbors': 85, 'p': 2, 'weights': 'uniform'} 3
{'algorithm': 'ball_tree', 'n_neighbors': 15, 'p': 1, 'weights': 'uniform'} 4

疑惑为何best_params_不是排名第一的参数。

核心原因:HalvingGridSearchCV的迭代评估逻辑

HalvingGridSearchCV和传统GridSearchCV的逻辑完全不同,它是逐步迭代、资源递增的调参方式:

  • 初始轮次:用少量样本评估所有参数组合,保留表现最好的1/factor(这里factor=3,即约33%)的参数进入下一轮。
  • 后续轮次:给保留的参数分配更多样本量(通常是上一轮的factor倍),重复评估和筛选,直到样本量达到min_resources="exhaust"(即全部训练数据)。

而cv_results_里的rank_test_score是每个参数在其所在轮次的排名,不是所有参数在全量数据上的最终排名:

  • 你看到的rank=1的参数,只是在某一轮小样本评估中表现最好,但它可能在后续更大样本的轮次中表现下滑,甚至没进入最后一轮全量数据的评估。
  • best_params_是最后一轮(全量数据)中表现最优的参数,这才是用全部训练数据验证后的最终最优结果。

验证方法

你可以查看grid_result.cv_results_中的mean_test_score(每轮的平均得分)和resource(该参数所在轮次使用的样本量)列:

  • 对比rank=1的参数和best_params_对应的参数,看它们分别处于哪一轮,以及在对应轮次的得分。
  • 大概率会发现,rank=1的参数只出现在早期小样本轮次,而n_neighbors=95的参数是在最后一轮全量数据上拿到了最高得分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:45:41