为何在cross_val_score前加负号而非直接使用cross_val_score?
为什么使用
neg_mean_absolute_error作为评分指标时需要对cross_val_score的返回值取负 这个设计是scikit-learn为了统一所有评分指标的判断逻辑做的约定:
- scikit-learn中所有内置的交叉验证评分指标,都遵循数值越大,模型效果越好的统一规则,方便框架层面统一做模型排序、超参数搜索等逻辑
- 平均绝对误差(MAE)、均方误差(MSE)这类误差类指标,本身的特性是数值越小,模型预测精度越高,和上述统一规则方向相反
为了适配统一规则,scikit-learn为这类误差指标提供了对应的负向版本,也就是你代码里用到的neg_mean_absolute_error,它的计算逻辑是直接返回 -(真实MAE值),这样就符合「得分越高效果越好」的要求。
对应你给出的代码:
cv_mae = -cross_val_score(lm, x_train,y_train, cv=10, scoring='neg_mean_absolute_error')
当你指定scoring='neg_mean_absolute_error'时,cross_val_score返回的每折验证结果都是负的MAE值。如果你需要得到符合日常使用习惯的真实MAE数值,只需要对返回结果再取一次负即可,负负得正后得到的就是我们需要的实际误差值。
如果省略这个负号,你拿到的结果会是负数的MAE,既不符合常规的误差指标使用习惯,也很容易在后续模型效果对比时搞反好坏判断的方向。
内容的提问来源于stack exchange,提问作者pratik kandalgaonkar
相关产品推荐
相关产品推荐

