GridSearchCV中grid.score()与grid.best_score_的区别及取值疑问
GridSearchCV中best_score_与score()方法返回值的差异说明
核心定义区别
grid.best_score_:是交叉验证过程中,最优参数对应的3折验证得分的平均值。计算这个值用到的数据集是你传入GridSearchCV的X_train2, y_train2,由GridSearchCV内部做3折拆分得到的验证集,全程没有接触过你单独拆分的X_valid数据集,这个值是整个param_grid搜索范围内,所有参数组合里交叉验证得分最高的结果,和grid.best_params_直接对应。grid.score(X_valid, y_valid):是GridSearchCV完成拟合后,调用内置的最优模型(即用best_params_在全部X_train2, y_train2上重新训练得到的模型),在你手动拆分的独立验证集X_valid上计算得到的得分,计算过程和GridSearchCV内部的3折交叉验证完全无关。
得分不一致的原因
两个值的计算依赖完全不同的验证数据集:
best_score_的验证集是X_train2内部3折拆分出来的子集,score()的验证集是你单独从原始训练集中拆分出来的X_valid,二者的样本分布、样本量都存在差异,最终得分自然会不一样。
最优得分的选择标准
- 若要评估给定param_grid搜索范围内,参数组合在交叉验证下的最优表现,以
grid.best_score_为准,这个值是网格搜索筛选最优参数的核心依据。 - 若要评估最优参数模型在未见过的独立数据集上的泛化能力,以
grid.score(X_valid, y_valid)为准,这个值更贴近模型上线后的真实表现。 - 最终的模型效果请以代码中在完全独立的
X_test上计算得到的MSE为准,这是最客观的泛化能力评估结果。
额外注意
你最开始贴的示例代码中GridSearchCV的初始化写法是错误的,正确初始化不需要传入训练数据,训练数据是在fit()方法中传入的,你完整函数中的GridSearchCV写法是正确的,无需调整。
内容的提问来源于stack exchange,提问作者letdatado
相关产品推荐
相关产品推荐

