Processing math: 100%
0%

【图解例说机器学习】模型选择:偏差与方差 (Bias vs. Variance)

机器学习的过程大致分为三步:1)模型假设,比如我们假设模型是线性回归,还是多项式回归,以及其阶数的选择;2)误差函数定义,比如我们假设误差函数是均方误差,还是交叉熵;3)参数求解,比如使用正规方程,还是梯度下降等。

这篇文章主要讨论模型的选择问题,下面以多项式回归为例进行说明


一个例子:多项式回归中的阶数选择

在前面的文章【图解例说机器学习】线性回归中,我们定义了广义的线性回归模型,其表达式为:

ˆy=ω0+Mj=1ωjϕj(x)=ω0+wTϕ(x)

D=1,ϕj(x)=xj时,公式(1)可以表示为:

ˆy=ω0+ω1x+ω2x2++ωMxM

此时,线性回归就变成了M阶多项式回归。

M及误差函数给定时,我们就可以通过梯度下降法求解得到w。但是,M的选择对预测的结果影响较大。从公式可以看出M越大,模型越复杂,其函数表达式集合包含了M取值较小的情况。从这种角度来看,M取值越大越好。但是,一般来说训练数据较少,当M取值较大时,复杂的模型会过度学习训练数据间的关系,导致其泛化能力较差。


这里我们通过一个实例来形象化M对算法的影响。这里我们假设实际的函数表达式为

y=sin(2πx)+ϵ

其中,ϵ是一个高斯误差值。通过公式(3)我们产生10个样例点(xi,yi)。在给定不同M值时,我们使用正规方程法或梯度下降法可以得到最佳的函数表达式。在这里,我们采用正规方程法 (见【图解例说机器学习】线性回归中公式(12)),得到最优参数:

ˉw=[ˉϕT(X)ˉϕ(X)]1ˉϕT(X)y

其中,这里的ˉϕT(X)根据公式(2)和【图解例说机器学习】线性回归中的公式(12)可得

ˉϕ(X)={ϕ0(x1)ϕ1(x1)ϕM(x1)ϕ0(x2)ϕ1(x2)ϕM(x2)ϕ0(xN)ϕ1(xN)ϕM(xN)}={1x11xM11x12xM21xNxMN}

利用正规方程法,即公式(5),我们可以得到如下M取不同值时的函数表达式:

图1
图2
图3
图4

图1-图4表明,随着M的增大,函数图像对训练样本的拟合越来越好,即训练误差越来越小。但是很明显图3的图像与原始的正弦函数图像最相似,即预测误差最小。 下表给出了图1-图4对应的最优的w 的取值:

w M=0 M=1 M=3 M=9
ω0 0.0379 0.8309 0.2655 6.5887102
ω1 1.9631 13.1817 1.9234101
ω2 38.3154 5.2109102
ω3 25.9214 3.8321103
ω4 1.3080104
ω5 2.1917104
ω6 1.2754104
ω7 1.1027104
ω8 1.8864104
ω9 7.2725103

机器学习的目的就是选取最优的M值,最小化预测误差。但是实际值中,预测误差是在算法之后才能得到的(不然的话,预测有什么用),我们都是通过验证误差来模拟预测误差。也就是说,我们一般把已经标记的数据集分为训练集和验证集,通过训练集来得到给定不同M时最小验证误差,从而选择最佳的M。图5和图6给出了M取值不同情况下的训练误差和验证误差:

图5 10个训练样例
图6 100个训练样例

在图5和图6中,训练样例和验证样例都是由公式(3)给出,但是图5只有10个训练样例,图6有100个训练样例,验证样例都为100。从图中可知,训练误差都是随M增加而下降。图5中,当训练样例为10个时,此时我们可以选择M=3或者M=6得到较小的验证误差。当训练样例足够多时,如图6所示,此时M越大,验证误差越好。

根据上述讨论,我们可以总结如下:

当训练样例较少时,我们需要选择合适的模型的复杂度,即这里的M值;当训练样例较多时,我们选择的模型越复杂越好,即选择较大的M值。


防止过拟合

当训练数据较少,而模型较为复杂时,容易出现过拟合。如在图1-图6中,只有10 个训练数据,当M=9时,误差变大,这时出现过拟合现象。因此,我们可以通过增加训练数据和正则化来防止过拟合。

增加训练数据

图7和图8给出了,在M=9情况下,不同训练样例对函数表达式的模拟情况。可见,当训练样例较多时,得到的模型与原始模型(正选函数)更接近。

图7 50个训练样例
图8 100个训练样例
正则化

从上面的表格中可以看出,当过拟合时(M=9),输入变量x的系数w的系数变得特别大.此时,当x变动十分小时,输出ˆy也变得很大,这就导致了预测时误差变大。此时,我们可以对误差函数加入惩罚项,来限制w的取值:

E=Ni=1(ˆyiyi)2+λ2|w|2

公式(6)中的λ可以自己调节来选取合适的值。

同样地,我们可以使用正规方程来使得新的误差函数(6)最小。此时的解析解可以表示为:

ˉw=[ˉϕT(X)ˉϕ(X)+λI0]1ˉϕT(X)y

其中I0是一个(M+1)×(M+1)的对角矩阵,且第一个对角元素为0(因为我们一般在正则项中不考虑ω0,见P10, PRML),其他对角元素为1

注意:公式(7)可以对E求导,使其为零得到,这里就不详细推导。

图9
图10

图9和图10给出了当测试样例为10,λ取不同值的函数拟合情况。可以看出,λ越小,对训练样例的拟合越好,即训练误差越小,但是此时图像与原始的正弦函数差别较大。当λ=0时,即不考虑正则化,此时对应的是图4。图9和图10说明,我们可以通过加入正则项来避免过拟合的情况。


偏差与方差

理论推导

机器学习的目的就是最小化误差。一般采用的误差,如线性回归的平方和误差,逻辑回归的交叉熵误差。这些误差都是假定训练样例的权重一样,但是实际中,每个样例出现的概率是不同的。因此,我们这里定义一个平均误差函数:

E[E]=E(ˆy,y)p(x,y)dxdy

这里的E(ˆy,y)就是我们常用的误差函数,如下:

E(ˆy,y)=(ˆyiyi)2
E(ˆy,y)=[yilogˆyi+(1yi)log(1ˆyi)]

可见,公式(8)是一个广义的误差函数。这里我们平方和误差函数为例,将公式(9)带入公式(8)中,我们有

E[E]=(ˆyy)2p(x,y)dxdy

通过求导,令导数为0,我们可以得到最佳的函数表达式:

E(E)ˆy=2(ˆyy)p(x,y)dy=0
ˆy=yp(x,y)dyp(x)=yp(yx)dy=Ey[yx]=y

根据公式(13)我们可以重写(11)

E(E)=(ˆyy+yy)2p(x,y)dxdy=[(ˆyy)2+2(ˆyy)(yy)+(yy)2]dxdy=(ˆyy)2p(x)dx+(yy)2p(x)dx

公式(14)中的第二项与我们要求的函数表达式ˆy没有关系。因此,当我们得到最优的函数表达式(ˆy=y),即公式第一项为0,第二项即为我们得到的最小误差值。然而,由于训练数据有限(一般假定训练数据集为D=xii=1,2,,N),得到最优解(ˆy=y=E(yx))一般是比较困难的。但我们有充足的训练数据x, 我们理论上可以得到条件期望E(yx)=yp(yx)dy, 也就是最优的函数表达式ˆy

真实的yx的关系由p(x,y)决定,假定由p(x,y)产生很多不同训练数据集 D 。对于每一个数据集D, 我们都能通过机器学习算法得到一个函数表达式$\hat y{\mathcal D}\hat y{\mathcal D}\hat y_{\mathcal D}$在所以训练集上的平均误差。那么公式(14)可以写成:

E(E)=ED[(ˆyy)2]p(x)dx+(yy)2p(x)dx={(ED[ˆyD]y)2+ED[(ˆyDED[ˆyD])2]}p(x)dx+(yy)2p(x)dx=(ED[ˆyD]y)2p(x)dx(bias)2+ED[(ˆyDED[ˆyD])2]p(x)dxvariance+(yy)2p(x)dxnoise

可见,误差由bias (偏差),variance (方差),和noise (噪声)三部分组成。其中,bias和variance都和我们的模型选择$\hat y{\mathcal D}noise\int(\mathbb E{\mathcal D}[y\mid\mathrm x]-y)^2p(\mathrm x)d\mathrm x,y$的方差。对于公式(15),我们可以计算各部分值如下:

  • $\mathbb E{\mathcal D}[\hat y{\mathcal D}]\hat yL$个数据集上求平均值,那么我们有:

    ED[ˆyD(x)]=1LLl=1ˆyl(x)
  • 将公式(16)带入公式(15)中,我们有:

(bias)2=1NNi=1{ED[ˆyD(xi)]y(xi)}2
variance=1NNi=11LLl=1{ˆyl(xi)ED[ˆyD(xi)]}2

注意:在计算公式(15)的积分项p(x)dx 时,我们采用的是将所有的 x 所得到的结果加和求平均,即/N。因为这里我们假定所有训练样例都是均匀采样的。

一般来说,模型(ˆy(x))越复杂,偏差越小,方差越大。因为模型越复杂,对于我们训练样例集的每一个样例xi的拟合较好,也就是说ˆyl(xi)y(xi)比较接近,即公式(17)的值较小(偏差较小);而此时,不同训练样例集产生的ˆyl(xi)之间值存在较大波动,即公式(18)的值较大(方差较大)。换句话说,公式(17),即偏差,针对的是ˆyl(xi)与真实函数y(xi)之间的误差;而公式(18),即方差,针对的是不同数据集所得到的函数ˆyl(xi)之间的误差。


偏差与方差的折中关系

我们通过函数表达式(3)来产生L=100个训练数据集,每个数据集包含N=30个训练样例。那么此时,我们有y=sin(2πx)且此时公式(15)的第三项noise可以由ϵ的分布求出。我们假定用M=9的多项式函数(2)来作为ˆy的表达式。当正则项的系数分别为λ=103,1012时,我们可以分别得到图11-12,和图13-14:

图11
图12
图13
图14

图11和图13表示的是在这100个训练数据集下ˆy关于x 的函数图像。图12和图14表示的是在左图100条函数取平均情况下的函数图像,其中红色曲线是我们最优的函数y。左图可以反映各个函数表达式间的差别,公式(18), 即方差,右图表示的是预测函数$\mathbb E{\mathcal D}[\hat y{\mathcal D}]y^\star$的差别,公式(17),即偏差。通过图11-14,我们可以看出偏差与方差的折中关系。


经过上面的分析,我们可以看出误差主要由偏差、方差和噪声组成,并从中可以看出模型的选择(e.g.,这里M,λ的选择)对误差的本质影响,从而指导模型的选择。由公式(16)-(18)可以看出,误差的分析是建立在很多数据集上的统计平均值。但是在实际中,训练数据集很少。当我们有很多的数据集,我们可以把它们看出一个大的数据集,这样我们就可以防止过拟合现象(见图7-8)。


附录

下面我们给出图1-图14的python源代码。注意,在运行代码时,可以自行调整自变量M,N,λ等。

坚持原创技术分享,您的支持将鼓励我继续创作!