回归指标:MAE、RMSE 与 R²
MAE 易解释且相对稳健,RMSE 更惩罚大误差,R² 衡量相对均值基线的改善。
学习前需要掌握
背景与问题
回归误差既有大小,也有单位和业务含义。相同的数值在预测元、万元或温度时意义不同;一个平均值还可能掩盖少数极大错误。
比较模型前,应固定数据范围、目标尺度与基线,再决定更关心典型偏差、极端偏差还是相对基准的解释能力。
概念定义
三种指标回答不同问题,不能脱离目标单位、分布与基线比较。
直观理解
MAE 看平均错多少,RMSE 对大错更严厉,R² 看比“猜平均”进步多少。
核心原理
MAE 对绝对误差取平均,与目标同单位,每个误差按大小线性贡献。MSE 对大误差平方惩罚,RMSE 再开平方恢复目标单位,通常比 MAE 更受极端错误影响。
R² 将平方误差与在当前评价数据上恒预测其目标均值的基准比较。它不是准确率,也不是误差百分比;表现差时可以为负,目标恒定时还需要注意实现对非有限情形的处理。
MAPE 等相对误差在真实值接近零时可能极大,目标有零或负值时必须明确是否适用。若对目标做对数变换,训练损失的尺度与业务尺度也不同,最终需要在关心的尺度上核对误差。
scikit-learn 的 scoring 遵循越大越好,因此不少损失以负值返回。报告 MAE 时可将负 MAE 取反,但标准差不应随符号变成负数。分组与分位数误差有助于检查总体均值遗漏的差异。
数学表达
核心表达
使用交叉验证报告分布,并按业务容忍度选择主指标;sklearn 误差 scoring 常返回负值。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1建立 DummyRegressor
- 2选择主误差
- 3交叉验证
- 4检查残差与极端值
代码对应位置
示例 1手算结果与 scikit-learn 指标对照:完整输入来自上方四点构造案例,用确定性计算核对指标。
案例:四个预测的 MAE、RMSE 与 R²
构造真实值 10、20、30、40,预测值 12、18、33、37,误差为 2、−2、3、−3。MAE 为 10 / 4 = 2.5,均方误差为 26 / 4 = 6.5,RMSE 约为 2.550。
真实均值是 25,离均差平方和为 500,因此 R² 为 1 − 26 / 500 = 0.948。这个数不是“94.8% 样本预测正确”,也不说明未来数据一定有相同表现;它只是这组构造数据上的相对平方误差指标。
计算与实现步骤
- 建立 DummyRegressor
- 选择主误差
- 交叉验证
- 检查残差与极端值
- 最终测试
- 按原单位解释
代码实现
示例 1
手算结果与 scikit-learn 指标对照
example_01.py用途:完整输入来自上方四点构造案例,用确定性计算核对指标。
from sklearn.metrics import mean_absolute_error, root_mean_squared_error, r2_score
y_true = [10, 20, 30, 40]
y_pred = [12, 18, 33, 37]
print(f"mae={mean_absolute_error(y_true, y_pred):.3f}")
print(f"rmse={root_mean_squared_error(y_true, y_pred):.3f}")
print(f"r2={r2_score(y_true, y_pred):.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
完整输入来自上方四点构造案例,用确定性计算核对指标。
y_pred- 模型对输入产生的预测结果。
Step 1 · 1–1 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from sklearn.metrics import mean_absolute_error, root_mean_squared_error, r2_scoreStep 2 · 3–7 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
y_true = [10, 20, 30, 40]
y_pred = [12, 18, 33, 37]
print(f"mae={mean_absolute_error(y_true, y_pred):.3f}")
print(f"rmse={root_mean_squared_error(y_true, y_pred):.3f}")
print(f"r2={r2_score(y_true, y_pred):.3f}")代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
本地 scikit-learn 1.8.0 的核对输出: mae=2.500 rmse=2.550 r2=0.948
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 把 R² 当作分类准确率或统一误差百分比,忽略它可能为负。
- 比较不同目标单位、变换尺度或不同数据范围上的原始误差。
- 直接把 neg_mean_absolute_error 的负值当成负误差,或对接近零的目标盲用 MAPE。
实际应用
- 价格和需求预测
常见错误
- 把 R² 当作分类准确率或统一误差百分比,忽略它可能为负。
- 比较不同目标单位、变换尺度或不同数据范围上的原始误差。
- 直接把 neg_mean_absolute_error 的负值当成负误差,或对接近零的目标盲用 MAPE。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。