偏差方差权衡 模拟器 返回
机器学习

偏差方差权衡 模拟器

将机器学习的泛化误差分解为"偏差²、方差、噪声"三个部分进行可视化的工具。改变多项式模型的次数,实时观察欠拟合(高偏差)和过拟合(高方差)的权衡关系,以及总误差呈U形的现象。

参数设置
真实函数
数据背后的正确曲线
多项式模型次数
模型的复杂度。过低导致欠拟合,过高导致过拟合
单个数据集的点数
每个学习数据中的观测点数
噪声标准差
观测值中高斯噪声的大小 σ
数据集数量
用于计算期望值的独立学习数据集数量
计算结果
偏差²
方差
既约误差(噪声)
期望总误差
模型次数
状态
模型拟合 — 集成与离散

粗线表示真实函数,细线群表示各数据集的拟合曲线(宽度=方差),粗线表示平均预测(与真实函数的差=偏差)。散点为当前强调的1个数据集。

偏差方差分解 vs 次数
模型离散度 — 真实函数、平均预测、预测±1σ
理论与主要公式

$$\mathbb{E}\big[(y-\hat f)^2\big]=\underbrace{(\,\overline{\hat f}-f\,)^2}_{\text{偏差}^2}+\underbrace{\mathbb{E}\big[(\hat f-\overline{\hat f})^2\big]}_{\text{方差}}+\underbrace{\sigma^2}_{\text{噪声}}$$

测试点处的期望平方误差可分解为偏差²、方差、既约误差(噪声方差σ²)三部分。$\hat f$ 为学习得到的模型,$\overline{\hat f}$ 为改变数据集时的平均预测,$f$ 为真实函数。

$$\text{Bias}^2=\frac{1}{N}\sum_x\big(\overline{\hat f}(x)-f(x)\big)^2,\qquad \text{Var}=\frac{1}{N}\sum_x\mathbb{E}_D\big[(\hat f_D(x)-\overline{\hat f}(x))^2\big]$$

在测试网格上平均的偏差²和方差。$\hat f_D$ 为在数据集 $D$ 上学习的模型。

提高模型复杂度会降低偏差但增加方差。二者的权衡使得期望总误差关于复杂度呈U形,最小值处为最优泛化性能。

偏差方差权衡是什么

🙋
机器学习中经常说"要注意过拟合",但我不太理解过拟合有什么坏处。如果模型能完美拟合数据,不是更好吗?
🎓
很好的问题。关键点是"拟合手头的数据"和"在看不见的数据上表现好"是两回事。过拟合的模型会费力去追踪学习数据中的随机噪声。所以训练误差会接近零,但在新数据上往往大失所望。试试用这个工具把次数改到12。你会看到细线群乱成一团——这就是"数据改变时预测变化很大"的现象。
🙋
确实,次数1时所有曲线基本重合在一条直线上。这样不好吗?
🎓
这就是问题所在。次数1的直线很稳定——也就是说方差很小,但直线根本无法表达正弦波那样的弯曲。平均预测与真实曲线有很大的系统偏离,这叫"偏差"。用简单模型时虽然稳定,但从根本上就错了。这就是欠拟合。
🙋
明白了……简单模型偏差大,复杂模型方差大。中间肯定有个最优点吧?
🎓
正是!这就是偏差方差权衡。看下面的"分解 vs 次数"图表。偏差²从左到右下降,方差从左到右上升,它们的和(总误差)形成一个U形。U的底部对应最优泛化性能的次数——通常在次数3~5之间。模型不是越复杂越好,也不是越简单越好。
🙋
可是U形的底部也不是从零开始啊。为什么误差无法降到零?
🎓
这就是第三个成分:既约误差。观测数据本身就含有噪声σ,再好的模型也无法消除这个噪声。所以最小可能误差就是σ²,这是个下界。你看,把左边的噪声标准差改成0,U形就能完全降到底线了。
🙋
实际工作中怎么找到这个最优点呢?总不能每次都像这样画图吧。
🎓
现实中用交叉验证。把数据分成几份,轮流用其中一部分测试、其他部分训练,找出测试误差最小的模型复杂度。这个工具能看到"上帝视角"下真实发生的事,是学习的好教材。实务中看不到真实函数,只能通过交叉验证间接估计。

常见问题

偏差是指模型平均而言与真实函数的偏离程度,代表系统误差。例如用直线拟合正弦波,由于模型过于简单,无法捕捉曲线的本质形状,偏差就很大。方差是指当学习数据改变时预测结果的波动程度。如果模型过于复杂(如高次多项式),它会过度追踪数据中的噪声,导致对不同数据集的预测差异很大。泛化误差等于偏差²加上方差,再加上无法消除的噪声(既约误差)。
提高模型的次数(复杂度)会降低偏差,但会增加方差。次数过低会导致欠拟合(高偏差),无法捕捉真实关系;次数过高会导致过拟合(高方差),模型对噪声过度敏感。期望泛化误差为偏差²加方差加噪声,关于复杂度呈U形。训练误差会随着复杂度增加而单调下降,但测试误差在最优点处最小,之后会恶化。这就是复杂模型不一定更优的原因。
既约误差是观测数据中固有的随机噪声方差σ²,无论使用多么优秀的模型都无法去除。这是误差的下限。在本模拟器中,观测值被设为真实函数加标准差为noiseLv的高斯噪声,所以既约误差正好是noiseLv²。即使模型完美地拟合了真实函数,测试点的观测值仍会因噪声而偏离,导致平均平方误差不会低于σ²。模型选择只能减少偏差和方差,噪声只能通过提高数据质量来改善。
实务中使用交叉验证来找到测试误差最小的模型复杂度。当偏差较高(欠拟合)时,可增加特征、增加模型复杂度或减弱正则化。当方差较高(过拟合)时,可增加数据量、加强正则化(L2/L1、Dropout)、简化模型或使用集成方法平均预测。注意数据量增加只能降低方差而不能降低偏差。

实世界应用

模型选择与超参数调优:决策树深度、神经网络层数和宽度、支持向量机的核参数——这些都是"复杂度"调节旋钮,本质上都在操纵偏差方差权衡。交叉验证找到测试误差最小的复杂度,就是在不知道真实函数的情况下,估计本工具所示分解曲线的谷底。

正则化设计:岭回归的λ、Lasso、神经网络的权重衰减和Dropout都是降低实际模型复杂度、抑制方差的工具。本模拟器内部也用了微小的岭项(λ=1e-6)保证数值稳定性。增大λ会增加偏差、降低方差——正则化效果的体现。过拟合时"提高λ"就是把你从U形的右侧拉回底部的操作。

数据收集决策:"要不要增加数据"是现场常见的问题。当方差支配时,增加数据能显著降低预测离散度;当偏差支配时,增加数据无济于事,需要改进特征或模型。本工具改变数据点数时只有方差下降的现象,直观说明了这一原理。

集成学习理解:Bagging和随机森林通过对多个模型的预测平均来降低方差,这正好对应本模拟器中"平均预测"比各数据集单个拟合更接近真实函数的现象。而Boosting则是逐步削减偏差的方向。理解偏差方差分解能明确阐述集成方法的设计原理。

常见误解与注意点

最大的误解是"训练误差小=模型好"。复杂模型可以任意降低训练误差,次数等于数据点数的多项式训练误差接近零。但这是过拟合,泛化误差(测试误差)反而增加。评价模型的标准始终是"看不见的数据上的表现"。训练误差与测试误差的大幅偏离是过拟合的典型信号。本工具计算的始终是测试网格上的泛化误差,而非训练误差。

其次,"增加数据就能解决一切"的错觉。增加数据量确实能降低方差,但对偏差无效。用直线模型拟合正弦波,即使将观测点增加100倍,平均预测仍然偏离真曲线。在欠拟合状态下盲目收集数据既浪费成本又看不到改进。应该先判断偏差还是方差为主,针对性地应对。

最后,"偏差方差分解可直接从实数据计算"的误会。本模拟器能分别输出偏差和方差,是因为拥有"上帝视角":知道真实函数f(x)、能生成多个独立数据集。现实中既不知道f,也只有一个数据集。实务中无法直接计算分解,只能通过交叉验证间接处理权衡。这个工具是理解其背后机制的学习用模型,不是生产工具。

使用指南

  1. 调整模型次数滑块(degNum)在1~10范围内,设定多项式复杂度
  2. 指定样本大小(nNum)为10~500个数据点,改变训练数据规模
  3. 设置噪声水平(noiseNum)为0.1~5.0的标准差,引入观测噪声
  4. 增减数据集数(dsNum)为5~100次迭代,确认分解的稳定性
  5. 点击"执行"按钮,自动计算偏差²、方差、既约误差

具体计算例子

对于次数为3的多项式模型,n=100样本,噪声σ=1.0,重复50个数据集的情况,偏差²≈0.15,方差≈0.42,既约误差≈1.00,期望总误差为1.57。若次数改为6(过拟合域),偏差²≈0.05降低,但方差≈3.20急剧增加,总误差恶化至4.25。相反,次数1(欠拟合)时偏差²≈8.50支配,总误差达9.50。

实务注意事项