这个问题本质上是一个统计估计偏差(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