第 17.5 篇:偏差-方差公式推导——为什么模型误差 = 偏差² + 方差 + 噪声

在第十七篇里,我们用直觉理解了:

模型误差通常来自三个来源:

  • 学得不够 → 偏差高
  • 学得太细 → 方差高
  • 数据本身有随机性 → 噪声

这一篇我们把这件事用数学形式写出来,并解释每一项到底代表什么。

经典公式是:

Error=Bias2+Variance+Noise Error = Bias^2 + Variance + Noise Error=Bias2+Variance+Noise

这条公式非常重要,因为它解释了:

为什么模型复杂度不能无限增加,也不能无限降低。


1. 从最基本的问题开始

假设真实世界存在一个函数:

y=f(x)+ε y = f(x) + \varepsilon y=f(x)+ε

这里:

  • f(x)f(x)f(x) 是真实规律
  • ε\varepsilonε 是随机噪声
  • ε\varepsilonε 的期望是 0:

E[ε]=0 E[\varepsilon] = 0 E[ε]=0

我们训练模型得到一个预测函数:

f^(x) \hat{f}(x) f^(x)

目标是:

让预测尽量接近真实值。

误差定义为:

E[(y−f^(x))2] E[(y - \hat{f}(x))^2] E[(yf^(x))2]

即:

真实值和预测值之间的平方误差。


2. 把真实值代入公式

由于:

y=f(x)+ε y = f(x) + \varepsilon y=f(x)+ε

代入:

E[(f(x)+ε−f^(x))2] E[(f(x) + \varepsilon - \hat{f}(x))^2] E[(f(x)+εf^(x))2]

展开:

E[(f(x)−f^(x)+ε)2] E[(f(x) - \hat{f}(x) + \varepsilon)^2] E[(f(x)f^(x)+ε)2]

平方展开:

E[(f(x)−f^(x))2+2ε(f(x)−f^(x))+ε2] E[(f(x) - \hat{f}(x))^2 + 2\varepsilon(f(x)-\hat{f}(x)) + \varepsilon^2] E[(f(x)f^(x))2+2ε(f(x)f^(x))+ε2]

利用期望性质:

由于:

E[ε]=0 E[\varepsilon] = 0 E[ε]=0

因此中间项为 0:

E[2ε(f(x)−f^(x))]=0 E[2\varepsilon(f(x)-\hat{f}(x))] = 0 E[2ε(f(x)f^(x))]=0

最终得到:

E[(f(x)−f^(x))2]+E[ε2] E[(f(x) - \hat{f}(x))^2] + E[\varepsilon^2] E[(f(x)f^(x))2]+E[ε2]

第二项:

E[ε2] E[\varepsilon^2] E[ε2]

就是噪声。

它代表:

数据本身的不确定性。

无法消除。


3. 对模型误差进一步拆解

我们现在关注:

E[(f(x)−f^(x))2] E[(f(x) - \hat{f}(x))^2] E[(f(x)f^(x))2]

关键在于:

模型 f^(x)\hat{f}(x)f^(x) 并不是固定的。

因为:

不同训练数据,会训练出不同模型。

所以我们需要考虑:

模型预测的期望:

E[f^(x)] E[\hat{f}(x)] E[f^(x)]

这个期望代表:

在所有可能训练集上,模型的平均预测。


4. 加一个中间项

我们加一个:

E[f^(x)] E[\hat{f}(x)] E[f^(x)]

来帮助拆解:

f(x)−f^(x)=f(x)−E[f^(x)]+E[f^(x)]−f^(x) f(x) - \hat{f}(x)= f(x) - E[\hat{f}(x)] + E[\hat{f}(x)] - \hat{f}(x) f(x)f^(x)=f(x)E[f^(x)]+E[f^(x)]f^(x)

平方后:

(f(x)−E[f^(x)]+E[f^(x)]−f^(x))2 (f(x)-E[\hat{f}(x)] + E[\hat{f}(x)]-\hat{f}(x))^2 (f(x)E[f^(x)]+E[f^(x)]f^(x))2

展开:

会得到三部分:

Bias2+Variance Bias^2 + Variance Bias2+Variance

最终结果是:

E[(f(x)−f^(x))2]=(f(x)−E[f^(x)])2+E[(f^(x)−E[f^(x)])2] E[(f(x)-\hat{f}(x))^2]= (f(x)-E[\hat{f}(x)])^2 + E[(\hat{f}(x)-E[\hat{f}(x)])^2] E[(f(x)f^(x))2]=(f(x)E[f^(x)])2+E[(f^(x)E[f^(x)])2]


5. 三项误差分别代表什么

现在我们得到完整公式:

Error=Bias2+Variance+Noise Error = Bias^2 + Variance + Noise Error=Bias2+Variance+Noise

下面逐个解释。


6. Bias(偏差)

偏差定义:

Bias=f(x)−E[f^(x)] Bias = f(x) - E[\hat{f}(x)] Bias=f(x)E[f^(x)]

它表示:

模型平均预测,与真实函数之间的差距。

换句话说:

模型的整体假设,离真实规律有多远。

偏差高意味着:

模型表达能力不足。

例如:

真实关系是曲线,但模型只能画直线。

无论训练多少数据,都会有系统误差。

这就是欠拟合。


7. Variance(方差)

方差定义:

Variance=E[(f^(x)−E[f^(x)])2] Variance = E[(\hat{f}(x)-E[\hat{f}(x)])^2] Variance=E[(f^(x)E[f^(x)])2]

它表示:

不同训练集得到的模型,预测差异有多大。

如果训练数据稍微变化,模型预测就变化很大:

说明方差高。

这通常意味着:

模型过于依赖训练数据细节。

容易过拟合。


8. Noise(噪声)

噪声定义:

Noise=E[ε2] Noise = E[\varepsilon^2] Noise=E[ε2]

它表示:

数据本身的随机性。

例如:

测量误差
标签误差
现实世界随机波动

这部分误差:

无法通过模型消除。

即使真实函数已知,也仍然存在。


9. 为什么模型复杂度影响 Bias 和 Variance

一般来说:

模型越简单:

Bias 高
Variance 低

模型越复杂:

Bias 低
Variance 高

原因是:

简单模型:

无法表达复杂关系。

复杂模型:

对数据变化更敏感。


10. 用一个具体例子帮助理解

假设真实函数:

y=x2 y = x^2 y=x2

我们用三种模型拟合:

模型1:

线性回归

无法表示二次关系。

Bias 高。

模型2:

二次多项式

可以表示真实关系。

Bias 低。

Variance 适中。

模型3:

20次多项式

可以穿过所有训练点。

Variance 高。

容易过拟合。


11. 为什么测试误差通常呈 U 型

随着模型复杂度增加:

Bias 下降
Variance 上升

测试误差:

先下降
再上升

即:

U 型曲线。

最低点:

是最佳复杂度。

也是偏差和方差的平衡点。


12. 为什么 Bagging 能降低方差

设单个模型方差:

σ2 \sigma^2 σ2

B 个模型平均:

Var(fˉ)=σ2B Var(\bar{f}) = \frac{\sigma^2}{B} Var(fˉ)=Bσ2

模型平均:

降低预测波动。

因此:

降低方差。

提高稳定性。

这也是随机森林有效的原因。


13. 为什么正则化会增加 Bias 但降低 Variance

正则化限制参数大小:

模型不再完全贴训练数据。

结果:

Bias ↑
Variance ↓

总体误差可能下降。

因为:

Variance 下降更多。


14. 为什么增加数据通常降低 Variance

Variance 与样本数量关系:

Variance∝1n Variance \propto \frac{1}{n} Variancen1

样本越多:

模型对单个样本依赖越小。

结果更稳定。

泛化能力更好。


15. 偏差-方差不是对立,而是需要平衡

机器学习的核心难点之一:

无法同时让:

Bias = 0
Variance = 0

因为:

复杂模型:

Variance 高。

简单模型:

Bias 高。

因此需要找到:

最佳平衡点。


16. 为什么理解这个公式非常重要

因为它统一解释了很多方法:

方法 作用
简化模型 降低 variance
正则化 降低 variance
剪枝 降低 variance
增加数据 降低 variance
更复杂模型 降低 bias
特征工程 降低 bias
集成学习 降低 variance

看起来不同的技术:

其实都在调节 Bias 和 Variance。


17. 这一篇最核心的 takeaway

机器学习的目标,不是:

找到最复杂的模型。

而是:

找到 Bias 和 Variance 平衡的模型。

理解这个公式后,你会更清楚:

什么时候该让模型更强
什么时候该让模型收一点

这会让调参不再只是“盲试”。

而是更有方向。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐