连载|如何通俗理解AdaBoost

AdaBoost

基本思想

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

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

Adaboost算法

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

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

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

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

**输入:**训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x2,y_2),...,(x_N,y_N)\} T={x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ X ⊆ R x_i\in X\subseteq R xiXR y i ∈ Y ⊆ { − 1 , 1 } y_i\in Y\subseteq\{-1,1\} yiY{1,1};弱学习算法。

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

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

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

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

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

G m ( x ) : X → { − 1 , 1 } G_m(x):X\rightarrow \{-1,1\} Gm(x):X{1,1}

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

e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) 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) em=P(Gm(xi)=yi)=i=1NwmiI(Gm(xi)=yi)

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

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

α m = 1 2 l n 1 − e m e m \alpha_m=\frac{1}{2}ln\frac{1-e_m}{e_m} αm=21lnem1em

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

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

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

w m + 1 , i = w m i z m ∗ { e x p ( − α m ) , G m ( x i ) = y i e x p ( α m ) , G m ( x i ) ≠ y i w_{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=zmwmi{exp(αm),Gm(xi)=yiexp(αm),Gm(xi)=yi

等价于下式:

w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(αmyiGm(xi)) i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N

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

Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^{N}w_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1Nwmiexp(αmyiGm(xi))

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

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

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

得到最终分类器

G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x)) G(x)=sign(f(x))=sign(m=1MαmGm(x))

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

在这里插入图片描述

数学原理

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

系数 α m \alpha_m αm的设定

我们为什么要把系数设定为 α m = 1 2 l n 1 − e m e m \alpha_m=\frac{1}{2}ln\frac{1-e_m}{e_m} αm=21lnem1em的形式呢?

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

L ( G m ) = ∑ i = 1 N w m , i e x p ( − y i G m ( x i ) ) L(G_m)=\sum_{i=1}^{N}w_{m,i}exp(-y_iG_m(x_i)) L(Gm)=i=1Nwm,iexp(yiGm(xi))

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

G m ( x ) = ∑ i = 1 m α i G i ( x ) = ∑ i = 1 m − 1 α i G i ( x ) + α m G m ( 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) Gm(x)=i=1mαiGi(x)=i=1m1αiGi(x)+αmGm(x)

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

L ( G m ) = ∑ i = 1 N w m , i e x p ( − α m y i G m ( x i ) ) L(G_m)=\sum_{i=1}^{N}w_{m,i}exp(-\alpha_m y_iG_m(x_i)) L(Gm)=i=1Nwm,iexp(αmyiGm(xi))

= ∑ y i = G m ( x i ) w m , i e − α m + ∑ y i ≠ G m ( x i ) w m , i e α 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} =yi=Gm(xi)wm,ieαm+yi=Gm(xi)wm,ieαm

= e − α m ∑ y i = G m ( x i ) w m , i + e α m ∑ y i ≠ G m ( x i ) w m , 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} =eαmyi=Gm(xi)wm,i+eαmyi=Gm(xi)wm,i

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

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

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

α m = 1 2 l n 1 − e m e m \alpha_m=\frac{1}{2}ln \frac{1-e_m}{e_m} αm=21lnem1em

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

损失函数的设定

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

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

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

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

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

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

对于上式:

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

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

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

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

G ( x ) = 1 2 l n P ( y = 1 ∣ x ) P ( y = − 1 ∣ x ) G(x)=\frac{1}{2}ln\frac{P(y=1|x)}{P(y=-1|x)} G(x)=21lnP(y=1x)P(y=1x)

s i g n { G ( x ) } = { 1 , i f P ( y = 1 ∣ x ) > P ( y = − 1 ∣ x ) − 1 , i f P ( y = 1 ∣ x ) < P ( y = − 1 ∣ x ) 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. sign{G(x)}={1,ifP(y=1x)>P(y=1x)1,ifP(y=1x)<P(y=1x)

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

Adaboost例子

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

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

序号12345678910
x0123456789
y111-1-1-1111-1

初始化数据权值分布:

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

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

  • 对m=1:

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

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

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

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

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

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

w 2 i = w 1 i Z 1 e x p ( − α 1 y i G 1 ( x i ) ) w_{2i}=\frac{w_{1i}}{Z_1}exp(-\alpha_1y_iG_1(x_i)) w2i=Z1w1iexp(α1yiG1(xi)) i = 1 , 2 , . . . , 10 i=1,2,...,10 i=1,2,...,10

D 2 = ( 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) D2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)

f 1 ( x ) = 0.4236 G 1 ( x ) f_1(x)=0.4236G_1(x) f1(x)=0.4236G1(x)

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

  • 对m=2:

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

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

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

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

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

D 3 = ( 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) D3=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1060,0.1060,0.1060,0.0455)

f 2 ( x ) = 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) f_2(x)=0.4236G_1(x)+0.6496G_2(x) f2(x)=0.4236G1(x)+0.6496G2(x)

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

  • 对m=3:

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

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

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

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

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

D 4 = ( 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) D4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.0125)

f 3 ( x ) = 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) f_3(x)=0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x) f3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x)

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

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

G ( x ) = s i g n [ f 3 ( x ) ] = s i g n [ 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) ] G(x)=sign[f_3(x)]=sign[0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x)] G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值