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

Sklearn GridSearchCV得分与手动计算balanced_accuracy不一致问题

问题:GridSearchCV与手动计算的balanced_accuracy得分差异疑问

我使用Sklearn的GridSearchCV对随机森林模型进行超参数调优,训练数据变量为X_train、Y_train,代码如下:

param_grid = {
    'n_estimators': [500],
    'max_features': ['sqrt', None],
    'max_depth': [ 6 ],
    'max_leaf_nodes': [8],

    'min_impurity_decrease':[0,0.02],
    'min_samples_split':[2]
}

grid_search= GridSearchCV(RandomForestClassifier(
                                   criterion='gini',
                               min_weight_fraction_leaf=0.0, 
                               bootstrap=True, 
                                   n_jobs=-1, 
                                   random_state=1, verbose=0, 
                                   warm_start=False, class_weight='balanced', 
                                   ccp_alpha=0.0, 
                                   max_samples=None),
                           param_grid=param_grid,verbose=50,cv=2,n_jobs=-1,scoring='balanced_accuracy')
grid_search.fit(X_train, Y_train)

训练过程中看到的得分范围在0.4-0.6,示例如下:

[CV 2/2; 1/4] END max_depth=6, max_features=sqrt, max_leaf_nodes=8, min_impurity_decrease=0, min_samples_split=2, n_estimators=500;, score=0.552 total time=  15.4s

但通过balanced_accuracy_score手动计算训练集的得分:

from sklearn.metrics import balanced_accuracy_score
print('training accuracy', balanced_accuracy_score(grid_search.predict(X_train), Y_train,adjusted=False))

得到的结果约为0.96,与GridSearchCV显示的得分差异极大。我已在GridSearchCV中设置scoring='balanced_accuracy',请问为何会出现这种情况?GridSearchCV中的得分具体代表什么?


解答

1. GridSearchCV中得分的具体含义

GridSearchCV的score是交叉验证过程中验证折叠的balanced_accuracy,具体逻辑:

  • 当设置cv=2时,X_train会被拆分成2个互斥的子集(折叠)。
  • 对每组超参数,模型会先用其中1个折叠的数据训练,再用另1个折叠的数据做验证,计算得到的balanced_accuracy就是你看到的日志里的score。
  • 最终的最佳得分是所有折叠验证得分的平均值(多折叠场景下)。

2. 得分差异的核心原因

你手动计算的是整个训练集上的模型表现:

  • grid_search.fit()结束后,最终的最佳模型是用全部X_train数据重新训练出来的,所以用它预测X_train时,得分会很高(0.96),这是模型在训练数据上的拟合效果。
  • 而GridSearchCV日志里的得分是未参与训练的验证折叠数据上的泛化效果,得分低说明你的模型存在严重过拟合:在训练数据上表现优异,但对未见过的数据预测能力很差。

3. 验证建议

  • 查看交叉验证的详细得分:
    # 查看所有超参数组合的平均验证得分
    print(grid_search.cv_results_['mean_test_score'])
    # 查看得分的标准差
    print(grid_search.cv_results_['std_test_score'])
    
  • 用最佳模型测试测试集数据,计算测试集的balanced_accuracy,这个结果会更接近GridSearchCV的验证得分,而非训练集的0.96。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:35:46