误差(Bias)和方差(Variance)——机器学习中的模型选择

模型性能的度量

在监督学习中,已知样本 $(x_1, y_1),(x_2, y_2),...,(x_n, y_n)$,要求拟合出一个模型(函数)$\hat{f}$,其预测值$\hat{f}(x)$与样本实际值$y$的偏差最小。算法

考虑到样本数据实际上是采样,$y$并非真实值自己,假设真实模型(函数)是$f$,则采样值$y=f(x)+\varepsilon$,其中$\varepsilon$表明噪音,其均值为0,方差为$\sigma^2$。网络

拟合函数$\hat{f}$的主要目的是但愿它能对新的样本进行预测,因此,拟合出函数$\hat{f}$后,须要在测试集(训练时未见过的数据)上检测其预测值与实际值$y$之间的偏差。能够采用平方偏差函数(mean squared error)来度量其拟合的好坏程度,即 $(y-\hat{f}(x))^2$app

偏差指望值的分解

通过进一步的研究发现,对于某种特定的模型(下面还会进一步说明“特定模型”的含义),其偏差的指望值能够分解为三个部分:样本噪音、模型预测值的方差、预测值相对真实值的误差机器学习

公式为:
$$E((y-\hat{f}(x))^2) = \sigma^2 + Var[\hat{f}(x)] + (Bias[\hat{f}(x)])^2$$
其中 $Bias[\hat{f}(x)] = E[\hat{f}(x) - f(x)]$函数

即:偏差的指望值 = 噪音的方差 + 模型预测值的方差 + 预测值相对真实值的误差的平方
先看一个图比较直观。性能

图1 偏差指望值的分解

使用特定模型对一个测试样本进行预测,就像打靶同样。学习

靶心(红点)是测试样本的真实值,测试样本的y(橙色点)是真实值加上噪音,特定模型重复屡次训练会获得多个具体的模型,每个具体模型对测试样本进行一次预测,就在靶上打出一个预测值(图上蓝色的点)。全部预测值的平均就是预测值的指望(较大的浅蓝色点),浅蓝色的圆圈表示预测值的离散程度,即预测值的方差。测试

因此,特定模型的预测值 与 真实值 的偏差的 指望值,分解为上面公式中的三个部分,对应到图上的三条橙色线段:预测值的误差、预测值的方差、样本噪音。spa

理解偏差指望值

回顾一下,指望值的含义是指在一样的条件重复屡次随机试验,获得的全部可能状态的平均结果(更详细的定义参考维基百科-指望值)。对于机器学习来讲,这种实验就是咱们选择一种算法(并选定超参数),以及设置一个固定的训练集大小,这就是一样的条件,也就是上文所说的特定的模型。而后每次训练时从样本空间中选择一批样本做为训练集,但每次都随机抽取不一样的样本,这样重复进行屡次训练。每次训练会获得一个具体的模型,每一个具体模型对同一个未见过的样本进行预测能够获得预测值。不断重复训练和预测,就能获得一系列预测值,根据样本和这些预测值计算出方差和误差,就能够帮助咱们考察该特定模型的预测偏差的指望值,也就能衡量该特定模型的性能。对比多个特定模型的偏差的指望值,能够帮助咱们选择合适的模型。图片

进一步理解偏差指望值

再看一个更接近实际的例子,来自 Bias-Variance in Machine Learning

咱们设置真实模型 $f(x) = x + 2sin(1.5x)$,函数图像以下图曲线所示。
样本值 y 就在真实值的基础上叠加一个随机噪音 N(0, 0.2)。

图2 模型及样本

如今咱们用线性函数来构建模型,训练样原本自随机采集的一组 y,通过屡次重复,能够获得一系列具体的线性模型,以下图中那一组汇集在一块儿的黑色直线所示,其中间有一条红色线是这一组线性函数的平均(指望值)。这就是特定模型(线性函数)在一样条件下(每次取20个样本点)重复屡次(获得50个线性函数)。

根据生成的50个具体的线性函数来考察该线性模型的预测性能,选取一个样本点,好比选择 x=5 时(下图中红色竖线位置),真实值 f(x) = 6.876,样本 $y \approx 6.876$,y 与 f(x) 的误差体如今图片右下方的噪音(noise) 部分。红色线性函数在 x=5 位置的值是这50个线性函数在该位置的指望值,黑色直线在 x=5 位置的一系列值的分布则反映了它们的方差(Variance)。50个预测的指望值与真实值 f(x) 之间的距离体现了误差(Bias)。(参考下图右下部分的 variance 和 bias)。

图3 误差、方差计算

总之,在机器学习中考察 误差 和 方差,最重要的是要在不一样数据集上训练出一组特定模型,这些模型对一个测试样本进行预测,考察这一组预测值的方差和误差。

偏差的指望值公式推导

偏差的指望值公式为何能够分解为 噪音、误差和方差,能够从数学上推导得来。先准备几个推导中须要用到的公式,为了方便,咱们简化符号,记做
$$f = f(x) \
hat{f} = hat{f}(x)$$

  1. 方差的定义和计算公式

$$Var[X] = E[X^2] - (E[X])^2$$
即 随机变量X的方差 = X平方的指望 - X指望的平方(参考 维基百科-方差),移项后获得
$$E[X^2] = Var[X] + (E[X])^2 \qquad(1)$$

  1. 测试样本y的指望值

由于真实值$f$是一个肯定的值,因此
$$E[f] = f$$
另外根据上文测试样本值和噪音的定义
$$y=f+varepsilon \
E[varepsilon]=0 \
Var[varepsilon] = sigma^2$$
因此$E[y] = E[f+\varepsilon] = E[f] = f$,即
$$E[y] = f \qquad(2)$$

  1. 测试样本y的方差

$$ Var[y] = E[(y - E[y])^2] = E[(y-f)^2] \\ = E[(f+\varepsilon-f)^2] = E[\varepsilon^2] \\ = Var[\varepsilon] + (E[\varepsilon])^2 = \sigma^2 $$


$$Var[y] = \sigma^2 \qquad(3)$$

  1. 样本噪音与预测值无关

由于 $\varepsilon$ 与 $\hat{f}$ 不相关,因此
$$E[\varepsilon\hat{f}] = E[\varepsilon]E[\hat{f}] \qquad(4) $$
(参考维基百科-指望值)

  1. 偏差的指望

公式推导以下

$$ E[(y-\hat{f})^2] = E[y^2 + \hat{f}^2 - 2y\hat{f}] \\ = E[y^2] + E[\hat{f}^2] - E[2y\hat{f}] \\ = \Big(Var[y] + (E[y]))^2 \Big) + \Big(Var[\hat{f}] + (E[\hat{f}])^2 \Big) - E[2(f+\varepsilon) \hat{f}] \\ = Var[y] + Var[\hat{f}] + (E[y])^2 + (E[\hat{f}])^2 - E[2f\hat{f} +2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - E[2f\hat{f}] -E[2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] -2E[\varepsilon]E[\hat{f}] \\ = Var[y] + Var[\hat{f}] + \Big(f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] \Big) \\ = Var[y] + Var[\hat{f}] + (f - E[\hat{f}])^2 \\ = \sigma^2 + Var[\hat{f}] + (Bias[\hat{f}])^2 $$

最后获得的三个项分别是:噪音的方差、模型预测值的方差、预测值相对真实值的误差的平方。

误差 - 方差的选择

理想中,咱们但愿获得一个误差和方差都很小的模型(下图左上),但实际上每每很困难。


选择相对较好的模型的顺序:方差小,误差小 > 方差小,误差大 > 方差大,误差小 > 方差大,误差大。
方差小,误差大 之因此在实际中排位相对靠前,是由于它比较稳定。不少时候实际中没法得到很是全面的数据集,那么,若是一个模型在可得到的样本上有较小的方差,说明它对不一样数据集的敏感度不高,能够指望它对新数据集的预测效果比较稳定。

选择假设集合

不少时候,机器学习所面临的问题,咱们事先并不确切的知道要拟合的是一个怎样形式的函数,是几回多项式,是几层神经网络,选择样本的哪些特征,等等,都缺少先验的知识来帮助咱们选择。咱们在一个基本上无穷大的假设(模型)集合中,凭借有限的经验进行尝试和选择。

机器学习有多种算法,以及每种算法中常常又能够选择不一样的结构和超参数。它们所覆盖的假设集合有不一样的大小。因此,选择一种算法(包括其结构和超参数),就是选择(限定)了一个假设集合。咱们指望真实模型存在于咱们所选定的假设集合范围内,而且该假设集合越小越好。

下面两幅图粗略表现了不一样假设集合的关系

不一样的假设集合

正则化项对假设集合的影响

咱们思考一下监督学习的整个流程,其实就是一个不断缩小假设集合的过程。从大的方面看能够分为两个步骤。

  1. 选择一个假设集合,包括模型及相关结构、超参数等。
  2. 使用样本数据进行训练,使该模型尽可能拟合样本,就是从上面选定的假设集合中找到一个特定的假设(模型)。

上面第一个步骤中,咱们能够选择一些不一样的假设集合,而后经过考察它们的误差方差,对各假设集合的性能进行评估。好比多项式的次数,上图假设真实模型是一个二次多项式,那么线性函数集合中的模型会欠拟合(方差低,误差过高),高次多项式集合中的模型容易过拟合(方差过高,误差低),二项式集合中的模型可以有较好的折中(方差和误差都相对较低),整体偏差最小。

误差 - 方差权衡

下面几个案例来自 Andrew Ng 的公开课《Machine Learning》。

  1. 多项式回归

多项式回归模型,咱们能够选择不一样的多项式的次数,对模型的影响以下。

多项式次数对模型误差方差的影响

多项式次数 模型复杂度 方差 误差 过/欠拟合
欠拟合
适度
过拟合

多项式次数对训练偏差/测试偏差的影响

多项式次数 模型复杂度 训练偏差 测试偏差
  1. 正则化项

添加正则化项(Regularization)至关于对模型参数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题,选择不一样的 正则化项权重λ 对模型的影响以下。

正则化项对模型误差方差的影响

正则化项权重λ 模型复杂度 方差 误差 过/欠拟合
欠拟合
适度
过拟合

正则化项对训练偏差/测试偏差的影响

正则化项权重λ 模型复杂度 训练偏差 测试偏差
  1. 样本数量

通常来讲,咱们但愿样本数量越多越好。随着样本数量增长,训练偏差会逐渐增加,测试偏差会逐渐下降。

样本数量对训练偏差/测试偏差的影响

模型方差较高时,增长样本会有帮助

模型误差较高时,增长样本帮助不大

  1. 神经网络

神经网络结构

神经网络结构 模型复杂度 方差 误差 过/欠拟合
欠拟合
适度
过拟合

K-Fold 交叉验证

计算误差、方差能够帮助评估不一样的假设集合,不过它须要较多的样本,以及重复屡次拟合模型,须要比较多的数据和计算资源(参考上面图3)。

实际中,比较经常使用的方法是K-Fold交叉验证。它与标准的误差、方差计算过程不太同样。简单的说,就是将训练样本分红k份,每次取其中一份做为验证集,另外 k-1 份做训练集。这样进行 k 次训练获得 k 个模型。这 k 个模型对各自的验证集进行预测,获得 k 个评估值(能够是偏差、准确率,或按某种规则计算的得分等等)。注意到每一个样本参与了 k-1 个模型的训练(致使模型之间存在关联),每一个样本有一次被用做测试(没有用另外的从未见过的测试集数据),因此这与标准的计算过程是不同的。

不过,K-Fold依然是颇有价值的模型性能评估。能够直接针对这 k 个模型的评估值(偏差、准确率,或按某种规则计算的得分等等)进行分析,取其平都可以体现该模型的预测准确性。对这 k 个值,好比k个偏差值,计算方差,能够反应该模型的预测偏差的离散程度,即后续用于未见过的样本数据时,模型的预测准确性是否稳定。

参考

维基百科 - Bias–variance tradeoff
Bias-Variance in Machine Learning
维基百科 - 方差
维基百科 - 指望值《Pattern Recognition and Machine Learning》之 3.2. The Bias-Variance Decomposition

相关文章
相关标签/搜索