统计方差为什么除以 n−1

相关文档术语表

这个问题在面试里常被当做送分题,但真要讲清楚,得落到一个具体的统计语境下:用样本去估计总体参数时的无偏性(unbiasedness)。除以 n−1 不是数学上的约定俗成,而是对一个系统性偏差的修正。

两种方差不要混为一谈

严格区分两个东西:

  • 总体方差(population variance):总体真值 μ 已知,定义为
  • 样本方差(sample variance):μ 未知,只能用样本均值 代替,即

差别只有一处:μ 是确定量, 是从同一批数据里估计出来的随机量。除以 n 还是 n−1 的分歧就出在这里。

直接除 n 为什么不行

如果用 作为估计量,结果是系统性低估真实方差。

原因在于 本身就是用这批数据拟合出来的中心点,它天然会”靠近”数据。用最小二乘的语言说, 是使 关于 c 取最小值的解。所以对任意的 ,都有

特别地,把真值 μ 代进去也一样:。用 去算的平方和一定比用 μ 算出来的要小,平均下来方差就被压低了。

自由度的直观解释

另一个视角是自由度。n 个独立观测本来有 n 个自由度,但一旦用它们算出了 ,这 n 个残差 就被一个约束 绑住了——知道其中 n−1 个,第 n 个就被定死。

也就是说,n 个残差里只有 n−1 个是独立的信息量。分母用 n−1 才对应实际可用的独立信息。

严格的期望计算

把”系统性低估”量化出来。对 i.i.d. 样本 ,可以直接展开:

推导不复杂,用 展开,配合 就能凑出来。

于是:

  • 除以 n:,有偏。
  • 除以 n−1:,无偏。

这就是 Bessel’s correction 的全部内容。

什么时候就不用纠结这件事

工程实践里,除以 n 还是 n−1 其实经常不重要:

  • 真实均值 μ 已知时,直接除 n 就是无偏的,没有修正问题。
  • 大样本下,,差异可以忽略。
  • 做点估计以外的目标(比如 MLE、深度学习里的 batch norm、归一化层),追求的是数值稳定性、梯度性质或者一致性,而不是无偏性。BN 里直接除 n 就是这个道理,没人会在训练循环里计较那一个自由度。
  • 无偏估计本身也不是唯一的”好”。像 MSE 最小的方差估计量其实是除以 n+1,只是牺牲了无偏性换更小的方差。估计量的选择永远是 bias-variance 权衡的问题。

一句话总结

除 n−1 的本质,是用样本均值顶替真实均值时对”自己拟合自己”这一行为的偏差修正。它在统计推断里必要,但在大部分机器学习场景里并非刚需——搞清楚当前任务要的是无偏性还是别的什么,比记住公式更重要。