偏差与方差

偏差方差看似很简单,但真要彻底地说明白,却有一定难度。比如,为什么KNN算法在增大k时,偏差会变大,但RF增大树的数目时偏差却保持不变,GBDT在增大树的数目时偏差却又能变小。

1 深入理解偏差与方差

1.1 引子

假设我们有一个回归问题,有训练数据 D D D,然后选择了一个模型 M M M,并用数据 D D D M M M训练出来,记作 M t M_t Mt,这里我们故意把模型 M M M与训练出的模型 M t M_t Mt区分开,是为了后面叙述时概念上的清晰。现在,我们怎么评价这个模型的好坏呢?
你可能会不屑地说,这么简单的问题还用问吗,当然是用test集来测试啊。
哈哈!你上当了!
因为我并没有说明是评价模型 M M M的好坏还是模型 M t M_t Mt的好坏!这二者有什么区别呢?
我们都知道,模型M代表的是一个函数空间,比如模型 y = w x + b y=wx+b y=wx+b,若 x , y x,y x,y都是实数, w , b w,b w,b为实数参数,则该模型就代表了平面上所有的直线,这所有的直线就是一个函数空间。
同理, y = a x 2 + b x + c y=ax^2+bx+c y=ax2+bx+c代表的就是平面上所有的二次曲线,所有的二次曲线组成一个函数空间。当然,所有的直线此时也是二次曲线的特例。
回到上面的问题, M t M_t Mt实际上是用数据 D D D找到的 M M M代表的函数空间中的一个具体的函数。这话有点绕,不过还是不难理解的。
M t M_t Mt的表现好坏不能完整地代表 M M M的好坏。

1.2 什么是M的好坏?

以上面的一次函数和二次函数为例,当我们说二次函数比一次函数更好时,我们潜在的含义是说,对于某个我们正要解决的机器学习问题来说,二次函数总体上比一次函数表现更好,我们是在函数空间的层次上来比较的。
而且,还是针对一个具体的机器学习问题来比较的,因为对于不同的机器学习问题,二者哪个更好是不一定的。
Note:在下文中,可以把机器学习问题默想成回归问题,这样便于理解。
这里再次强调,当我们说模型好坏时,隐含有两个含义:

  • 1,比较的是整个函数空间
  • 2,针对某个具体机器学习问题比较

1.3 怎么比较M的好坏?

我们可以这样做:
1,找一条不变的万能测试样本
在这个具体的机器学习问题中找一条样本 x x x,它的标签为 y y y。在后续的所有训练中都用这条样本做测试集,永远不用作训练集。
2,在测试样本上观察 M t M_t Mt的表现,假设 M t M_t Mt在样本 x x x上的预测值为 y t y_t yt,则 y − y t y-y_t yyt可用来评价 M t M_t Mt的表现好坏。
3,找另外一个训练集 D 1 D_1 D1,训练出 M t 1 M_{t1} Mt1,在测试样本上测试得到 y t 1 y_{t1} yt1,进而得到误差 y − y t 1 y-y_{t1} yyt1
4,重复第3步多次,直到得到 N N N个具体的模型,和 N N N y t y_t yt N N N y − y t y-y_t yyt
5,当 N N N足够大时,我们可以这样来评测 M M M的好坏,首先看 N N N y t y_t yt的均值 y t m e a n ytmean ytmean是否等于y,其次,看N个yt相对均值 y t m e a n ytmean ytmean的方差有多大。
显然, y t m e a n = y ytmean=y ytmean=y,说明 M M M学习能力是够的,也就是说,当 N N N趋向无穷大时, N N N M t M_t Mt对x预测的均值能无限接近y。

很多人会有种错觉,感觉任何 M M M都能达到上面的效果,实际上,不是每一个 M M M都有这样的能力的,举个极端的例子,我们假设 M 1 M_1 M1的函数空间中只有一个函数,且对于任何样本的预测值都恒等于 y + 1 y+1 y+1,则无论 N N N多大,ytmean都会比y大1的。我们称 M 1 M_1 M1由于学习能力不够所造成的对x的预测误差叫做偏差。
其次,N个 y t y_t yt相对均值ytmean的方差有多大也能从另一个方面揭示M的好坏,举个例子,假设我们有 M 1 , M 2 M_1,M_2 M1,M2两个模型,当N无穷大时,都能使得ytmean等于y。但是 M 1 M_1 M1的预测值是这样分布的(下面圆点代表一个个的预测值)
…ytmean…
M2的预测值是这样分布的
. . . .ytmean. . . .
显然,我们会觉得M1比M2更好。你可能会想,N足够大时,二者都能准确地均值到y,这就够了,没必要再比较它们的预测值相对均值的方差。
这样的观点错误的地方是:实践中,我们并不能抽样出D1,D2,D3…DN个训练集,往往只有一份训练集D,这种情况下,显然,用M1比用M2更有把握得到更小的误差

1.4 举例子来说明偏差方差

假设模型是一个射击学习者,D1,D2直到DN就是N个独立的训练计划。
如果一个学习者是正常人,另外一个人眼睛斜视,则可以想见,斜视者无论参加多少训练计划,都不会打中靶心,问题不在训练计划够不够好,而在他的先天缺陷。这就是模型偏差产生的原因,学习能力不够(即模型太简单,学习能力弱)。正常人参加N个训练计划后,虽然也不能保证打中靶心,但随着N的增大,会越来越接近靶心。
假设还有一个超级学习者,他的学习能力特别强,参加训练计划D1时,他不仅学会了瞄准靶心,还敏感地捕捉到了训练时的风速,光线,并据此调整了瞄准的方向,此时,他的训练成绩会很好。(模型复杂,学习能力强)
**但是,当参加测试时的光线,风速肯定与他训练时是不一样的,他仍然按照训练时学来的瞄准方法去打靶,肯定是打不好。这样产生的误差就是方差。**这叫做聪明反被聪明误。

总结一下:学习能力不行造成的误差是偏差,学习能力太强造成的误差是方差。

1.5 权衡偏差方差

当我们只有一份训练数据D时,我们选的M若太强,好比射手考虑太多风速,光线等因素,学出来的模型Mt在测试样本上表现肯定不好,若选择的M太挫,比如是斜视,也无论如何在测试的样本上表现也不会好。所以,最好的M就是学习能力刚刚好的射手,它能够刚刚好学习到瞄准的基本办法,又不会画蛇添足地学习太多细枝末节的东西。

1.6 回答本文最初的问题

  • 对于KNN算法,k值越大,表示模型的学习能力越弱,因为k越大,它越倾向于从“面”上考虑做出判断,而不是具体地考虑一个样本 近身的情况来做出判断,所以,它的偏差会越来越大。
  • 对于RF,我们实际上是部分实现了多次训练取均值的效果,每次训练得到的树都是一个很强的学习者,每一个的方差都比较大,但综合起来就会比较小。好比一个很强的学习者学习时,刮着西风,它会据此调整自己的瞄准方法,另一个很强的学习者学习时刮着东风,(西风、东风可以理解为不同训练集中的噪声)它也会据此调整自己的瞄准方法,在测试样本时,一个误差向西,一个误差向东,刚好起到互相抵消的作用,所以方差会比较小。但是由于每棵树的偏差都差不多,所以,我们取平均时,偏差不会怎么变化。
    为什么说是部分实现了多次训练取均值的效果而不是全部呢?因为我们在训练各棵树时,是通过抽样样本集来实现多次训练的,不同的训练集中不可避免地会有重合的情况,此时,就不能认为是独立的多次训练了,各个训练得到的树之间的方差会产生一定的相关性,训练集中重合的样本越多,则两棵树之间的方差的相关性越强,就越难达成方差互相抵消的效果。
  • 对于GBDT,N棵树之间根本就不是一种多次训练取均值的关系,而是N棵树组成了相关关联,层层递进的超级学习者,可想而知,它的方差一定是比较大的。但由于它的学习能力比较强,所以,它的偏差是很小的,而且树的棵树越多,学习能力就越强,偏差就越小。也就是说,只要学习次数够多,预测的均值会无限接近于目标。简单讲就是GBDT的N棵树实际上是一个有机关联的模型,不能认为是N个模型。

2 偏差与方差

2.1 定义

泛化误差可分解为偏差、方差与噪声之和,即 E ( f ; D ) = bias ⁡ 2 ( x ) + var ⁡ ( x ) + ε 2 E ( f ; D ) = \operatorname { bias } ^ { 2 } ( x ) + \operatorname { var } ( x ) + \varepsilon ^ { 2 } E(f;D)=bias2(x)+var(x)+ε2

  • 偏差度量了学习算法期望预测与真实结果的偏离程度;即刻画了学习算法本身的拟合能力;(期望预测:也就是针对 不同数据集的预测值取其期望)
  • 方差度量了同样大小训练集的变动所导致的学习性能的变化;即刻画了数据扰动所造成的影响,描述的是训练结果的分散程度,描述模型对于给定值的输出稳定性。
  • 噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界;即刻画了学习问题本身的难度。定义:噪声为真实标记与数据集中的实际标记间的偏差:

泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务为了取得好的泛化性能,需要使偏差小(充分拟合数据)而且方差较小(减少数据扰动产生的影响),噪声不可控。

2.2 偏差

Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度。Bias是受算法模型的复杂度决定的,假设下图的红线是我们给出的模型,蓝色的点就是样本,这是一个最简单的线性模型,这个时候Bias就可以通过这些蓝色的点到红线沿Y轴的垂直距离来反映(即真实值与模型输出的误差),距离越大说明Bias越大,也说明拟合度更低。
在这里插入图片描述

当我们增加模型的复杂度,刚刚是一个线性的模型,现在是一个四次方的模型,可以明显看出点到模型的沿Y轴的垂直距离更少了,即拟合度更高了,所以Bias也更低了。所以这样我们就可以很容易理解Bias和模型复杂度之间的关系了。
在这里插入图片描述

给出结论:当模型复杂度上升时,Bias减小。当模型复杂度降低时,Bias增加
这里就涉及到了欠拟合(unfitting)和过度拟合(overFitting)的问题了。接下来让我们看看Variance(方差)的定义。

2.3 方差

Variance(方差)反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。在概率论和统计学中方差是衡量随机变量或一组数据时离散程度的度量。下图中红线就是每一组样本对应的模型,想象一下真实数据有无限多,我们以10个样本为一组,选取了500个样本组,然后在线性模型下,针对这500个样本组,我们会有500组不同的b和w值组成的线性模型,最后构成左图的样子。当我们的模型升级成5次方的复杂程度时,针对这500个样本组,我们会有右边这张图显示的500组不同的参数构成的模型。可以看出,明显右边的图比左边的图更离散一些,试想一个极端情况,当模型就是一个常数时,这个时候模型复杂度最低,同时Variance也为0。所以我们可以得出结论:当模型复杂度低时,Variance更低,当模型复杂度高时,Variance更高。
在这里插入图片描述

2.4 小结

  • 偏差(bias):偏差衡量了模型的期望预测与实际值之间的偏离关系。通常在深度学习中,我们每一次训练迭代出来的新模型,都会拿训练数据进行预测,偏差就反应在预测值与实际值匹配度上,比如通常在keras运行中看到的准确度为96%,则说明是低偏差;反之,如果准确度只有70%,则说明是高偏差。
  • 方差(variance):方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况)。从数学角度看,可以理解为每个预测值与预测均值差的平方和的再求平均数。通常在深度学习训练中,初始阶段模型复杂度不高,为低方差;随着训练量加大,模型逐步拟合训练数据,复杂度开始变高,此时方差会逐渐变高。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZyrGjCO-1605930644534)(en-resource://database/658:1)]@w=400
    这是一张常见的靶心图。可以想象红色靶心表示为实际值,蓝色点集为预测值。

2.5 偏差-方差窘境

为了得到泛化性能好的模型,我们需要使偏差较小,即能充分拟合数据,并且使方差小,使数据扰动产生的影响小。但是偏差和方差在一定程度上是有冲突的,这称为偏差-方差窘境 (bias-variance dilemma).
给定一个学习任务, 在训练初期, 由于训练不足, 学习器的拟合能力不够强, 偏差比较大, 也是由于拟合能力不强, 数据集的扰动也无法使学习器产生显著变化, 也就是欠拟合的情况;
随着训练程度的加深, 学习器的拟合能力逐渐增强, 训练数据的扰动也能够渐渐被学习器学到;
充分训练后, 学习器的拟合能力已非常强, 训练数据的轻微扰动都会导致学习器发生显著变化, 当训练数据自身的、非全局的特性被学习器学到了, 则将发生过拟合.


下图给出了在模型训练不足时,拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导泛化误差,此时称为欠拟合现象。当随着训练程度加深,模型的拟合能力增强,训练数据的扰动慢慢使得方差主导泛化误差。当训练充足时,模型的拟合能力非常强,数据轻微变化都能导致模型发生变化,如果过分学习训练数据的特点,则会发生过拟合。

  • 针对欠拟合,我们提出集成学习的概念并且对于模型可以控制训练程度,比如神经网络加多隐层,或者决策树增加树深。
    增加模型的迭代次数;更换描述能力更强的模型;生成更多特征供训练使用;降低正则化水平。
  • 针对过拟合,我们需要降低模型的复杂度,提出了正则化惩罚项。
    扩增训练集;减少训练使用的特征的数量;提高正则化水平。
    随着模型复杂度的提升, 偏差逐渐减小, 方差逐渐增大. 最佳的模型复杂度是在 Total Error 最小的时候, 该点导数为0. 由于 Err=variance+bias+noise, 所以在拐点处:
    d B i a s d C o m p l e x i t y = − d V a r i a n c e d C o m p l e x i t y \frac { dBias } {dComplexity}= - \frac { dVariance } {dComplexity} dComplexitydBias=dComplexitydVariance
    给出了寻找最优平衡点的数学描述。若模型复杂度大于平衡点,则模型的方差会偏高,模型倾向于过拟合;若模型复杂度小于平衡点,则模型的偏差会偏高,模型倾向于过拟合。
    在这里插入图片描述

3 回顾

什么是偏差-方差分解?为什么提出这个概念?

  • 什么是偏差?什么是方差?
  • 什么是偏差-方差窘境?应对措施?

3.1 偏差-方差分解的提出

我们知道训练往往是为了得到泛化性能好的模型,前提假设是训练数据集是实际数据的无偏采样估计。但实际上这个假设一般不成立,针对这种情况我们会使用训练集训练,测试集测试其性能。对于模型估计出泛化性能,我们还希望了解它为什么具有这样的性能。这里所说的偏差-方差分解就是一种解释模型泛化性能的一种工具。它是对模型的期望泛化错误率进行拆解

3.2 偏差-方差分解推导

学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise)。
在这里插入图片描述

样本可能出现噪声,使得收集到的数据样本中的有的类别与实际真实类别不相符。对测试样本 x,另 y D y_D yD 为 x 在数据集中的标记,y 为真实标记, f ( x ; D ) f(x;D) f(x;D) 为训练集D上学得模型 f 在 x 上的预测输出。接下来以回归任务为例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

画红线部分是分解后由这三部分方差、偏差、噪声组成。偏差那部分因为和D无关,所以去掉了ED。画蓝线部分用了数学技巧,并且有两项等于0约简。
在这里插入图片描述

参考:https://www.yuque.com/liwenju/kadtqt/tpm3ex

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值