机器学习笔记补充——提升(boosting)


  本文内容主体是基于李航老师的《统计学习方法》第二版中提升方法章节的内容,有兴趣的同学可以自行参考书籍资料。其中个人觉得不是很直观的部分进行了适当的解释,解释仅属于个人理解,若觉得解释更加难以理解的同学可以自行忽略。代码部分有时间再补充。若文中有编辑错误,烦请指正,谢谢。

1. 提升简介

  强可学习(strongly learnable):一个概念,如果存在一个学习算法能够学习它,并且正确率很高,则称为是强可学习的;
  弱可学习(weakly learnable):一个概念,如果存在一个学习算法能够学习它,但是正确率仅比瞎猜好一些,则称为是弱可学习的。
  Schapire学者后来证明了,强可学习和弱可学习是等价的,也就是说,一个概念是弱可学习的,那它必然是强可学习的;反之亦然。
  这样,对于一个问题来说,如果发现了该问题的弱可学习属性,或者说能够设计出一个效果较差的模型来学习它,那么一定存在一个模型可以对该问题进行很好的学习。所以,人们就开始思考,能否根据较弱的模型进行“提升”,升级为较强的学习模型呢?因为往往要找到一个弱模型是更加容易的。上述升级的过程,就成为“提升方法”。
  大多数的提升方法都是改变训练数据的概率分布(即训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器,然后再将所有弱分类器组合起来成为强分类器的思路。因此,提升问题主要关注点有两个:

  • 每一轮如何改变训练数据的权值或概率分布?
  • 如何将弱分类器组合成一个强分类器?

2. AdaBoost算法

2.1 算法思路及步骤

   AdaBoost是针对二分类问题的算法。
  算法思路:针对上述两个关注点,AdaBoost采用提高分类错误样本的权值,降低分类正确样本的权值来改变数据的概率分布;最后,通过所有弱分类器进行加权多数表决的方式来得到最终结果,其中误差率大的分类器,其投票权值就较低。
  算法步骤

  • 输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ X ∈ ℜ n , y i ∈ { − 1 , + 1 } x_i\in X\in \real^n,y_i\in\{-1,+1\} xiXn,yi{1,+1};加上一种针对问题的弱学习算法;
  • 输出:一种强学习算法的分类器 G ( x ) G(x) G(x)
  1. 初始化训练数据的权值分布
    D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , . . . , N D_1=(w_{11},...,w_{1i},...,w_{1N}),w_{1i}=\frac{1}{N},i=1,2,...,N D1=(w11,...,w1i,...,w1N),w1i=N1,i=1,2,...,N
  2. 对m=1,2,…,M,进行以下操作:(M表示最终组合的弱分类器个数,可以对不断进化的分类器设定一个终止条件,最终达到条件后的弱分类器个数就是M,也可以提前设定M的数值,但这样可能结果就不可控了)
      1). 使用具有权值分布 D m D_m Dm的训练数据学习,得到基本分类器。
    G m ( x ) : X → { − 1 , + 1 } G_m(x):X\rightarrow\{-1,+1\} Gm(x):X{1,+1}
      2). 计算 G m ( x ) G_m(x) Gm(x)在训练数据上的分类误差率(即分类错误率,即错误样本的权值之和)
    e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=\sum_{i=1}^N P(G_m(x_i)≠y_i)=\sum_{i=1}^N w_{mi}I(G_m(x_i)≠y_i) em=i=1NP(Gm(xi)̸=yi)=i=1NwmiI(Gm(xi)̸=yi)
      3). 计算第m个弱分类器 G m ( x ) G_m(x) Gm(x)的投票权值系数:
    α m = 1 2 ln ⁡ 1 − e m e m \alpha_m=\frac{1}{2}\ln \frac{1-e_m}{e_m} αm=21lnem1em
      可以从系数公式看出,错误率越高,则系数越小,所占投票比例也就越小。另外,因为提升要求弱分类器对于分类效果要比瞎猜好一些,所以可以确定,在二分类问题中, e m ≤ 1 2 → α m ≥ 0 e_m≤\frac{1}{2} \rightarrow \alpha_m≥0 em21αm0
      4).更新训练数据集的权值分布
    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 − α m y i G m ( x i ) = { w m i Z m e − α m , G m ( x i ) = y i w m i Z m e α m , G m ( x i ) ≠ y i , i = 1 , 2 , . . . , N 即w_{m+1,i}=\frac{w_{mi}}{Z_m}e^{-\alpha_my_iG_m(x_i)}=\begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m},G_m(x_i)=y_i\\ \frac{w_{mi}}{Z_m}e^{\alpha_m},G_m(x_i)≠y_i \end{cases},i=1,2,...,N wm+1,i=ZmwmieαmyiGm(xi)={ZmwmieαmGm(xi)=yiZmwmieαmGm(xi)̸=yi,i=1,2,...,N
      这里, Z m Z_m Zm是归一化因子,将更新后的权值进行归一化,即 Z m = ∑ i = 1 N w m i e − α m y i G m ( x i ) Z_m=\sum_{i=1}^Nw_{mi}e^{-\alpha_my_iG_m(x_i)} Zm=i=1NwmieαmyiGm(xi)。由上可知,正确分类的样本权值缩小了 e − α m e^{-\alpha_m} eαm,错误分类的样本权值增大了 e α m e^{\alpha_m} eαm倍,相当于错误分类的权值相对于正确分类的权值增大了 e 2 α m e^{2\alpha_m} e2αm倍。
  3. 构建基本分类器的线性组合,得到最终分类器 G ( x ) G(x) G(x)
    f ( x ) = ∑ m = 1 M α m G m ( x ) , G ( x ) = s i g n ( f ( x ) ) f(x)=\sum_{m=1}^M\alpha_mG_m(x),G(x)=sign(f(x)) f(x)=m=1MαmGm(x)G(x)=sign(f(x))
       f ( x ) f(x) f(x)的符号决定实例x的分类,绝对值表示分类的确信度。

2.2 AdaBoost算法的训练误差分析

  AdaBoost的训练误差界定理:AdaBoost算法最终分类器的训练误差界为
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i e − y i f ( x i ) = ∏ m Z m \frac{1}{N}\sum_{i=1}^N I(G(x_i)≠y_i)≤\frac{1}{N}\sum_i e^{-y_if(x_i)}=\prod_m Z_m N1i=1NI(G(xi)̸=yi)N1ieyif(xi)=mZm
  证明:
  前半部分不等式,由于当 G ( x i ) ≠ y i G(x_i)≠y_i G(xi)̸=yi时, − y i f ( x i ) ≥ 0 → e − y i f ( x i ) ≥ 1 -y_if(x_i)≥0→e^{-y_if(x_i)}≥1 yif(xi)0eyif(xi)1,所以显然成立。
  后半部分有:
∵ w m + 1 , i = w m i Z m e − α m y i G m ( x i ) ⇒ Z m w m + 1 , i = w m i e − α m y i G m ( x i ) ∵w_{m+1,i}=\frac{w_{mi}}{Z_m}e^{-\alpha_my_iG_m(x_i)}\Rightarrow Z_mw_{m+1,i}=w_{mi}e^{-\alpha_my_iG_m(x_i)} wm+1,i=ZmwmieαmyiGm(xi)Zmwm+1,i=wmieαmyiGm(xi)
∴ 1 N ∑ i e − y i f ( x i ) = 1 N ∑ i exp ⁡ ( − ∑ m = 1 M y i α m G m ( x i ) ) ∴\frac{1}{N}\sum_i e^{-y_if(x_i)}=\frac{1}{N}\sum_i \exp(-\sum_{m=1}^My_i\alpha_mG_m(x_i)) N1ieyif(xi)=N1iexp(m=1MyiαmGm(xi))
又 ∵ w 1 i = 1 N ⇒ 上 式 = ∑ i w 1 i ∏ m = 1 M exp ⁡ ( − y i α m G m ( x i ) ) 又∵w_{1i}=\frac{1}{N}\Rightarrow上式=\sum_i w_{1i}\prod_{m=1}^M\exp(-y_i\alpha_mG_m(x_i)) w1i=N1=iw1im=1Mexp(yiαmGm(xi))
= ∑ i Z 1 w 1 i Z 1 exp ⁡ ( α 1 y i G 1 ( x i ) ) ∏ m = 2 M exp ⁡ ( − y i α m G m ( x i ) ) = Z 1 ∑ i w 2 i ∏ m = 2 M exp ⁡ ( − y i α m G m ( x i ) ) =\sum_i Z_1\frac{w_{1i}}{Z_1}\exp(\alpha_1y_iG_1(x_i))\prod_{m=2}^M\exp(-y_i\alpha_mG_m(x_i))=Z_1\sum_i w_{2i}\prod_{m=2}^M\exp(-y_i\alpha_mG_m(x_i)) =iZ1Z1w1iexp(α1yiG1(xi))m=2Mexp(yiαmGm(xi))=Z1iw2im=2Mexp(yiαmGm(xi))
= . . . = Z 1 Z 2 . . . Z M − 1 ∑ i w M i exp ⁡ ( − α M y i G M ( x i ) ) = ∏ m = 1 M Z m , 证 毕 =...=Z_1Z_2...Z_{M-1}\sum_i w_{Mi}\exp(-\alpha_My_iG_M(x_i))=\prod_{m=1}^M Z_m,证毕 =...=Z1Z2...ZM1iwMiexp(αMyiGM(xi))=m=1MZm
  上述定理说明,可以在每一轮选取适当的 G m G_m Gm使得 Z m Z_m Zm最小,从而使训练误差下降最快。

  二分类问题AdaBoost的训练误差界
∏ m = 1 M Z m = ∏ m = 1 M [ ∑ i = 1 N w m i e − α m y i G m ( x i ) ] = ∏ m = 1 M [ ∑ y i = G m ( x i ) N w m i e − α m + ∑ y i ≠ G m ( x i ) N w m i e α m ] \prod_{m=1}^M Z_m=\prod_{m=1}^M[\sum_{i=1}^Nw_{mi}e^{-\alpha_my_iG_m(x_i)}]=\prod_{m=1}^M[\sum_{y_i=G_m(x_i)}^Nw_{mi}e^{-\alpha_m}+\sum_{y_i≠G_m(x_i)}^Nw_{mi}e^{\alpha_m}] m=1MZm=m=1M[i=1NwmieαmyiGm(xi)]=m=1M[yi=Gm(xi)Nwmieαm+yi̸=Gm(xi)Nwmieαm]
= ∏ m = 1 M [ ( 1 − e m ) e − α m + e m e α m ] = ∏ m = 1 M 2 e m ( 1 − e m ) = ∏ m = 1 M 1 − 4 γ m 2 , 其 中 γ m = 1 2 − e m =\prod_{m=1}^M[(1-e_m)e^{-\alpha_m}+e_me^{\alpha_m}]=\prod_{m=1}^M 2\sqrt{e_m(1-e_m)}=\prod_{m=1}^M \sqrt{1-4\gamma_m^2},其中\gamma_m=\frac{1}{2}-e_m =m=1M[(1em)eαm+emeαm]=m=1M2em(1em) =m=1M14γm2 γm=21em
∴ ∏ m = 1 M Z m = ∏ m = 1 M 1 − 4 γ m 2 ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) ∴\prod_{m=1}^M Z_m=\prod_{m=1}^M \sqrt{1-4\gamma_m^2}≤\exp(-2\sum_{m=1}^M \gamma_m^2) m=1MZm=m=1M14γm2 exp(2m=1Mγm2)
  其中,上式的右半部分不等式是因为:
− 4 γ m 2 ∈ ( − 1 , 0 ) , 构 造 x = − 4 γ m 2 , f ( x ) = e x − x , f ′ ( x ) = e x − 1 , ∴ x ∈ ( − 1 , 0 ) 时 , f ( x ) 单 调 递 减 -4\gamma_m^2\in(-1,0),构造x=-4\gamma_m^2,f(x)=e^x-x,f'(x)=e^x-1,∴x\in(-1,0)时,f(x)单调递减 4γm2(1,0)x=4γm2f(x)=exx,f(x)=ex1x(1,0)f(x)
∴ f ( x ) ≥ f ( 0 ) = 1 ⇒ e − 4 γ m 2 + 4 γ m 2 ≥ 1 ⇒ e − 2 γ m 2 ≥ 1 − 4 γ m 2 ⇒ ∏ m = 1 M 1 − 4 γ m 2 ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) ∴f(x)≥f(0)=1\Rightarrow e^{-4\gamma_m^2}+4\gamma_m^2≥1\Rightarrow e^{-2\gamma_m^2}≥\sqrt{1-4\gamma_m^2}\Rightarrow \prod_{m=1}^M \sqrt{1-4\gamma_m^2}≤\exp(-2\sum_{m=1}^M \gamma_m^2) f(x)f(0)=1e4γm2+4γm21e2γm214γm2 m=1M14γm2 exp(2m=1Mγm2)

  但是其实,AdaBoost算法的使用并不需要知道下界 γ \gamma γ,因为其具有自适应能力,所以才叫Ada(Adaptive)

2.3 AdaBoost算法的推导

  AdaBoost算法可以看做是模型为加法模型、损失函数是指数函数、学习算法为前向分布算法时的二分类学习方法。
  前向分步算法
  考虑加法模型 f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^M \beta_mb(x;\gamma_m) f(x)=m=1Mβmb(x;γm),其中 b ( x ; γ m ) b(x;\gamma_m) b(x;γm)是基函数, γ m \gamma_m γm是基函数的参数, β m \beta_m βm是基函数的系数。对于损失函数极小化的优化问题:
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) , 分 步 后 简 化 为 min ⁡ β m , γ m ∑ i = 1 N L ( y i , β m b ( x i ; γ m ) ) \min\limits_{\beta_m,\gamma_m}\sum_{i=1}^N L(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)),分步后简化为\min\limits_{\beta_m,\gamma_m}\sum_{i=1}^N L(y_i,\beta_mb(x_i;\gamma_m)) βm,γmmini=1NL(yi,m=1Mβmb(xi;γm))βm,γmmini=1NL(yi,βmb(xi;γm))
  上述优化问题是非常复杂的。前向分步算法解决上述问题的方式是,因为学习是的加法模型,如果从前向后,每步只学习一个基函数及其系数,逐步逼近优化目标,那么就可以简化问题的求解。
  前向分步算法步骤:

  • 输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ X ∈ ℜ n , y i ∈ { − 1 , + 1 } x_i\in X\in \real^n,y_i\in\{-1,+1\} xiXn,yi{1,+1};损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));基函数集 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}
  • 输出:加法模型 f ( x ) f(x) f(x)
  1. 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
  2. 对m=1,2,…,M,进行如下操作:
      a. 极小化损失函数
    ( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min\limits_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))
      得到参数 β m , γ m \beta_m,\gamma_m βm,γm
      b. 更新加法模型:
    f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) fm(x)=fm1(x)+βmb(x;γm)
  3. 得到最终的加法模型 f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M \beta_mb(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)

  用前向分步算法推导AdaBoost算法
  AdaBoost算法是前向分步算法的特例,其中,加法模型是由基本分类器(弱分类器)组成的加法模型,损失函数是指数函数。
  证明:
  加法模型是由基本分类器(弱分类器)组成的加法模型,这一句话是很直观的,无需证明。主要要证明损失函数是指数函数 L ( y , f ( x ) ) = exp ⁡ ( − y f ( x ) ) L(y,f(x))=\exp(-yf(x)) L(y,f(x))=exp(yf(x))
  假设,已经完成m-1次前向分步算法的迭代,得到 f m − 1 ( x ) = α 1 G 1 ( x ) + . . . + α m − 1 G m − 1 ( x ) f_{m-1}(x)=\alpha_1G_1(x)+...+\alpha_{m-1}G_{m-1}(x) fm1(x)=α1G1(x)+...+αm1Gm1(x),其中, α \alpha α相当于前向分步算法中的 β \beta β
  那么,在第m轮中,希望得到 α m , G m ( x ) \alpha_m,G_m(x) αm,Gm(x)使得 f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m-1}(x)+\alpha_mG_m(x) fm(x)=fm1(x)+αmGm(x)在训练数据集T上的指数损失最小,即
( α m , G m ( x ) ) = arg ⁡ min ⁡ α m , G m ∑ i = 1 N exp ⁡ [ − y i ( f m − 1 ( x i ) + α m G m ( x i ) ) ] = arg ⁡ min ⁡ α m , G m ∑ i = 1 N w ˉ m i exp ⁡ [ − y i α m G m ( x i ) ] (\alpha_m,G_m(x))=\arg\min\limits_{\alpha_m,G_m}\sum_{i=1}^N \exp[-y_i(f_{m-1}(x_i)+\alpha_m G_m(x_i))]=\arg\min\limits_{\alpha_m,G_m}\sum_{i=1}^N \bar{w}_{mi}\exp[-y_i\alpha_m G_m(x_i)] (αm,Gm(x))=argαm,Gmmini=1Nexp[yi(fm1(xi)+αmGm(xi))]=argαm,Gmmini=1Nwˉmiexp[yiαmGm(xi)]
  其中, w ˉ m i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar{w}_{mi}=\exp[-y_if_{m-1}(x_i)] wˉmi=exp[yifm1(xi)]。因为 w ˉ m i \bar{w}_{mi} wˉmi既不依赖 α \alpha α也不依赖G,所以与最小化无关。下面证明让上式达到最小的优化问题得到的 α m ∗ , G m ∗ ( x ) \alpha_m^*,G_m^*(x) αm,Gm(x)就是AdaBoost算法得到的 α m , G m ( x ) \alpha_m,G_m(x) αm,Gm(x)
  首先求解 G m ∗ ( x ) G_m^*(x) Gm(x),观察上式可知,只要 α m &gt; 0 \alpha_m&gt;0 αm>0,那么,想要让目标函数取最小值,则 G m ( x ) G_m(x) Gm(x)分类正确的数量要越多越好,这样才能使 − y i α m G m ( x i ) &lt; 0 -y_i\alpha_m G_m(x_i)&lt;0 yiαmGm(xi)<0。另外,在 G m ( x ) G_m(x) Gm(x)错误分类的样本中,样本对应的权值应该越小越好,这表示分类器分类错的样本并不是很重要的样本,所以写成数学表达式为:
G m ∗ ( x ) = arg ⁡ min ⁡ G m ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) G_m^*(x)=\arg\min\limits_{G_m}\sum_{i=1}^N\bar{w}_{mi}I(y_i≠G(x_i)) Gm(x)=argGmmini=1NwˉmiI(yi̸=G(xi))
  这时,分类器 G m ∗ ( x ) G_m^*(x) Gm(x)就是AdaBoost算法中的基本分类器 G m ( x ) G_m(x) Gm(x),因为是使第m轮加权训练数据分类误差率最小的基本分类器。(补充说明一下,这里的 G m ( x ) G_m(x) Gm(x)在AdaBoost算法中是用弱学习模型根据带权值的样本数据学习得到的,即AdaBoost算法步骤中的2-1).,即使是弱学习模型,对数据进行训练得到最终的分类器,也肯定是针对当前样本集能得到最优的误差率,只是因为它是弱学习模型,所以最优的误差率也不是非常理想罢了。所以,上述推导中的 G m ∗ ( x ) G_m^*(x) Gm(x)要求的也是当前带权样本集误差率最小的分类器,所以两者是等价的)
  之后,由于 α m ∗ \alpha^*_m αm不影响 G m ∗ ( x ) G_m^*(x) Gm(x)的最优解,所以 G m ∗ ( x ) G_m^*(x) Gm(x)当做已知。求 α m ∗ \alpha^*_m αm
∵ ∑ i = 1 N w ˉ m i exp ⁡ [ − y i α m G m ( x i ) ] = ∑ y i = G m ( x i ) w ˉ m i e − α m + ∑ y i ≠ G m ( x i ) w ˉ m i e α m = ( e α m − e − α m ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) + e − α m ∑ i = 1 N w ˉ m i ∵\sum_{i=1}^N \bar{w}_{mi}\exp[-y_i\alpha_m G_m(x_i)]=\sum_{y_i=G_m(x_i)} \bar{w}_{mi}e^{-\alpha_m}+\sum_{y_i≠G_m(x_i)} \bar{w}_{mi}e^{\alpha_m}=(e^{\alpha_m}-e^{-\alpha_m})\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i))+e^{-\alpha_m}\sum_{i=1}^N \bar{w}_{mi} i=1Nwˉmiexp[yiαmGm(xi)]=yi=Gm(xi)wˉmieαm+yi̸=Gm(xi)wˉmieαm=(eαmeαm)i=1NwˉmiI(yi̸=G(xi))+eαmi=1Nwˉmi
上 式 对 α m 求 导 取 0 后 得 : ( e α m + e − α m ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) − e − α m ∑ i = 1 N w ˉ m i = 0 上式对\alpha_m求导取0后得:(e^{\alpha_m}+e^{-\alpha_m})\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i))-e^{-\alpha_m}\sum_{i=1}^N \bar{w}_{mi}=0 αm0:(eαm+eαm)i=1NwˉmiI(yi̸=G(xi))eαmi=1Nwˉmi=0
∴ ( e α m + e − α m ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) = e − α m ∑ i = 1 N w ˉ m i , 又 ∵ e m = ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) , ∑ i = 1 N w ˉ m i = 1 ∴(e^{\alpha_m}+e^{-\alpha_m})\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i))=e^{-\alpha_m}\sum_{i=1}^N \bar{w}_{mi},又∵e_m=\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i)),\sum_{i=1}^N \bar{w}_{mi}=1 (eαm+eαm)i=1NwˉmiI(yi̸=G(xi))=eαmi=1Nwˉmi,em=i=1NwˉmiI(yi̸=G(xi)),i=1Nwˉmi=1
∴ ( e α m + e − α m ) e m = e − α m ⇒ ( e 2 α m + 1 ) e m = 1 ⇒ α m ∗ = 1 2 ln ⁡ 1 − e m e m ∴(e^{\alpha_m}+e^{-\alpha_m})e_m=e^{-\alpha_m}\Rightarrow (e^{2\alpha_m}+1)e_m=1\Rightarrow \alpha_m^*=\frac{1}{2}\ln\frac{1-e_m}{e_m} (eαm+eαm)em=eαm(e2αm+1)em=1αm=21lnem1em
  上述推导中的 e m e_m em和AdaBoost算法中的 e m e_m em是一模一样的,但是在倒数第二行增加了一个条件,就是 ∑ i = 1 N w ˉ m i = 1 \sum_{i=1}^N \bar{w}_{mi}=1 i=1Nwˉmi=1,所以,在AdaBoost算法中,每次更新权值后,都要用归一化因子 Z m Z_m Zm将权值归一化,才能满足上述条件,推导才能成立。由于AdaBoost算法最开始的权值分布是 w 1 i = 1 N w_{1i}=\frac{1}{N} w1i=N1,初始化的权值即满足条件,而后续每次迭代都将权值进行归一化了,所以在上述推导中的 w ˉ m i \bar{w}_{mi} wˉmi其实和AdaBoost算法中的 w m i w_{mi} wmi是等价的。

3.提升树

  以决策树(通常是CART)为基函数的提升方法称为提升树。同CART,提升树也可以分为分类提升树和回归提升树。
  首先确定初始提升树 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0,第m步的模型是 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm),其中 f m − 1 ( x ) f_{m-1}(x) fm1(x)是当前模型。然后经过经验风险极小化确定下一棵决策树的参数 Θ m \Theta_m Θm
Θ ^ m = arg ⁡ min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) \hat{\Theta}_m=\arg\min\limits_{\Theta_m}\sum_{i=1}^N L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) Θ^m=argΘmmini=1NL(yi,fm1(xi)+T(xi;Θm))

3.1 二分类提升树

  由于二分类问题,只需要将AdaBoost算法的基本分类器限制为二分类决策树即可,可以说,此时的提升树是AdaBoost算法的特例。此时模型的损失函数仍然是指数函数。

3.2 回归提升树

  根据回归决策树模型可知,此时的基本分类器可以将输入空间划分为J个互不相交的区域 R 1 , R 2 , . . . , R J R_1,R_2,...,R_J R1,R2,...,RJ,并且可以在每个区域确定对应的输出常量 c j c_j cj,此时基本分类器可以表示为:
T ( x ; Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x;\Theta)=\sum_{j=1}^J c_jI(x\in R_j) T(x;Θ)=j=1JcjI(xRj)
  回归提升树算法步骤的前半部和上文一样,唯一的区别是采用的损失函数不是指数函数,而是平方误差损失函数(也可用其他更一般的损失函数)。此时有:
L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 = [ r − T ( x ; Θ m ) ] 2 L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))=[y-f_{m-1}(x)-T(x;\Theta_m)]^2=[r-T(x;\Theta_m)]^2 L(yi,fm1(xi)+T(xi;Θm))=[yfm1(x)T(x;Θm)]2=[rT(x;Θm)]2
  其中 r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=yfm1(x),是当前模型拟合数据的残差。所以,对于回归问题的提升树算法来说,只需简单地拟合当前模型的残差即可。
  回归提升树算法的具体步骤

  • 输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ X ⊆ ℜ n , y i ∈ Γ ⊆ R x_i\in X\subseteq \real^n,y_i\in\Gamma\subseteq R xiXn,yiΓR
  • 输出:提升树 f M ( x ) f_M(x) fM(x)
  1. 初始化$f_0(x)=0;
  2. 对m=1,2,…,M,进行以下操作:
      a. 计算残差 r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N r_{mi}=y_i-f_{m-1}(x_i),i=1,2,...,N rmi=yifm1(xi),i=1,2,...,N
      b. 拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)
      c. 更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm)
  3. 得到回归问题提升树: f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)

3.3 梯度提升回归树(GDBT,Gradient Descent Boosting Tree)

  对于平方差损失或指数函数损失,提升树模型的过程都是比较简单的。但是如果损失函数转变为更一般的函数,那很可能每一步的优化就不会那么容易。因此Freidman提出了梯度提升算法,利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
− [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -\bigg[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\bigg]_{f(x)=f_{m-1}(x)} [f(xi)L(y,f(xi))]f(x)=fm1(x)
  作为回归问题提升树算法中的残差近似值,拟合回归树。
  梯度提升树算法的步骤

  • 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ X ⊆ ℜ n , y i ∈ Γ ⊆ R x_i\in X\subseteq \real^n,y_i\in\Gamma\subseteq R xiXn,yiΓR;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
  • 输出:回归树 f ^ ( x ) \hat{f}(x) f^(x)
  1. 初始化: f 0 ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y i , c ) f_0(x)=\arg\min\limits_c \sum_{i=1}^NL(y_i,c) f0(x)=argcmini=1NL(yi,c),即初始化为一个让损失函数最小的常数;
  2. 对m=1,2,…,M,进行如下操作:
      a. 对i=1,2,…,N,计算残差近似值:
    r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-\bigg[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\bigg]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(y,f(xi))]f(x)=fm1(x)
      b. 对 r m i r_{mi} rmi拟合一个回归树,得到第m棵树的叶节点划分区域 R m j , j = 1 , 2 , . . . , J R_{mj},j=1,2,...,J Rmj,j=1,2,...,J
      c. 对 j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J,计算每个区域对应的输出常数:
    c m j = arg ⁡ min ⁡ c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\arg\min\limits_c \sum_{x_i\in R_{mj}} L(y_i,f_{m-1}(x_i)+c) cmj=argcminxiRmjL(yi,fm1(xi)+c)
      d. 更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^J c_{mj}I(x\in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)
  3. 得到最终的GDBT: f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}(x)=f_M(x)=\sum_{m=1}^M\sum_{j=1}^J c_{mj}I(x\in R_{mj}) f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值