Boosting算法是将“弱学习算法“提升为“强学习算法”的过程,提升方法主要思想是:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好,“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。

AdaBoost核心问题

  • 在每一轮如何改变训练数据的权值或概率分布;
    • AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类样本的权值。
  • 如何将弱分类器组合成一个强分类器。
    • AdaBoost:加权多数表决,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

AdaBoost算法流程

输入:训练数据集T={(x1,y1),(x2,y2),...,(xn,yn)}T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\},其中实例xiXRnx_i\in\mathcal{X}\subseteq\mathbb{R}^n,标记yiY={1,1}y_i\in\mathcal{Y}=\{-1,1\}X\mathcal{X}是实例空间,Y\mathcal{Y}是标记集合;若学习算法。
输出:最终分类器G(x)G(x)


  1. 初始化训练数据的权值分布
    D1=(w11,...,w1i,...,w1n),w1i=1n,i=1,2,...,nD_1=(w_{11},...,w_{1i},...,w_{1n}),\quad w_{1i}=\frac{1}{n},\quad i=1,2,...,n

假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第1步能够在原始数据上学习基分类器G1(x)G_1(x)

  1. m=1,...,Mm=1,...,M
    a. 使用具有权值分布DmD_m的训练数据集学习,得到使分类误差率最小的基分类器
    Gm(x):X{1,1}G_m(x): \mathcal{X}\rightarrow \{-1,1\}
    b. 计算Gm(x)G_m(x)在训练数据集上的分类误差率
    em=P(Gm(xi)yi)=Gm(xi)yiwmi=i=1NwmiI{Gm(xi)yi}e_m=P(G_m(x_i)\neq y_i)=\sum_{G_m(x_i)\neq y_i}w_{mi}=\sum_{i=1}^Nw_{mi}I\{G_m(x_i)\neq y_i\}

    Gm(x)G_m(x)在加权的训练数据集上的分类误差率是被Gm(x)G_m(x)误分类样本的权值之和,数由此可以看出数据权值分布DmD_m与基本分类器Gm(x)G_m(x)的分类误差率的关系。

    c. 计算Gm(x)G_m(x)分类器的权重系数
    αm=12loge1emem\alpha_m=\frac{1}{2}\log_e \frac{1-e_m}{e_m}

    em12e_m\leq\frac{1}{2}时,αm0\alpha_m\geq 0,并且αm\alpha_m随着eme_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=wmiZmeαmyiGm(xi),i=1,2,...,nw_{m+1,i}=\frac{w_{mi}}{Z_m}e^{-\alpha_my_iG_m(x_i)},\quad i=1,2,...,n
    这里,ZmZ_m是规范化因子,
    Zm=i=1nwmieαmyiGm(xi)Z_m=\sum_{i=1}^nw_{mi}e^{-\alpha_my_iG_m(x_i)}
    它使Dm+1D_{m+1}成为一个概率分布。

    wm+1,i={wmiZmeαm,Gm(xi)=yiwmiZmeαm,Gm(xi)yiw_{m+1,i}=\begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m},\quad G_m(x_i)=y_i\\ \quad\\ \frac{w_{mi}}{Z_m}e^{\alpha_m},\quad G_m(x_i)\neq y_i \end{cases}
    被基本分类器Gm(x)G_m(x)误分类样本的权值得以扩大,而被正确分类样本的权值得以缩小,比较而言,误分类样本权值被放大e2αm=em1eme^{2\alpha_m}=\frac{e_m}{1-e_m}

  2. 构建基本分类器的线性组合
    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))

线性组合f(x)f(x)实现MM个基本分类器的加权表决。系数αm\alpha_m表示了基分类器Gm(x)G_m(x)的重要性,这里,所有αm\alpha_m之和并不为1。f(x)f(x)的符号决定实例xx的分类,f(x)f(x)的绝对值表示分类的确信度。


理解AdaBoost

前向分步算法

  加法模型是指由一系列弱分类器线性相加而成的强分类器。一般组合形式如下:
f(x)=m=1Mβmb(x;γm)f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)
其中,b(x;γm)b(x;\gamma_m)为基函数,就是一个个的弱分类器,γm\gamma_m是弱分类器学习到的最优参数,αm\alpha_m是弱分类器在强分类器中所占比重。

  在给定训练数据及损失函数L(y,f(x))L(y,f(x))的条件下,学习加法模型f(x)f(x)称为经验风险最小化即损失函数极小化问题:
minβm,γmi=1nL(yi,m=1Mβmb(x;γm))\min_{\beta_m,\gamma_m}\sum_{i=1}^nL\left(y_i,\sum_{m=1}^M\beta_mb(x;\gamma_m)\right)

  通常这是一个复杂的优化问题。前向分步算法求解这一优化问题的思想是:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,简化优化的复杂度。具体地,每一步只需优化如下损失函数:
minβ,γi=1nL(yi,βb(xi;γ))\min_{\beta,\gamma}\sum_{i=1}^n L\left(y_i,\beta b(x_i;\gamma)\right)
【机器学习算法】AdaBoost

前向分步算法与AdaBoost

  AdaBoost算法可以认为是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二分类学习方法。
  AdaBoost的最终分类器:
f(x)=m=1MαmGm(x)f(x)=\sum_{m=1}^M\alpha_mG_m(x)
显然这是一个加法模型。下面证明AdaBoost算法等价于损失函数是指数损失函数的前向分布算法,
L(y,f(x))=exp[yf(x)]L(y,f(x))=exp[-yf(x)]

  假设经过m1m-1次携带向前分布算法得到fm1(x)f_{m-1}(x)
fm1(x)=fm2(x)+αm1Gm1(x)=α1G1(x)+...+αm1Gm1(x)f_{m-1}(x)=f_{m-2}(x)+\alpha_{m-1}G_{m-1}(x)=\alpha_1G_{1}(x)+...+\alpha_{m-1}G_{m-1}(x)
在前向分布算法第mm次迭代,我们的目标是寻找αm\alpha_mGm(x)G_m(x)使fm(x)f_m(x)在训练数据集上的指数损失最小,即
(αm,Gm(x))=argminα,Gi=1nexp[yi(fm1(xi)+αG(xi))](\alpha_m,G_m(x))=\arg\min_{\alpha,G}\sum_{i=1}^nexp[-y_i(f_{m-1}(x_i)+\alpha G(x_i))]
wˉmi=exp[yifm1(xi)]\bar{w}_{mi}=exp[-y_if_{m-1}(x_i)],这里,wˉmi\bar{w}_{mi}不依赖与α\alphaGG,因此与最小化无关,可写目标函数
(αm,Gm(x))=argminα,Gi=1nwˉmiexp[yiαG(xi)](1)(\alpha_m,G_m(x))=\arg\min_{\alpha,G}\sum_{i=1}^n\bar{w}_{mi}exp[-y_i\alpha G(x_i)]\quad\quad\quad(1)

wˉmi\bar{w}_{mi}依赖于fm1(xi)f_{m-1}(x_i),随着每一轮迭代发生改变。

  对任意α>0\alpha>0,当yiy_iG(xi)G(x_i)同号时,目标函数的第ii个分量越大,因此,使(1)式最小的G(x)G(x)由下式得到,
Gm(x)=argminGi=1nwˉmiI{Gm(xi)yi}G_m^*(x)=\arg\min_{G}\sum_{i=1}^n\bar{w}_{mi}I\{G_m(x_i)\neq y_i\}
此分类器Gm(x)G_m^*(x)即为AdaBoost算法的基分类器Gm(x)G_m(x),它是使第mm轮加权训练数据分类误差率最小的基分类器。
  之后求α\alpha
i=1nwˉmiexp[yiαG(xi)]=yi=Gm(xi)wˉmieα+yiGm(xi)wˉmieα=(eαeα)i=1nwˉmiI{Gm(xi)yi}+eαi=1nwˉmi\begin{aligned} \sum_{i=1}^n\bar{w}_{mi}exp[-y_i\alpha G(x_i)]&=\sum{y_i=G_m(x_i)}\bar{w}_{mi}e^{-\alpha}+\sum{y_i\neq G_m(x_i)}\bar{w}_{mi}e^{\alpha}\\ &=(e^{\alpha}-e^{-\alpha})\sum_{i=1}^n\bar{w}_{mi}I\{G_m(x_i)\neq y_i\}+e^{-\alpha}\sum_{i=1}^n\bar{w}_{mi} \end{aligned}
带入Gm(x)G_m^*(x),对α\alpha求导并使导数为0,
(eα+eα)i=1nwˉmiI{Gm(xi)yi}=eαi=1nwˉmi(e^{\alpha}+e^{-\alpha})\sum_{i=1}^n\bar{w}_{mi}I\{G_m(x_i)\neq y_i\}=e^{-\alpha}\sum_{i=1}^n\bar{w}_{mi}

em=i=1nwˉmii=1nwˉmiI{Gm(xi)yi}=i=1nwmiI{Gm(xi)yi}e_m=\sum_{i=1}^n\frac{\bar{w}_{mi}}{\sum_{i=1}^n\bar{w}_{mi}}I\{G_m(x_i)\neq y_i\}=\sum_{i=1}^nw_{mi}I\{G_m(x_i)\neq y_i\}

wˉmi=exp[yifm1(xi)]=exp[yi(fm2(x)+αm1Gm1(x))]=wˉm1,iexp[yiαm1Gm1(x))]\begin{aligned} \bar{w}_{mi}&=exp[-y_if_{m-1}(x_i)]=exp[-y_i(f_{m-2}(x)+\alpha_{m-1}G_{m-1}(x))]\\ &=\bar{w}_{m-1,i}exp[-y_i\alpha_{m-1}G_{m-1}(x))] \end{aligned}

wm,i=wm1,iexp[αm1yiGm1(xi)]i=1nwm1,iexp[αm1yiGm1(xi)],i=1,2,...,nw_{m,i}=\frac{w_{m-1,i}exp[-\alpha_{m-1}y_iG_{m-1}(x_i)]}{\sum_{i=1}^nw_{m-1,i}exp[-\alpha_{m-1}y_iG_{m-1}(x_i)]},\quad i=1,2,...,n

两边同除i=1nwˉmi\sum_{i=1}^n\bar{w}_{mi}
(eα+eα)em=eα(e^{\alpha}+e^{-\alpha})e_m=e^{-\alpha}
则,
αm=12log1emem\alpha_m^*=\frac{1}{2}\log \frac{1-e_m}{e_m}

参考:
统计学习方法—李航

相关文章: