回归模型怎样评估:MAE、MSE、RMSE 和 R²

上一课用线性回归预测了房价。但"模型预测出一个数字"还不等于模型可靠。如果真实价格是 200 万,模型预测成 198 万和预测成 120 万显然不是一回事。我们需要一套明确的尺度,量化模型到底错了多少,以及这些错误对业务是否可接受。

先把预测误差说清楚

对每个测试样本,都有一个真实值 y y y 和预测值 y ^ \hat{y} y^:

text 复制代码
误差 = 预测值 - 真实值

正负号只表示高估或低估。评估"错了多少"时,通常会消掉方向,重点看偏差的大小。假设真实配送时长是 30 分钟,预测 28 分钟偏差是 2 分钟,预测 42 分钟偏差是 12 分钟。所有指标都从这些偏差出发,只是对大错的态度不同。

四个指标先一张表速查:

指标 公式 你该关心什么 什么时候用它
MAE 1 n ∑ ∣ y i − y ^ i ∣ \frac{1}{n}\sum\vert y_i - \hat{y}_i\vert n1∑∣yi−y^i∣ 平均错多少 关心平均误差成本
MSE 1 n ∑ ( y i − y ^ i ) 2 \frac{1}{n}\sum(y_i - \hat{y}_i)^2 n1∑(yi−y^i)2 大错惩罚有多重 训练的损失函数(最常用)
RMSE MSE \sqrt{\text{MSE}} MSE 误差的代表性波动 需要和 y 同单位的误差
1 − ∑ ( y i − y ^ i ) 2 ∑ ( y i − y ˉ ) 2 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2} 1−∑(yi−yˉ)2∑(yi−y^i)2 比随便猜好多少 判断模型学到了多少

MAE:平均绝对误差

MAE(Mean Absolute Error)把每个样本的误差取绝对值后求平均:

MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n}\sum_{i=1}^{n} \vert y_i - \hat{y}_i \vert MAE=n1i=1∑n∣yi−y^i∣

它最直观,单位和原始目标一致。如果房价用"万元"表示,MAE = 8.4 就可以直接读作:模型平均会偏离约 8.4 万元。对于需要和业务方沟通的项目,MAE 往往是很好的首要指标。

MAE 不会被离群值绑架,一个异常大误差只贡献一行,不会被平方放大。它的缺点是对梯度下降不友好,绝对值在 0 处不可导,所以很少直接当训练目标用。

MSE 与 RMSE:更在意大错误

MSE(Mean Squared Error)会先把误差平方:

MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1∑n(yi−y^i)2

误差从 2 变成 4,误差从 12 变成 144,大偏差被明显放大。这是训练回归模型最常用的损失函数。看两个样本就明白平方惩罚有多狠:

样本 真实值 预测值 误差 MAE 贡献 MSE 贡献
1 260 250 10 10 100
2 260 210 50 50 2500

两个样本的 MAE 贡献比是 1:5,但 MSE 贡献比是 1:25。用 MSE 训练时,模型会不遗余力地讨好超大误差的样本。

不过 MSE 的单位被平方了,读起来不直观。RMSE(Root Mean Squared Error)再对 MSE 开平方:

RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE

RMSE 回到原始单位,同时保留对大错更敏感的特点。向业务方汇报时用它很合适:"这个模型预测房价,平均误差大概 ±18 万左右。"当一次严重低估或高估代价很高时,RMSE 比 MAE 更有提醒作用。

R²:模型比"猜平均值"好多少

R²(决定系数)不直接表示错了几元或几分钟,而是衡量模型相对"永远预测训练目标平均值"这个基线的提升程度:

R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y}i)^2}{\sum{i=1}^{n}(y_i - \bar{y})^2} R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2

分子是模型犯的错(残差平方和),分母是只用均值瞎猜会犯的错(总平方和)。

  • R² = 1:测试数据上预测完全准确;
  • R² = 0:和只猜平均值差不多;
  • R² < 0:甚至不如只猜平均值,该回去检查代码了。

比如 R² = 0.85 表示模型解释了约 85% 的目标变化。R² 很适合比较同一任务、同一测试集上的不同模型,但不能替代 MAE 或 RMSE。一个 R² 看起来不错的模型,仍可能存在业务无法接受的平均误差。

用 scikit-learn 一次计算四个指标

python 复制代码
from sklearn.metrics import (
    mean_absolute_error,
    mean_squared_error,
    r2_score,
)

y_true = [120, 145, 168, 180]
y_pred = [118, 150, 160, 191]

mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = mean_squared_error(y_true, y_pred) ** 0.5
r2 = r2_score(y_true, y_pred)

print(f"MAE:  {mae:.2f}")
print(f"MSE:  {mse:.2f}")
print(f"RMSE: {rmse:.2f}")
print(f"R²:   {r2:.3f}")

在真实项目里,y_truey_pred 应来自测试集:

python 复制代码
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)

同一个测试集、同一种数据切分方式,是比较模型的基本前提。

到底选哪个指标

text 复制代码
训练模型      → MSE(好优化,梯度友好)
向业务方汇报  → RMSE(同单位,聚焦大误差)
分析业务成本  → MAE(避免离群值绑架结论)
判断模型学没学到 → R²(和均值基线相比)

可以先用下面这张判断表:

你最想知道什么 优先关注
平均会差多少,且要容易解释 MAE
严重大错需要被额外惩罚 RMSE 或 MSE
模型相对均值基线有没有价值
要完整了解模型行为 MAE + RMSE + R² 一起看

例如预测快递到达时间时,MAE 能说明平均偏差几分钟;如果"晚到一小时"会造成严重损失,则还应重点看 RMSE 和最差样本。指标不是排行榜,而是把业务担心的事情翻译成一个可比较的数字。一个实用规则:至少同时看 RMSE 和 R²,前者评价"准不准",后者评价"学没学",两者缺一不可。

两个高频误区

用训练集分数证明模型好

训练集本来就是模型用于学习的数据。只有在验证集或测试集上计算的分数,才更接近模型面对新数据时的表现。

跨数据集比较误差绝对值

一个模型在"房价单位是万元"的数据上 MAE 为 5,另一个在"房价单位是元"的数据上 MAE 为 50000,不能直接比大小。目标单位、样本范围和测试集不同,指标没有可比性。

课后练习

把上面的 y_pred 最后一个值从 191 改为 220,重新运行。观察 MAE 和 RMSE 哪一个变化更明显,再解释为什么。

小结

  • MAE 最容易解释平均偏差,抗离群值;
  • MSE 会强烈放大大错误,是默认的训练损失函数;
  • RMSE 回到原始单位,同时仍重视大错误,适合汇报;
  • R² 用来判断模型相对均值基线的解释能力,可以是负数;
  • 评估必须基于未参与训练的、可比较的数据。

下一课切换到分类任务:逻辑回归为什么名字里有"回归",却能判断用户会不会流失?


在线阅读

点击这里阅读博客原文

原文地址:https://bestsdz.xyz/posts/regression-metrics-mae-mse-rmse-r2/

相关推荐
weixin_422329311 小时前
AgentScope Java 项目入门 & Builder 深度解读
java·开发语言·人工智能
阳明山水1 小时前
从论文到生产:销量预测系统的工程化落地实践
大数据·人工智能·深度学习·机器学习·架构
Token炼金师1 小时前
范式跃迁:从标注囚徒到自监督信徒 —— 大模型时代的机器学习重写
人工智能·深度学习·llm
一键生成网站1 小时前
2026年免费AI数据大屏生成工具推荐及企业级选型深度指南
人工智能·a
AI的探索之旅1 小时前
AI Agent辅助立创EDA设计——从原理图到PCB
人工智能·stm32·硬件工程
her_heart1 小时前
ChatGPT 5.6 实战:用 AI 做云成本治理,从账单复盘到 K8s 优化
人工智能·云原生·chatgpt·kubernetes·测试用例
henrylin99991 小时前
Quant Agent 完整系统规格
python·量化
多年小白1 小时前
长征十号乙「网系回收」成功 × 商业航天板块 · 腾讯自选股圆桌报告
大数据·人工智能