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

发布时间:2026/7/10 21:15:11
回归模型怎样评估:MAE、MSE、RMSE 和 R² 上一课用线性回归预测了房价。但模型预测出一个数字还不等于模型可靠。如果真实价格是 200 万模型预测成 198 万和预测成 120 万显然不是一回事。我们需要一套明确的尺度量化模型到底错了多少以及这些错误对业务是否可接受。先把预测误差说清楚对每个测试样本都有一个真实值y yy和预测值y ^ \hat{y}y^​误差 预测值 - 真实值正负号只表示高估或低估。评估错了多少时通常会消掉方向重点看偏差的大小。假设真实配送时长是 30 分钟预测 28 分钟偏差是 2 分钟预测 42 分钟偏差是 12 分钟。所有指标都从这些偏差出发只是对大错的态度不同。四个指标先一张表速查指标公式你该关心什么什么时候用它MAE1 n ∑ ∣ y i − y ^ i ∣ \frac{1}{n}\sum\vert y_i - \hat{y}_i\vertn1​∑∣yi​−y^​i​∣平均错多少关心平均误差成本MSE1 n ∑ ( y i − y ^ i ) 2 \frac{1}{n}\sum(y_i - \hat{y}_i)^2n1​∑(yi​−y^​i​)2大错惩罚有多重训练的损失函数最常用RMSEMSE \sqrt{\text{MSE}}MSE​误差的代表性波动需要和 y 同单位的误差R²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平均绝对误差MAEMean Absolute Error把每个样本的误差取绝对值后求平均MAE 1 n ∑ i 1 n ∣ y i − y ^ i ∣ \text{MAE} \frac{1}{n}\sum_{i1}^{n} \vert y_i - \hat{y}_i \vertMAEn1​i1∑n​∣yi​−y^​i​∣它最直观单位和原始目标一致。如果房价用万元表示MAE 8.4就可以直接读作模型平均会偏离约 8.4 万元。对于需要和业务方沟通的项目MAE 往往是很好的首要指标。MAE 不会被离群值绑架一个异常大误差只贡献一行不会被平方放大。它的缺点是对梯度下降不友好绝对值在 0 处不可导所以很少直接当训练目标用。MSE 与 RMSE更在意大错误MSEMean Squared Error会先把误差平方MSE 1 n ∑ i 1 n ( y i − y ^ i ) 2 \text{MSE} \frac{1}{n}\sum_{i1}^{n} (y_i - \hat{y}_i)^2MSEn1​i1∑n​(yi​−y^​i​)2误差从 2 变成 4误差从 12 变成 144大偏差被明显放大。这是训练回归模型最常用的损失函数。看两个样本就明白平方惩罚有多狠样本真实值预测值误差MAE 贡献MSE 贡献12602501010100226021050502500两个样本的 MAE 贡献比是 1:5但 MSE 贡献比是 1:25。用 MSE 训练时模型会不遗余力地讨好超大误差的样本。不过 MSE 的单位被平方了读起来不直观。RMSERoot Mean Squared Error再对 MSE 开平方RMSE MSE \text{RMSE} \sqrt{\text{MSE}}RMSEMSE​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_{i1}^{n}(y_i - \hat{y}_i)^2}{\sum_{i1}^{n}(y_i - \bar{y})^2}R21−∑i1n​(yi​−yˉ​)2∑i1n​(yi​−y^​i​)2​分子是模型犯的错残差平方和分母是只用均值瞎猜会犯的错总平方和。R² 1测试数据上预测完全准确R² 0和只猜平均值差不多R² 0甚至不如只猜平均值该回去检查代码了。比如R² 0.85表示模型解释了约 85% 的目标变化。R² 很适合比较同一任务、同一测试集上的不同模型但不能替代 MAE 或 RMSE。一个 R² 看起来不错的模型仍可能存在业务无法接受的平均误差。用 scikit-learn 一次计算四个指标fromsklearn.metricsimport(mean_absolute_error,mean_squared_error,r2_score,)y_true[120,145,168,180]y_pred[118,150,160,191]maemean_absolute_error(y_true,y_pred)msemean_squared_error(y_true,y_pred)rmsemean_squared_error(y_true,y_pred)**0.5r2r2_score(y_true,y_pred)print(fMAE:{mae:.2f})print(fMSE:{mse:.2f})print(fRMSE:{rmse:.2f})print(fR²:{r2:.3f})在真实项目里y_true和y_pred应来自测试集y_predmodel.predict(X_test)maemean_absolute_error(y_test,y_pred)同一个测试集、同一种数据切分方式是比较模型的基本前提。到底选哪个指标训练模型 → MSE好优化梯度友好 向业务方汇报 → RMSE同单位聚焦大误差 分析业务成本 → MAE避免离群值绑架结论 判断模型学没学到 → R²和均值基线相比可以先用下面这张判断表你最想知道什么优先关注平均会差多少且要容易解释MAE严重大错需要被额外惩罚RMSE 或 MSE模型相对均值基线有没有价值R²要完整了解模型行为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/