AdaBoost

基本思想

对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易的多,提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布,针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。

对于提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。关于第一个问题,Adaboost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样,那些没有得到正确分类的数据,由于其权值加大而受到后一轮的弱分类器的更大关注;对于第二个问题,Adaboost采取了加权多数表决的方法,具体的做法是加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,见效分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

Adaboost算法

假设给定一个二分类的训练数据集:

T={x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x2,y_2),...,(x_N,y_N)\}

在数据集中,每个样本点由实例与标记组成,实例xiXRx_i\in X\subseteq R,标记yiY{1,1}y_i\in Y\subseteq\{-1,1\},其中X、Y分别表示实例空间与标记组合。

下面让我们来看一下算法的流程(流程中会有很多疑惑,下文中会一一解释)

**输入:**训练数据集T={x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x2,y_2),...,(x_N,y_N)\},其中xiXRx_i\in X\subseteq RyiY{1,1}y_i\in Y\subseteq\{-1,1\};弱学习算法。

**输出:**最终分类器G(X)。

(1)初始化训练数据的权值分布:

D1=(w11,...,w1i,...,w1N)D_1=(w_{11},...,w_{1i},...,w_{1N})w1i=1Nw_{1i}=\frac{1}{N}i=1,2,...,Ni=1,2,...,N

(2)对m=1,2,...,Mm=1,2,...,M

  • (a)使用具有权值分布DmD_m的训练数据集学习,得到基分类器:

Gm(x):X{1,1}G_m(x):X\rightarrow \{-1,1\}

  • (b)计算Gm(x)G_m(x)在训练数据集上的分类误差率(第m次迭代的期望损失):

em=P(Gm(xi)yi)=i=1NwmiI(Gm(xi)yi)e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^{N}w_{mi}\mathbb{I}(G_m(x_i)\neq y_i)

注:其中I()\mathbb{I}(\cdot)为指示函数,函数中的内容为真时,函数值为1;为假时,函数值为0。

  • ©计算Gm(x)G_m(x)的系数(它代表Gm(xi)G_m(x_i)在最终的强分类器G(x)中的比重):

αm=12ln1emem\alpha_m=\frac{1}{2}ln\frac{1-e_m}{e_m}

注:为什么系数是这种形式,我们下文中会进行说明。

  • (d)更新训练数据集的权值分布

Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})

wm+1,i=wmizm{exp(αm),Gm(xi)=yiexp(αm),Gm(xi)yiw_{m+1,i}=\frac{w_{mi}}{z_m}*\left\{\begin{matrix} exp(-\alpha_m),G_m(x_i)=y_i \\ exp(\alpha_m),G_m(x_i)\neq y_i \end{matrix}\right.

等价于下式:

wm+1,i=wmiZmexp(αmyiGm(xi))w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i))i=1,2,...,Ni=1,2,...,N

这里面的值是一个规范化因子,为了保证所有元素的新的权重之和为1的归一化项。

Zm=i=1Nwmiexp(αmyiGm(xi))Z_m=\sum_{i=1}^{N}w_{mi}exp(-\alpha_my_iG_m(x_i))

它也使得Dm+1D_{m+1}成为一个概率分布。

(3)构建基本分类器的线性组合:

f(x)=m=1MαmGm(x)f(x)=\sum_{m=1}^M\alpha_mG_m(x)

得到最终分类器

G(x)=sign(f(x))=sign(m=1MαmGm(x))G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x))

我们用一张图来展示一下最终分类器的形式:

连载|如何通俗理解AdaBoost

数学原理

上面我们了解了adaboost算法的工作流程,本节再让我们来解释一下上文中的一些数学原理。

系数αm\alpha_m的设定

我们为什么要把系数设定为αm=12ln1emem\alpha_m=\frac{1}{2}ln\frac{1-e_m}{e_m}的形式呢?

简单的说,我们主要是为了让一个关于Gm(xi)G_m(x_i)的损失函数最小化,该损失函数的定义如下:

L(Gm)=i=1Nwm,iexp(yiGm(xi))L(G_m)=\sum_{i=1}^{N}w_{m,i}exp(-y_iG_m(x_i))

其中Gm(x)G_m(x)为第m次迭代后得到的强分类器

Gm(x)=i=1mαiGi(x)=i=1m1αiGi(x)+αmGm(x)G_m(x)=\sum_{i=1}^{m}\alpha_iG_i(x)=\sum_{i=1}^{m-1}\alpha_iG_i(x)+\alpha_mG_m(x)

对于上式,我们知道这是一个迭代的过程,所以可以认为m项以前的数值我们都已经确定了,因此我们只需要考虑αmGm(x)\alpha_mG_m(x),所以损失函数可简化为:

L(Gm)=i=1Nwm,iexp(αmyiGm(xi))L(G_m)=\sum_{i=1}^{N}w_{m,i}exp(-\alpha_m y_iG_m(x_i))

=yi=Gm(xi)wm,ieαm+yiGm(xi)wm,ieαm=\sum_{y_i=G_m(x_i)}w_{m,i}e^{-\alpha_m}+\sum_{y_i\neq G_m(x_i)}w_{m,i}e^{\alpha_m}

=eαmyi=Gm(xi)wm,i+eαmyiGm(xi)wm,i=e^{-\alpha_m}\sum_{y_i=G_m(x_i)}w_{m,i}+e^{\alpha_m}\sum_{y_i\neq G_m(x_i)}w_{m,i}

再根据我们上面迭代的式子可以得到(eme_m是我们第m次迭代的期望损失):

L(Gm)=eαm(1em)+eαmemL(G_m)=e^{-\alpha_m}(1-e_m)+e^{\alpha_m}e_m

我们再把L(Gm)L(G_m)αm\alpha_m进行求导并令其等于0得到:

αm=12ln1emem\alpha_m=\frac{1}{2}ln \frac{1-e_m}{e_m}

这就是我们为什么对系数进行了这样一个设定的原因所在。

损失函数的设定

我们了解了系数的设定,但是系数中用到了一个损失函数,那么对于这个损失函数我们为什么这样定义呢?

若损失函数达到最小时,G(x)可以达到最佳分类效果,我们就可以解释损失函数为什么要这样去定义了。

我们先将损失函数重写为分布的形式:

L(G)=ExD[eyG(x)]L(G)=E_{x\sim D}[e^{-yG(x)}]

这里的D就是我们权重的集合,我们写成这种分布的形式的时候,道理都是一样的,上式的意思是x服从D的分布时,eyG(x)e^{-yG(x)}的期望。则我们求导有:

δL(G)δG=P(y=1x)eG(x)+P(y=1x)eG(x)\frac{\delta L(G)}{\delta G}=-P(y=1|x)e^{-G(x)}+P(y=-1|x)e^{G(x)}

对于上式:

当y=1时δL(G)δG=eG(x)\frac{\delta L(G)}{\delta G}=-e^{-G(x)}

当y=-1时δL(G)δG=eG(x)\frac{\delta L(G)}{\delta G}=e^{G(x)}

结合我们x的分布,就可以写出上述的求导式,式子中的P(y=1x)P(y=1|x)就代表y=1时,所有x的权重之和,也就是分布概率之和,P(y=1x)P(y=-1|x)同理。

令求导式为0 我们可以得到:

G(x)=12lnP(y=1x)P(y=1x)G(x)=\frac{1}{2}ln\frac{P(y=1|x)}{P(y=-1|x)}

sign{G(x)}={1,ifP(y=1x)>P(y=1x)1,ifP(y=1x)<P(y=1x)sign\{G(x)\}=\left\{\begin{matrix} 1 ,ifP(y=1|x)>P(y=-1|x) \\ -1,ifP(y=1|x)<P(y=-1|x) \end{matrix}\right.

所以当L(G)达到了关于G(x)的极小时,sign{G(x)}是最小错误率贝叶斯情况下的分类器。这就说明了这样选择损失函数的原因。

Adaboost例子

这里拿李航博士《统计学习方法》中的例子来说明一下:

我们有下表所示的训练数据,假设弱分类器由x<v或x>v产生,其阈值v使该分类器在训练数据集上分类误差率最低,我们尝试使用Adaboost来学习一个强分类器。

序号 1 2 3 4 5 6 7 8 9 10
x 0 1 2 3 4 5 6 7 8 9
y 1 1 1 -1 -1 -1 1 1 1 -1

初始化数据权值分布:

D1=(w11,w12,...,w110)D_1=(w_{11},w_{12},...,w_{110})

w1i=0.1,i=1,2,...,10w_{1i}=0.1,i=1,2,...,10

  • 对m=1:

(a)在权值分布为D1的训练数据上,阈值v取2.5时分类误差率最低,此时的基本分类器为:

G1(x)={1,x<2.51,x>2.5G_1(x)=\left\{\begin{matrix} 1,x<2.5 \\ -1,x>2.5 \end{matrix}\right.

(b)G1(x)G_1(x)在训练数据集上的误差率e1=P(G1(xi)yi)=0.3e_1=P(G_1(x_i)\neq y_i)=0.3

©计算系数:α1=0.4236\alpha_1=0.4236

(d)更新训练数据的权值分布:

D2=(w21,w22,...,w210)D_2=(w_{21},w_{22},...,w_{210})

w2i=w1iZ1exp(α1yiG1(xi))w_{2i}=\frac{w_{1i}}{Z_1}exp(-\alpha_1y_iG_1(x_i))i=1,2,...,10i=1,2,...,10

D2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)D_2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)

f1(x)=0.4236G1(x)f_1(x)=0.4236G_1(x)

分类器sign[f1(x)]sign[f_1(x)]在训练数据集上有3个误分类点。

  • 对m=2:

(a)在权值分布为D2的训练数据上,阈值v取8.5时分类误差率最低,此时的基本分类器为:

G2(x)={1,x<8.51,x>8.5G_2(x)=\left\{\begin{matrix} 1,x<8.5 \\ -1,x>8.5 \end{matrix}\right.

(b)G2(x)G_2(x)在训练数据集上的误差率e2=P(G2(xi)yi)=0.2143e_2=P(G_2(x_i)\neq y_i)=0.2143

©计算系数:α2=0.6496\alpha_2=0.6496

(d)更新训练数据的权值分布:

D3=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1060,0.1060,0.1060,0.0455)D_3=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1060,0.1060,0.1060,0.0455)

f2(x)=0.4236G1(x)+0.6496G2(x)f_2(x)=0.4236G_1(x)+0.6496G_2(x)

分类器sign[f2(x)]sign[f_2(x)]在训练数据集上有3个误分类点。

  • 对m=3:

(a)在权值分布为D3的训练数据上,阈值v取5.5时分类误差率最低,此时的基本分类器为:

G3(x)={1,x<5.51,x>5.5G_3(x)=\left\{\begin{matrix} 1,x<5.5 \\ -1,x>5.5 \end{matrix}\right.

(b)G3(x)G_3(x)在训练数据集上的误差率e3=P(G3(xi)yi)=0.1820e_3=P(G_3(x_i)\neq y_i)=0.1820

©计算系数:α3=0.7514\alpha_3=0.7514

(d)更新训练数据的权值分布:

D4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.0125)D_4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.0125)

f3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x)f_3(x)=0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x)

分类器sign[f3(x)]sign[f_3(x)]在训练数据集上有0个误分类点。

于是我们得到最终的分类器为:

G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]G(x)=sign[f_3(x)]=sign[0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x)]
连载|如何通俗理解AdaBoost

相关文章:

  • 2021-11-28
  • 2022-12-23
  • 2022-12-23
  • 2022-01-14
猜你喜欢
  • 2021-08-02
  • 2021-06-10
  • 2021-04-20
  • 2021-08-04
  • 2021-05-07
  • 2021-10-31
  • 2021-04-02
相关资源
相似解决方案