回归模型评估

回归模型怎么评估?MSE、MAE、RMSE和R²
上篇我们搞定了分类模型的评估,学会了用准确率、精确率、召回率来判断"分对了没有"。
但你很快会遇到新问题:股价预测、房价估计、销量预测……这些没有固定选项的任务,模型预测的是具体数字,怎么评价它预测得准不准?
这就要聊回归模型的评估了。

为什么需要评估指标?
模型训练的本质,是让预测值尽量逼近真实值。
但"逼近"是个主观感受。我说模型预测很准,你说一般般,谁也说服不了谁。
这时候就需要一把"尺子"——评估指标。它把预测误差量化成具体数字,让不同模型之间能一分高下。
类比一下。老师批卷,没有分数就不知道学生学得好不好;模型训练,没有评估指标就不知道模型预测得准不准。
回归问题里,常用的"尺子"有四把:MAE、MSE、RMSE、R²。它们各有各的性格,适用的场景也不同。

MAE——最直观的平均误差
先说最简单的一把"尺子":MAE,中文叫平均绝对误差。
它的计算方法很朴素:把所有预测误差的绝对值加起来,再除以样本数量。
什么是预测误差?预测值减去真实值的差。
举例。你预测明天股价是100块,实际是108块,误差是-8块。取绝对值就是8块。
把所有样本的误差加起来求平均,就是MAE。它回答的问题是:平均来说,预测值差真实值多少?
MAE最大的优点是对异常值不敏感。
什么意思?假设股价预测,大部分样本误差在5块以内,但有一个异常样本误差了100块。MAE只是把100取绝对值后加进去,不会有剧烈波动。
这让它很稳健,适合那些数据不太干净、偶尔会有离谱数据的场景。

MSE和RMSE——对大误差"零容忍"
但有时候,你不想让异常值蒙混过关。
比如做金融风控,你不在乎预测错了一两个小金额,但你非常在乎预测错了大金额——差10万和差100万不是差10倍,是差10万倍的损失。
这时候就需要MSE这把更严格的"尺子"。
MSE,中文叫均方误差。它的公式是:所有预测误差平方的平均值。
注意是平方,不是绝对值。
这意味着什么?误差是10,平方后是100;误差是100,平方后是10000。
惩罚不是线性的,而是指数级的。差10块和差100块,在MSE眼里不是10倍差距,是100倍差距。
RMSE又是什么?它是MSE的平方根。
为什么多此一举?因为MSE的单位是平方之后的单位,不太好理解。比如预测房价,MSE的单位是"平方万元",鬼知道什么意思。
开方之后,单位恢复正常,解释起来就容易多了。

所以总结一下:如果你更关心大误差,选MSE或RMSE;如果你想要稳健、不被异常值带偏,选MAE。
R²——这个模型到底好不好?
前面两个指标都是看"误差有多大"。R²不一样,它看的是"模型有没有用"。
R²,中文叫决定系数。它的公式稍微复杂一点:
R² = 1 - (预测误差平方和 / 真实值方差之和)
听起来很抽象?换个说法。
如果没有模型,只用均值预测,总误差是"真实值围绕均值的波动"。这是基准线。
用了模型之后,误差变成了"预测值偏离真实值的波动"。
R²衡量的是:模型消除了多少基准线的波动?
如果R²=0.8,意思是模型解释了80%的数据变异。剩下20%还是预测不准。
如果R²=1,完美模型,预测值和真实值完全一致。
如果R²=0,跟用均值预测差不多,模型白训练了。
如果R²<0?恭喜你,模型比用均值预测还差,不如扔掉换个模型。

一图对比——四大指标怎么选?
说了这么多,来个总结。选指标就像选手机:有人注重拍照,有人注重续航,没有绝对的好坏,只有适不适合。
| 指标 | 异常值敏感度 | 单位 | 可解释性 | 适用场景 |
|---|---|---|---|---|
| MAE | 低(稳健) | 与原始数据一致 | 高 | 数据有噪声、想要稳健预测 |
| MSE | 高(惩罚大) | 平方后的单位 | 中 | 重视大误差、异常检测 |
| RMSE | 高(惩罚大) | 与原始数据一致 | 高 | 需要可解释的大误差惩罚 |
| R² | 间接影响 | 无单位 | 高 | 评估模型整体效果 |
选哪个?先问自己三个问题:
第一,我是更怕小错误还是大错误?小错误选MAE,大错误选MSE/RMSE。
第二,数据里有没有异常值?没有选MSE/RMSE,有选MAE。
第三,我想知道模型"有没有用"吗?想就加上R²。

sklearn实战——一行代码搞定评估
光说不练假把式。来看看实际代码怎么用。
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
# 假设你有真实值和预测值
y_true = [100, 110, 105, 108]
y_pred = [98, 115, 102, 106]
# 计算四个指标
mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse) # sklearn没有直接算RMSE的函数,手动开方
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:.2f}") # 决定系数有个小技巧:sklearn的函数命名规律。
以score结尾的函数,返回越大越好的值,比如R²。
以error或loss结尾的函数,返回越小越好的值,比如MAE、MSE。
记住这个规律,就不会搞混了。
写在最后
今天聊了回归模型的四把"尺子":MAE、MSE、RMSE、R²。
它们不是非此即彼的关系。实战中建议同时计算多个指标,从不同角度看模型表现。
下次训练完回归模型,别只看一个数字就下结论。把四个指标都跑一遍,你会发现模型在不同维度上的表现差异,这些信息往往是优化的关键。
回归模型评估搞定了,那最基础的回归模型长什么样?下篇我们就来聊两个老祖宗级别的算法——线性回归和逻辑回归。它们虽然简单,但很多复杂模型都是建立在它们之上的。
