分析算法泛化性能的有效工具:偏差——方差分解

了解机器学习的同学都知道,为了检验学习算法的有效性,我们常常会通过实验估计其泛化性能。可是,在实验过程中我们不难发现,同一学习算法在不同的数据集上效果。这又是为什么呢?“偏差-方差分解”为我们提供了解释依据。

简介

在通过实验检验学习算法泛化性能的过程中,人们还往往希望了解它为什么具有这样的性能。而“偏差——方差分解”是解释算法泛化性能的一种重要工具。

“偏差——方差分解”试图对学习算法的期望错误率进行拆解。前面提到,同一个学习算法在不同数据集上的学习效果是不同的,即使这些数据集满足同一种分布。而这又是为什么呢?

数学推导

为了便于数学推导,我们假设在数据集 D D D中,测试样本为 x x x y D y_{D} yD为数据集中 x x x的标记, y y y x x x的真实标记(即数据集本身可能受噪声干扰,与真实数据有所不同),某学习算法在数据集 D D D上学得模型 f f f,模型的预测输出为 f ( x ; D ) f(x;D) f(x;D)。以回归任务为例,学习算法的期望预测输出为,

f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(x) = E_{D}[f(x;D)] fˉ(x)=ED[f(x;D)]

使用样本数相同的不同数据集产生的方差为,

v a r ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] var(x) = E_{D}[(f(x;D) - \bar{f}(x))^{2}] var(x)=ED[(f(x;D)fˉ(x))2]

噪声为,

ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^{2} = E_{D}[(y_{D} - y)^{2}] ε2=ED[(yDy)2]

期望输出与真实数据的标记差别即为偏差

b i a s 2 ( x ) = [ f ˉ ( x ) − y ] 2 bias^{2}(x) = [\bar{f}(x) - y]^{2} bias2(x)=[fˉ(x)y]2

此外,为便于讨论,我们假设噪声的数学期望为零,即 E D [ y D − y ] = 0 E_{D}[y_{D} - y] = 0 ED[yDy]=0。则通过简单的多项式拆解,我们可以对算法的期望泛化误差进行如下分解:

E ( f ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) + f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] + E D [ 2 ( f ( x ; D ) − f ˉ ( x ) ) ( f ˉ ( x ) − y D ) ] \begin{aligned} E(f;D) &= E_{D}[(f(x;D) - y_{D})^{2}] \\ &= E_{D}[(f(x;D) - \bar{f}(x) + \bar{f}(x) - y_{D})^2] \\ &= E_{D}[(f(x;D) - \bar{f}(x))^{2}] + E_{D}[(\bar{f}(x) - y_{D})^2] \\ & + E_{D}[2(f(x;D) - \bar{f}(x))(\bar{f}(x) - y_{D})] \\ \end{aligned} E(f;D)=ED[(f(x;D)yD)2]=ED[(f(x;D)fˉ(x)+fˉ(x)yD)2]=ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)yD)2]+ED[2(f(x;D)fˉ(x))(fˉ(x)yD)]

不难看出,由于 f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(x) = E_{D}[f(x;D)] fˉ(x)=ED[f(x;D)],则上式的最后一项为0,而且 v a r ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] var(x) = E_{D}[(f(x;D) - \bar{f}(x))^{2}] var(x)=ED[(f(x;D)fˉ(x))2]。于是,

E ( f ; D ) = v a r ( x ) + E D [ ( f ˉ ( x ) − y D ) 2 ] = v a r ( x ) + E D [ ( f ˉ ( x ) − y + y − y D ) 2 ] = v a r ( x ) + E D [ ( f ˉ ( x ) − y ) 2 ] + E D [ ( y − y D ) 2 ] + E D [ 2 ( f ˉ ( x ) − y ) ( y − y D ) ] \begin{aligned} E(f;D) &= var(x) + E_{D}[(\bar{f}(x) - y_{D})^2] \\ &= var(x) + E_{D}[(\bar{f}(x) - y + y - y_{D})^2] \\ &= var(x) + E_{D}[(\bar{f}(x) - y)^2] + E_{D}[(y - y_{D})^2] \\ & + E_{D}[2(\bar{f}(x) - y)(y - y_{D})] \\ \end{aligned} E(f;D)=var(x)+ED[(fˉ(x)yD)2]=var(x)+ED[(fˉ(x)y+yyD)2]=var(x)+ED[(fˉ(x)y)2]+ED[(yyD)2]+ED[2(fˉ(x)y)(yyD)]

前面提到,我们假设噪声的期望为零,即 E D [ y D − y ] = 0 E_{D}[y_{D} - y] = 0 ED[yDy]=0,则有上式的最后一项为零。而且 b i a s 2 ( x ) = [ f ˉ ( x ) − y ] 2 bias^{2}(x) = [\bar{f}(x) - y]^{2} bias2(x)=[fˉ(x)y]2, ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^{2} = E_{D}[(y_{D} - y)^{2}] ε2=ED[(yDy)2]。因此,我们可以得到,

E [ f ( x ; D ) ] = b i a s 2 ( x ) + v a r ( x ) + ε 2 E[f(x;D)] = bias^{2}(x) + var(x) + \varepsilon^{2} E[f(x;D)]=bias2(x)+var(x)+ε2

即学习算法的泛化误差可以分解为偏差,方差,噪声之和。

数学含义

上一节中,我们对“偏差——方差分解”进行了数学推导,对学习算法的泛化性能有了一定的认识。可是,偏差,方差,噪声又到底有什么含义呢?它们在学习算法的泛化性能中又各自扮演了什么样的角色呢?

回顾偏差,方差与噪声的含义:偏差度量了学习算法的的期望预测与真实标记的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的数据集的变动所导致的学习性能的变化,即刻画了数据扰动对学习性能的影响(这里的学习扰动与噪声不同);噪声度量了当前任务学习算法所能达到的期望泛化误差的下界,则刻画了学习任务本身的难度。“偏差-方差分解”表明,泛化性能是由学习算法的拟合能力,数据扰动和学习任务的自身难度所共同决定的。为了获得好的泛化性能,我们需要同时降低偏差与方差。

然而,一般来说,偏差与方差是冲突的,这称为“偏差-方差窘境”。给定学习任务,在训练的初始阶段,即训练不足时,学习算法的拟合能力不强,训练数据的数据扰动不足以使学习算法的泛化性能产生显著变化。此时,偏差主导了泛化错误率,模型处于欠拟合状态;随着训练程度的加深,学习算法的拟合能力逐渐增强,训练数据的数据扰动开始被学习算法学到,方差逐渐主导了泛化错误率;在训练程度充足时,学习算法的拟合能力已经足够强。此时,微小的数据扰动都会导致学习算法的泛化性能产生显著变化。若训练数据自身的,非全局的特性被学习算法学到,则模型将处于“过拟合”状态。即拥有较少参数的“简单”模型,可能有较大的偏差和较小的方差,而拥有较大参数的“复杂”模型则相反。下图很好地反映了这一过程(注:此图源于周志华老师的《机器学习》)。

Bias-Variance

参考文献

周志华,《机器学习》

常虹,《The Basic of Statistical Learning》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值