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

为何仅用部分参数时GridSearchCV的得分反而更高?

网格搜索缩小参数范围后测试得分反而升高的原因分析

我运行了两次相同的代码,仅调整网格搜索中criterion的参数范围:

  • 第一次设置"criterion": ['gini', 'entropy'],测试得分为0.850
  • 第二次仅保留'entropy'(移除'gini'),测试得分为0.871(反而更高)

我原本预期参数组合减少后,得分应该相等或更低,但实际结果多次重复出现这个反直觉的情况,且代码中已固定所有随机种子,不存在随机性影响。

运行代码

X_train, X_test, y_train, y_test = train_test_split(dataX, dataY, test_size=0.2, random_state=10, stratify=dataY)
gs_params = {
    "criterion": ['gini', 'entropy'],
    "max_depth": [3, 4, 5, 6, 8, 10, 12, 15],
    "min_samples_split": range(2, 9, 2),
    "min_samples_leaf": range(1, 5)
}

gs = GridSearchCV(model, param_grid=gs_params, n_jobs=-1, verbose=1,
                  cv=5, scoring='f1_weighted', refit=True)

clf = Pipeline([
    ('scaler', StandardScaler()),
    ('features1', SelectFromModel(RandomForestClassifier(random_state=80), threshold='median')),
    ('features2', SelectFromModel(RandomForestClassifier(random_state=81), threshold='median')),
    ('features3', SelectFromModel(RandomForestClassifier(random_state=82), threshold='median')),
    ('gs', gs)
])

clf.fit(X_train.values, y_train.values)
test_score_opt = clf.score(X_test.values, y_test.values)

原因拆解

1. 核心逻辑:最优模型的切换

当参数范围同时包含gini和entropy时,网格搜索会在所有参数组合中选出交叉验证得分最高的模型——大概率这个最优模型是基于gini准则的某个参数搭配,而它在测试集上的泛化得分是0.850。

当你把参数范围缩小到仅保留entropy时,网格搜索会在entropy的参数组合里选最优,这个模型恰好更适配你的测试集,所以得到了更高的0.871分。

简单说:两次运行最终选中的是完全不同的模型,得分差异是这两个模型本身的泛化能力差异导致的,和参数范围的大小没有必然的“范围越大得分越高”的关联。

2. 验证方式

你可以打印两次运行后的最优参数,确认这个结论:

print(clf.named_steps['gs'].best_params_)

第一次的输出应该包含'criterion': 'gini',第二次则是'criterion': 'entropy'。之后用这两组参数单独训练模型,在测试集上验证得分,就能直接验证这个结论。

3. 误区澄清

你可能误以为参数范围越大,能找到的最优模型性能就越好,但实际上网格搜索的“最优”是针对训练集交叉验证得分的最优,而测试集的表现取决于这个最优模型的泛化能力。如果大参数范围里的最优模型泛化能力不如小范围里的最优模型,就会出现这种反直觉的结果,完全属于正常现象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:40:27