GridSearchCV训练分数计算方式及return_train_score参数疑问
GridSearchCV训练分数与return_train_score参数详解
嘿,我来给你拆解清楚这两个问题~
一、训练分数到底指什么?
简单来说,训练分数就是每一轮交叉验证里,模型用当前折的训练集训练完后,在这个训练集本身上面算出的性能分数(比如你指定的准确率、RMSE等scoring指标)。
你提到的split0_test_score到split9_test_score是模型在对应测试折上的表现,而训练分数是和它们一一对应的——每一轮交叉验证都会产出一对分数:一个是模型在「训练自己的那部分数据」上的得分,一个是在「没见过的测试折数据」上的得分。
二、GridSearchCV是怎么计算训练分数的?
结合你用的10折分层交叉验证,我给你举个具象的例子:
- 首先整个数据集被分成了10个分层的、互不重叠的子集。
- 对于网格里的每一组超参数组合,GridSearchCV会跑10轮完整的训练+评估:
- 第1轮:用第2到第10折的所有数据训练模型,然后:
- 把训练好的模型在**第2-10折(也就是刚才用来训练的数据集)**上计算分数,这个结果就是
split0_train_score; - 再把模型在**第1折(测试折)**上计算分数,得到
split0_test_score;
- 把训练好的模型在**第2-10折(也就是刚才用来训练的数据集)**上计算分数,这个结果就是
- 第2轮:换成用第1、3-10折的数据训练模型,然后:
- 在**第1、3-10折(训练集)**上算分,得到
split1_train_score; - 在**第2折(测试折)**上算分,得到
split1_test_score;
- 在**第1、3-10折(训练集)**上算分,得到
- 就这样循环完10轮,每一轮都会生成对应的训练和测试分数。
- 第1轮:用第2到第10折的所有数据训练模型,然后:
- 最后,GridSearchCV还会对这10个训练分数取平均值(对应
mean_train_score)和标准差(对应std_train_score),测试分数也会做同样的统计。
三、return_train_score参数的作用
- 当你把
return_train_score设为True时,grid.cv_results_里会包含所有轮次的训练分数(splitX_train_score)、平均训练分数、训练分数标准差这些字段; - 如果设为
False,这些和训练分数相关的字段就不会出现在cv_results_里,这么做主要是为了节省内存——尤其是当你的参数网格很大、数据集规模也不小的时候,能减少不必要的存储开销。
另外补充一句:看训练分数的核心意义是判断模型是否过拟合。如果训练分数比测试分数高很多,说明模型在训练集上“学太细”了,泛化到新数据的能力差;如果两者差距不大,那模型的泛化表现就比较好。
内容的提问来源于stack exchange,提问作者Tonechas
相关产品推荐
相关产品推荐

