这个问题本质上是一个统计估计偏差(bias)修正问题,核心关键词是 无偏估计(unbiased estimator)。
一、到底在算什么
有两种“方差”:
- 总体方差(population variance) 已知真实均值 μ,用的是:
- 样本方差(sample variance) 不知道 μ,只能用样本均值 (\bar{x}):
关键差别就在:
μ 是真值,
二、为什么直接除 n 会出问题
如果你天真地写:
它其实是一个有偏估计,而且是系统性低估方差。
为什么?
因为你用的是
而
👉 每个 (
👉 平方后整体偏小
👉 方差被压低
三、核心机制:自由度(degrees of freedom)
这里真正的本质是 自由度 = n - 1。
当你计算 (
举个极端例子:
- n = 3
- 已知 (
) - 你随便选两个
- 第三个
已经被完全确定(想让 不变的话)
也就是说:
👉 原本 n 个独立变量
👉 现在只剩 n−1 个是“自由的”
所以:
你只拥有 n−1 个独立的“偏差信息”
这就是为什么要除以 n−1。
四、严格一点的结论(关键数学结果)
如果你用:
那么它的期望是:
也就是说:
👉 它平均会低估真实方差一个 (\frac{n-1}{n}) 的比例
所以我们反过来修正:
就刚好让:
这就叫 无偏估计。
五、一个更直觉但不低级的理解
你可以把
这个中心点是专门为了最小化平方误差选出来的(最小二乘性质)。
所以:
👉 用它来计算偏差,本身就已经“优化过”
👉 偏差自然被压小
👉 你再除 n,就等于“错上加错”
而除以 n−1,本质是在补偿这种“过拟合均值”的行为。
六、什么时候可以除 n?
有两个典型情况:
当你真的知道 μ(比如理论分布已知)
或者你根本不在乎无偏性(比如机器学习里很多时候)
例如在深度学习里,batch variance 就是直接除 n,因为:
👉 目标不是统计推断
👉 而是数值稳定性 + 收敛速度
总结(压缩版)
除 n−1 的本质:
- 用样本均值替代真实均值 → 引入系统性低估
- 数据自由度从 n 变成 n−1
- 为了让期望等于真实方差 → 必须除 n−1