MSE 与 RMSE
MSE 平均平方误差并强调大错误,RMSE 开方后恢复目标原单位。
学习前需要掌握
背景与问题
回归模型会产生正负不同的预测偏差。直接平均有符号误差可能相互抵消,让一个明显不准的模型看起来“平均没错”;因此需要先明确怎样汇总误差。
MSE 和 RMSE 经常用于训练与评价,但它们强调大误差,且受目标尺度影响。读到一个数值时,应先问数据范围、单位和比较基线是什么。
概念定义
MSE 是逐样本平方误差的平均;RMSE 是 MSE 的平方根。MSE 的单位是目标单位的平方,而 RMSE 与目标具有相同单位。
两者在同一份固定数据上给出相同的模型排序,因为平方根单调增加;跨数据集、目标单位或样本权重改变后,不能直接把数值作公平比较。
直观理解
小错误被平方后相对变小,大错误的影响会被放大。RMSE 开方能方便用原单位解释,却没有取消 MSE 对极端误差的重视。
三条预测怎样得到 RMSE
构造真实值 [3,5,8],预测 [2,5,10],误差绝对值为 [1,0,2]。平方误差总和为 5,MSE=5/3≈1.667,RMSE≈1.291;MAE 则为 1。
如果把真实值和预测一起乘 10,RMSE 变成约 12.91,MSE 变成约 166.67。模型的相对偏差没有因此改变,变化来自表示单位。
核心原理
计算前要确认真实值与预测逐条对齐,形状完全符合预期。一个 (n,) 向量与一个 (n,1) 列向量直接相减,可能广播成 n×n,而不是 n 个误差。
目标放大 c 倍时,同样相对预测质量下 MSE 会放大 c² 倍、RMSE 放大 |c| 倍。因此用元与万元表示价格时,误差数值会变,但不能据此说模型变好。
对异常值敏感既可能是需求,也可能是问题。如果巨大偏差具有很高业务代价,平方损失有意义;若少数错误测量主导评价,需要审计来源,并与 MAE、分位误差或稳健损失一起检查。
交叉验证中的均值 RMSE 与把所有折外平方误差先汇总再开方,一般不是完全同一个统计量。报告时应说明汇总方式与每折样本数量。
数学表达
核心表达
只在相同数据、目标单位和评价协议下比较;异常值多时同时查看 MAE。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1计算每条误差
- 2平方
- 3求平均
- 4需要时开方
代码对应位置
示例 1MSE 与 RMSE:最小可验证示例:把正文原理映射为可检查的代码行为。
计算与实现步骤
- 计算每条误差
- 平方
- 求平均
- 需要时开方
- 与基线和 CV 比较
代码实现
示例 1
MSE 与 RMSE:最小可验证示例
example_01.py用途:把正文原理映射为可检查的代码行为。
import numpy as np
y = np.array([3.,5.,8.])
p = np.array([2.,5.,10.])
mse = np.mean((y-p)**2)
print(mse, np.sqrt(mse))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
把正文原理映射为可检查的代码行为。
y- 目标标签或连续目标值。
mean- 训练特征逐列均值。
Step 1 · 1–5 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import numpy as np
y = np.array([3.,5.,8.])
p = np.array([2.,5.,10.])
mse = np.mean((y-p)**2)
print(mse, np.sqrt(mse))代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
平方误差代码对应均方损失。
预期输出或运行结果
MSE≈1.667,RMSE≈1.291。 1.6666666666666667 1.2909944487358056
常见错误 · 3 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 跨任务直接比较 MSE
- 忽略大异常误差影响
实际应用
- 回归损失
- 模型评价
常见错误
- 跨任务直接比较 MSE
- 忽略大异常误差影响
推荐学习资料
参考库不会生成虚假资源或无效外部链接。