GridSearchCV按加权f1_score选取最优模型及best_score_不匹配疑问
问题解答
1. GridSearchCV.best_score_的具体含义
GridSearchCV.best_score_是交叉验证流程的产出值,指的是参数搜索过程中,表现最优的那组参数,在训练集拆分出的所有交叉验证折上的加权f1得分平均值。这个值的计算全程仅使用fit方法传入的x_train、y_train数据,不会接触测试集数据。
2. 手动计算值与best_score_不匹配的原因
- 计算数据源不同:
best_score_是交叉验证集上的评分,你手动计算的是独立测试集上的评分,二者数据源完全不同,数值存在差异属于正常现象,完全相等反而大概率存在过拟合问题。 - 计算逻辑不一致:你手动调用
f1_score时传入了labels=np.unique(y_pred)参数,该参数会忽略测试集真实标签中存在、但预测结果中没有出现的类别,和GridSearchCV内置的f1_weighted计算逻辑(默认统计所有类别)不一致,会进一步放大数值差异。 - 训练随机波动:你代码中的XGBoost没有固定
random_state参数,每次训练的初始化、样本抽样都存在随机性,GridSearchCV训练的模型和你后续单独初始化训练的xgb_model_debug权重本身就可能存在差异,评分自然不会完全一致。
3. 最优模型的正确选取方式
交叉验证评分是调参阶段的唯一选参标准,你直接从results列表中筛选i_best_score最高的那组参数即可,不需要参考测试集的评分(用测试集选参属于数据泄露,会导致模型泛化能力评估虚高)。
如果需要对齐验证计算逻辑,可将手动计算f1的代码修改为:
f1_score_result = f1_score(y_test, y_pred, average='weighted')
删除多余的labels=np.unique(y_pred)参数即可。
内容的提问来源于stack exchange,提问作者glezo
相关产品推荐
相关产品推荐

