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

如何获取Scikit-learn GridSearchCV最优模型的训练与测试分数

GridSearchCV最优模型训练/测试分数获取方法

前置注意事项

  • 初始化GridSearchCV时必须显式设置return_train_score=True,默认该参数为False,不会返回交叉验证过程中的训练集相关分数。

方案1:从cv_results_属性提取

该方案获取的是交叉验证过程中最优参数对应的平均训练/验证分数,更能反映参数搜索阶段的泛化表现:

# 初始化示例
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

grid = GridSearchCV(
    estimator=SVC(),
    param_grid={'C': [1, 10]},
    cv=5,
    return_train_score=True # 必须开启,否则无训练分数
)
grid.fit(X_train, y_train)

# 提取最优参数对应的索引
best_idx = grid.cv_results_['rank_test_score'].argmin()
# 交叉验证平均训练分数
best_cv_train_score = grid.cv_results_['mean_train_score'][best_idx]
# 交叉验证平均验证分数
best_cv_val_score = grid.cv_results_['mean_test_score'][best_idx]

print(f"交叉验证训练平均分:{best_cv_train_score:.4f}")
print(f"交叉验证验证平均分:{best_cv_val_score:.4f}")

方案2:通过best_estimator_属性计算

best_estimator_是最优参数在全量训练集上拟合完成的模型,可直接计算任意数据集的分数,适合最终效果评估:

# 最优模型在全量训练集上的分数
full_train_score = grid.best_estimator_.score(X_train, y_train)
# 最优模型在独立预留测试集上的分数
holdout_test_score = grid.best_estimator_.score(X_test, y_test)

print(f"全量训练集分数:{full_train_score:.4f}")
print(f"独立测试集分数:{holdout_test_score:.4f}")

两种方案的区别

  • 方案1的分数是交叉验证多折结果的平均值,没有泄露全量训练集信息,更适合参数效果的公平对比
  • 方案2的分数是最终模型的实际表现,其中独立测试集分数可作为模型最终上线效果的参考

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:15:03