Python 现代开发学习笔记

(十七)按记录配对计算均方误差

1. 预测、残差、平方与平均

自拟三条目标为 [2,4,6],预测为 [1,4,7]。残差用预测减目标,得到 [−1,0,1];平方后为 [1,0,1],平均为 2/3。平方让正负偏差不会互相抵消。

J=1n∑i=1n(ŷi−yi)2.J=\frac{1}{n}\sum_{i=1}^{n}(\hat y_i-y_i)^2.

这叫均方误差(mean squared error,MSE)。n 是记录数,每个预测只和同一条记录的目标配对。

# 项目文件:demos/mse_shapes.py
# 同一条记录的预测与目标必须配对;一维目标和列形预测会扩展成全部组合。
import numpy as np

y = np.array([2.0, 4.0, 6.0])
prediction = np.array([1.0, 4.0, 7.0])
error = prediction - y
print(
    "残差",
    error.tolist(),
    "平方",
    (error**2).tolist(),
    "均方",
    float(np.mean(error**2)),
)
wrong = prediction[:, None] - y
print("错误配对形状", wrong.shape, "错误均方", float(np.mean(wrong**2)))

两个一维数组都是 (3,),相减后仍是 (3,)。若预测改成 (3,1)、目标仍为 (3,),广播会生成 (3,3):每一个预测分别减去全部目标,错误均方约为 8.666667。计算前核对 shape,就是在核对“哪些记录正在相互配对”。

三个预测与三个目标正确逐条配对只产生三个残差,列形与一维目标广播却产生九种组合

笔记正文与全部题解 · Ctrl / ⌘ K