📑 本页目录(点开跳转)
08 · 偏差-方差分解:它是个等式
⏱ 28 分钟 | ⭐ 从"打比方"升级成"能算的东西"
🎯 一句话
你一直听说「偏差和方差要权衡」。它不是个比喻——它是一个可以严格推导出来的等式。 而且这个等式直接解释了集成学习为什么有效。
📐 一、那个等式
对一个固定的测试点 $x$,在所有可能的训练集上取期望:
$$\underbrace{\mathbb{E}\left[(y - \hat f(x))^2\right]}_{\text{期望测试误差}} = \underbrace{\text{Bias}[\hat f(x)]^2}_{\text{系统性偏离}} + \underbrace{\text{Var}[\hat f(x)]}_{\text{对训练集的敏感度}} + \underbrace{\sigma^2}_{\text{不可消除的噪声}}$$
💡 人话翻译:
| 项 | 含义 | 打靶类比 |
|---|---|---|
| 偏差² | 你的平均预测离真相有多远 | 弹着点的中心偏离靶心多少 |
| 方差 | 换一批训练数据,你的预测会变多少 | 弹着点散得有多开 |
| σ² | 数据本身的噪声 | 靶子在风里晃,谁也打不准 |
⚠️ 一个关键的理解点:期望是对"所有可能的训练集"取的,不是对测试点取的。 「方差」问的是:如果我换一批训练数据重新训练,这个点的预测会变多少? 你实际只有一个训练集,所以方差是看不见的——但它真实存在,且决定了你的泛化。
📐 推导(想看再点)
设真实关系 $y = f(x) + \varepsilon$,$\mathbb{E}[\varepsilon]=0,\ \text{Var}(\varepsilon)=\sigma^2$。 记 $\bar f(x) = \mathbb{E}_D[\hat f(x)]$(在所有训练集上的平均预测)。
$$\mathbb{E}[(y-\hat f)^2] = \mathbb{E}[(f + \varepsilon - \hat f)^2]$$
把 $\bar f$ 加进去再减掉:$f + \varepsilon - \hat f = (f - \bar f) + (\bar f - \hat f) + \varepsilon$
平方展开后有三个平方项和三个交叉项。三个交叉项都为 0: - $\mathbb{E}[\varepsilon] = 0$,所以含 ε 的两项消失 - $\mathbb{E}[\bar f - \hat f] = 0$($\bar f$ 就是 $\hat f$ 的期望),所以第三项消失
剩下:
$$= \underbrace{(f-\bar f)^2}_{\text{Bias}^2} + \underbrace{\mathbb{E}[(\hat f - \bar f)^2]}_{\text{Var}} + \underbrace{\sigma^2}_{\text{噪声}}$$
🔑 二、四个立刻能用的推论
① σ² 是天花板
无论你的模型多强,期望测试误差不可能低于 σ²。
操作步骤
- 如果你的验证分数卡在某个值下不去了:
- 先估计一下 σ²(比如同样输入的重复观测差多少)
- 如果已经接近 σ²,别再调模型了
- ⭐ 该做的是:改进数据质量、增加特征、减少标注噪声
- 而不是继续换模型
② 模型复杂度只在偏差和方差之间搬运
对照
简单模型:偏差大、方差小
复杂模型:偏差小、方差大
↑
总和有个最小值 —— 那就是最优复杂度
🔗 这就是基础教程第 1 章 那张决策树深度表的数学解释。
③ ⭐ 加数据只降方差,不降偏差
因果链
🔗 这精确解释了基础教程第 5 章学习曲线的读法: 曲线平了 = 方差已经降到底了 = 剩下的是偏差 = 该改模型而不是加数据。
④ 「无偏」不一定好
结果对照
这是理解正则化的第四个视角:故意引入偏差,换方差的大幅下降。 另外三个:第 2 章贝叶斯先验、第 9 章缩小假设空间、第 10 章SRM 的复杂度罚款。
🌳 三、⭐ 用它解释集成学习
这是本章最有价值的部分——集成为什么有效,有数学答案。
Bagging / 随机森林:直接砍方差
算一算
取 M 个模型的平均:f̄ = (1/M)·Σ fₘ
如果这 M 个模型【完全独立】:
Var(f̄) = Var(f) / M ⭐ 直接降 M 倍!
Bias(f̄) = Bias(f) 偏差【一点不动】
💡 人话:平均 100 棵树,方差降到 1/100,偏差纹丝不动。
推论:Bagging 该配高方差低偏差的基学习器 —— 也就是完全生长的深树。
反正方差会被平均掉,那就让每棵树尽量把偏差压到最低。
⚠️ 但"完全独立"做不到
现实中树之间是相关的。真实的方差是:
$$\text{Var}(\bar f) = \rho\,\sigma_f^2 + \frac{1-\rho}{M}\sigma_f^2$$
其中 ρ 是模型间的相关系数。
💡 关键洞察:
流程图
这就是随机森林「随机选特征」的数学理由:
流程图
🔗 ML 基础 04a · 集成学习与 GBDT说 "集成的收益来自成员差异"——差异就是 1−ρ,这里是它的公式。
Boosting:砍偏差
因果链
🔗 这解释了ML 基础 04a · 集成学习与 GBDT那个问题: 为什么 GBDT 的树要浅、随机森林的树要深。 两者在偏差-方差等式里干的是相反的活。
📋 四、一张表总结
| Bagging / 随机森林 | Boosting / GBDT | |
|---|---|---|
| 主要降低 | 方差 | 偏差 |
| 基学习器该选 | 高方差低偏差 → 深树 | 低方差高偏差 → 浅树 |
| 树之间 | 独立(可并行) | 依赖(必须串行) |
| 增加树的数量 | 几乎不会过拟合(趋于 ρσ²) | 会过拟合 → 要早停 |
| 关键调节手段 | 降低相关性 ρ(随机选特征、随机采样) | 降低学习率 |
| 对噪声标签 | 较鲁棒 | 较敏感(会去拟合噪声的残差) |
⚠️ 五、两个重要的现代补充
① 分类任务的分解不一样
因果链
实践含义:偏差-方差是回归任务的精确工具、分类任务的有用直觉。
② 双下降现象
深度学习里出现了「双下降」,打破了经典的 U 型曲线:
💡 怎么理解: - 偏差-方差分解仍然正确(它是数学恒等式,不可能错) - 但「复杂度增加 ⇒ 方差增加」这个经验规律在超参数化区间不成立 - 可能的原因:超参数化时有无穷多个能拟合训练集的解,SGD 倾向于选到"平坦"的那些
🔗 第 10 章会展开这个矛盾。现代大模型正工作在右边那个区域。
🔬 六、怎么实际估计偏差和方差
理论上要"所有可能的训练集",实践中用 bootstrap 近似:
import numpy as np
def estimate_bias_variance(model_fn, X, y, X_test, y_test, n_rounds=50):
preds = []
n = len(X)
for _ in range(n_rounds):
idx = np.random.choice(n, n, replace=True) # bootstrap 重采样
m = model_fn().fit(X[idx], y[idx])
preds.append(m.predict(X_test))
preds = np.array(preds) # (n_rounds, n_test)
mean_pred = preds.mean(axis=0)
bias2 = np.mean((mean_pred - y_test) ** 2) # 含 σ²,是个上界
var = np.mean(preds.var(axis=0)) # ⭐ 方差可以干净地估
print(f"Bias²(含噪声) ≈ {bias2:.4f} Var ≈ {var:.4f}")
💡 实用价值:跑一次这个,对比「深树 vs 浅树」或「正则强 vs 弱」, 你能亲眼看到方差怎么被换成偏差。
🔗 七、和站内其他章的关系
| 相关的地方 | 这里的解释 |
|---|---|
| 基础教程第 1 章决策树深度表 | 偏差方差权衡的经验版 |
| 基础教程第 5 章学习曲线怎么读 | 加数据只降方差 |
| 随机森林要"随机选特征" | 降低 ρ,公式在这 |
| GBDT 树要浅、随机森林树要深 | 两者降的东西相反 |
| 正则化能提升泛化 | 用偏差换方差,总误差更小 |
| 模型集成通常有效 | 方差平均 |
✅ 检查点
- 偏差、方差、σ² 各是什么?「期望」是对什么取的?
- σ² 意味着什么实践含义?
- 加数据能降低偏差吗?这对"该加数据还是改模型"意味着什么?
- 为什么说「无偏不一定好」?
- Bagging 降什么?为什么该配深树?
- 为什么随机森林要"随机选特征"?(用 ρ 的公式解释)
- 为什么 GBDT 的树要浅?
- 分类任务的偏差方差分解和回归有什么不同?
👀 答案
- 偏差²=平均预测离真相的距离;方差=换训练集时预测的波动;σ²=数据固有噪声。期望是对所有可能的训练集取的(不是测试点)——所以方差你看不见但它真实存在。
- 期望测试误差不可能低于 σ²。撞到这个天花板时该改进数据质量/加特征,而不是继续调模型。
- 不能。加数据只降方差,偏差由模型假设决定。欠拟合时加数据无用,必须换更强模型;学习曲线平了就说明该改模型。
- 我们要的是总误差小,不是偏差为 0。正则化故意引入偏差换取方差大幅下降,总误差反而更小——这是岭回归比最小二乘泛化好的原因。
- 降方差(M 个独立模型平均,方差降 M 倍,偏差不变)。所以配高方差低偏差的基学习器,即完全生长的深树。
- 真实方差 = ρσ² + (1−ρ)σ²/M,第一项不随 M 减小。若所有树都能看全部特征,会都先用最强特征分裂 → 长得像 → ρ 高 → 平均无效。随机选特征强制树变得不一样,降低 ρ。
- Boosting 降的是偏差,所以基学习器要选"低方差高偏差"的浅树。每棵树只纠正一点点,避免一步跨太大。
- 0-1 损失没有干净的加法分解,方差有时甚至有益(可能把错误预测"抖"回正确一侧)。所以它是回归的精确工具、分类的有用直觉。
🛑 可以停在这里
⚡ 走神救援
先记住这几件事
- 平方损失下,期望预测误差可以分为偏差、方差与不可约噪声。
- 方差描述训练集变化带来的预测变化,不是单次训练曲线的抖动。
- 集成的收益与模型相关性有关;增加模型数量不等于无限降低误差。
- 双下降不推翻分解本身,而是提醒我们复杂度与误差的经验走势并非总是 U 型。
下一节 👉 09-PAC学习.md ⭐