在监督学习中,已知样本 $(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)]$函数
即:偏差的指望值 = 噪音的方差 + 模型预测值的方差 + 预测值相对真实值的误差的平方
先看一个图比较直观。性能
使用特定模型对一个测试样本进行预测,就像打靶同样。学习
靶心(红点)是测试样本的真实值,测试样本的y(橙色点)是真实值加上噪音,特定模型重复屡次训练会获得多个具体的模型,每个具体模型对测试样本进行一次预测,就在靶上打出一个预测值(图上蓝色的点)。全部预测值的平均就是预测值的指望(较大的浅蓝色点),浅蓝色的圆圈表示预测值的离散程度,即预测值的方差。测试
因此,特定模型的预测值 与 真实值 的偏差的 指望值,分解为上面公式中的三个部分,对应到图上的三条橙色线段:预测值的误差、预测值的方差、样本噪音。spa
回顾一下,指望值的含义是指在一样的条件下重复屡次随机试验,获得的全部可能状态的平均结果(更详细的定义参考维基百科-指望值)。对于机器学习来讲,这种实验就是咱们选择一种算法(并选定超参数),以及设置一个固定的训练集大小,这就是一样的条件,也就是上文所说的特定的模型。而后每次训练时从样本空间中选择一批样本做为训练集,但每次都随机抽取不一样的样本,这样重复进行屡次训练。每次训练会获得一个具体的模型,每一个具体模型对同一个未见过的样本进行预测能够获得预测值。不断重复训练和预测,就能获得一系列预测值,根据样本和这些预测值计算出方差和误差,就能够帮助咱们考察该特定模型的预测偏差的指望值,也就能衡量该特定模型的性能。对比多个特定模型的偏差的指望值,能够帮助咱们选择合适的模型。图片
再看一个更接近实际的例子,来自 Bias-Variance in Machine Learning
咱们设置真实模型 $f(x) = x + 2sin(1.5x)$,函数图像以下图曲线所示。
样本值 y 就在真实值的基础上叠加一个随机噪音 N(0, 0.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)。
总之,在机器学习中考察 误差 和 方差,最重要的是要在不一样数据集上训练出一组特定模型,这些模型对一个测试样本进行预测,考察这一组预测值的方差和误差。
偏差的指望值公式为何能够分解为 噪音、误差和方差,能够从数学上推导得来。先准备几个推导中须要用到的公式,为了方便,咱们简化符号,记做
$$f = f(x) \
hat{f} = hat{f}(x)$$
$$Var[X] = E[X^2] - (E[X])^2$$
即 随机变量X的方差 = X平方的指望 - X指望的平方(参考 维基百科-方差),移项后获得
$$E[X^2] = Var[X] + (E[X])^2 \qquad(1)$$
由于真实值$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)$$
$$ 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)$$
由于 $\varepsilon$ 与 $\hat{f}$ 不相关,因此
$$E[\varepsilon\hat{f}] = E[\varepsilon]E[\hat{f}] \qquad(4) $$
(参考维基百科-指望值)
公式推导以下
$$ 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 $$
最后获得的三个项分别是:噪音的方差、模型预测值的方差、预测值相对真实值的误差的平方。
理想中,咱们但愿获得一个误差和方差都很小的模型(下图左上),但实际上每每很困难。
选择相对较好的模型的顺序:方差小,误差小 > 方差小,误差大 > 方差大,误差小 > 方差大,误差大。
方差小,误差大 之因此在实际中排位相对靠前,是由于它比较稳定。不少时候实际中没法得到很是全面的数据集,那么,若是一个模型在可得到的样本上有较小的方差,说明它对不一样数据集的敏感度不高,能够指望它对新数据集的预测效果比较稳定。
不少时候,机器学习所面临的问题,咱们事先并不确切的知道要拟合的是一个怎样形式的函数,是几回多项式,是几层神经网络,选择样本的哪些特征,等等,都缺少先验的知识来帮助咱们选择。咱们在一个基本上无穷大的假设(模型)集合中,凭借有限的经验进行尝试和选择。
机器学习有多种算法,以及每种算法中常常又能够选择不一样的结构和超参数。它们所覆盖的假设集合有不一样的大小。因此,选择一种算法(包括其结构和超参数),就是选择(限定)了一个假设集合。咱们指望真实模型存在于咱们所选定的假设集合范围内,而且该假设集合越小越好。
下面两幅图粗略表现了不一样假设集合的关系
咱们思考一下监督学习的整个流程,其实就是一个不断缩小假设集合的过程。从大的方面看能够分为两个步骤。
上面第一个步骤中,咱们能够选择一些不一样的假设集合,而后经过考察它们的误差方差,对各假设集合的性能进行评估。好比多项式的次数,上图假设真实模型是一个二次多项式,那么线性函数集合中的模型会欠拟合(方差低,误差过高),高次多项式集合中的模型容易过拟合(方差过高,误差低),二项式集合中的模型可以有较好的折中(方差和误差都相对较低),整体偏差最小。
下面几个案例来自 Andrew Ng 的公开课《Machine Learning》。
多项式回归模型,咱们能够选择不一样的多项式的次数,对模型的影响以下。
多项式次数 | 模型复杂度 | 方差 | 误差 | 过/欠拟合 |
---|---|---|---|---|
低 | 低 | 低 | 高 | 欠拟合 |
中 | 中 | 中 | 中 | 适度 |
高 | 高 | 高 | 低 | 过拟合 |
多项式次数 | 模型复杂度 | 训练偏差 | 测试偏差 |
---|---|---|---|
低 | 低 | 高 | 高 |
中 | 中 | 中 | 低 |
高 | 高 | 低 | 高 |
添加正则化项(Regularization)至关于对模型参数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题,选择不一样的 正则化项权重λ 对模型的影响以下。
正则化项权重λ | 模型复杂度 | 方差 | 误差 | 过/欠拟合 |
---|---|---|---|---|
大 | 低 | 低 | 高 | 欠拟合 |
中 | 中 | 中 | 中 | 适度 |
小 | 高 | 高 | 低 | 过拟合 |
正则化项权重λ | 模型复杂度 | 训练偏差 | 测试偏差 |
---|---|---|---|
大 | 低 | 高 | 高 |
中 | 中 | 中 | 低 |
小 | 高 | 低 | 高 |
通常来讲,咱们但愿样本数量越多越好。随着样本数量增长,训练偏差会逐渐增加,测试偏差会逐渐下降。
神经网络结构 | 模型复杂度 | 方差 | 误差 | 过/欠拟合 |
---|---|---|---|---|
小 | 低 | 低 | 高 | 欠拟合 |
中 | 中 | 中 | 中 | 适度 |
大 | 高 | 高 | 低 | 过拟合 |
计算误差、方差能够帮助评估不一样的假设集合,不过它须要较多的样本,以及重复屡次拟合模型,须要比较多的数据和计算资源(参考上面图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