【机器学习算法】集成学习之Stacking,Bagging,AdaBoost

文章目录

  • 1.模型融合(aggregation models)
    • 1.1 uniform blending
    • 1.2 Linear Bleading
    • 1.3 Stacking (condition blending)
  • 2. Bagging
  • 3. AdaBoost(Adaptive Boosting)
  • 4.AdaBoost误差分析
  • 5.AdaBoost与前向分步算法

1.模型融合(aggregation models)

  假如我们有多个模型,要怎么灵活运用将这些模型的结果呢?可以使用模型融合(aggregation models) 的方式,将n个模型的输出进一步融合成为一个输出,得到我们想要的结果,那么怎么融合多个模型呢?常见的方法有以下几种:

1.1 uniform blending

  核心思想:少数服从多数,民主投票
  如果知道n个模型的输出,每个模型有一票,则最终的输出:
H ( x ) = s i g n ( ∑ t = 1 T h t ( x ) ) H(x)=sign(\sum_{t=1}^T h_{t}(x)) H(x)=sign(t=1Tht(x))
  如果是多分类,则最终输出得票数最多的分类即可。
  如果是预测数值型输出,则最终的输出:
H ( x ) = 1 T ∑ t = 1 T h t ( x ) H(x)=\frac{1}{T}\sum_{t=1}^Th_{t}(x) H(x)=T1t=1Tht(x)
  可以证明融合之后的模型要比原先的效果好(更稳定):
a v g ( ( h t ( x ) − f ( x ) ) 2 ) = a v g ( h t 2 − 2 h t f + f 2 ) = a v g ( h t 2 ) − 2 H f + f 2 = a v g ( h t 2 ) − H 2 + ( H − f ) 2 = a v g ( h t 2 ) − 2 H 2 + H 2 + ( H − f ) 2 = a v g ( h t 2 − 2 h t H + H 2 ) + ( H − f ) 2 = a v g ( ( h t − H ) 2 ) + ( H − f ) 2 \begin{aligned} avg((h_t(x)-f(x))^2) &= avg(h_t^2-2h_tf+f^2) \\ &= avg(h_t^2)-2Hf+f^2 \\ &= avg(h_t^2)-H^2+(H-f)^2 \\ &= avg(h_t^2)-2H^2+H^2 +(H-f)^2 \\ &= avg(h_t^2-2h_tH+H^2)+(H-f)^2 \\ &= avg((h_t-H)^2)+(H-f)^2 \end{aligned} avg((ht(x)f(x))2)=avg(ht22htf+f2)=avg(ht2)2Hf+f2=avg(ht2)H2+(Hf)2=avg(ht2)2H2+H2+(Hf)2=avg(ht22htH+H2)+(Hf)2=avg((htH)2)+(Hf)2
  其中, a v g ( ( h t ( x ) − f ( x ) ) 2 ) avg((h_t(x)-f(x))^2) avg((ht(x)f(x))2)代表原始模型的均方误差, ( H − f ) 2 (H-f)^2 (Hf)2表示融合模型的军方误差,它们之间相差了一个 a v g ( ( h t − H ) 2 ) avg((h_t-H)^2) avg((htH)2),因此有
a v g ( ( h t ( x ) − f ( x ) ) 2 ) ≥ ( H − f ) 2 avg((h_t(x)-f(x))^2) \ge (H-f)^2 avg((ht(x)f(x))2)(Hf)2
  对于uniform blending,每个模型的输出要有所不同,这样融合之后的效果才有可能比单一的模型效果要好,否则平均下来得到的还是一样的结果。

1.2 Linear Bleading

  核心思想 :让每个模型投票,但是给不同模型不同的票数,即给予它们不同的权重。最终的输出为:
H ( x ) = s i g n ( ∑ t = 1 T α t ⋅ h t ( x ) ) H(x)=sign(\sum_{t=1}^T \alpha_t·h_{t}(x)) H(x)=sign(t=1Tαtht(x))
此时要求解的目标为:
min ⁡ a t ≥ 0 1 N ( y n − ∑ t = 1 T a t h t ( x n ) ) 2 \min_{a_t\ge 0}\frac{1}{N}\left(y_n-\sum_{t=1}^Ta_th_t(x_n)\right )^2 at0minN1(ynt=1Tatht(xn))2

1.3 Stacking (condition blending)

  核心思想 :让每个模型投票,但是在不同的条件下给不同模型不同的的权重,采用非线性的方式将模型的输出融合。这种方式比较强大,有过拟合的风险。
【机器学习算法】集成学习之Stacking,Bagging,AdaBoost_第1张图片
  stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型。
  通常使用K-fold来实现Stacking,假设我们使用5折交叉验证,有10000行训练集,2500行验证集,对于一个模型来说,5次交叉验证会将10000个训练集分成5份,每份2000个数据,每次以其中一份作为测试集,这样10000个数据都会被测试一次,最终我们可以得到 10000 × 1 10000 \times 1 10000×1的矩阵 A 1 A_1 A1,同时每次交叉验证的时候都会对验证集进行预测,每次都可以得到一个 2500 × 1 2500 \times 1 2500×1的矩阵,共得到5个。对于同一个样本的预测,我们使用平均的方式,最终5个矩阵合并为1个 2500 × 1 2500 \times 1 2500×1的矩阵 B 1 B_1 B1。由于我们是在融合多个模型,自然不止一个模型。假如我们还有模型 M o d e l 2 , M o d e l 3 , . . . , M o d e l n Model_2,Model_3,...,Model_n Model2Model3...Modeln,对于每一个模型重复上述步骤,我们可以得到 A 2 , B 2 , A 3 , B 3 , . . . A n , B n A_2,B_2,A_3,B_3,...A_n,B_n A2,B2,A3,B3,...An,Bn。将所有的A,B矩阵按列合并起来,得到 A t o t a l , B t o t a l A_{total},B_{total} Atotal,Btotal。以上步骤是Stacking第一层所完成的事情。
  将得到的 A t o t a l A_{total} Atotal作为第二层的训练集, B t o t a l B_{total} Btotal作为第二层的测试集,使用Liner Regression来总结所有模型的效果,得到最终的预测效果。

2. Bagging

  如果说,我们一开始并没有很多个模型,也就无法运用上面的技巧了。因此我们需要通过学习的方式来得到多个模型,一边决定怎么把它们合起来。其中,Bagging是一种通过Bootstraping学习得到多个模型并利用uniform blending来融合模型的方法。
  Bootstraping:从已有的样本中有放回地随机取n份样本。即同一个样本可能被取到多次。假如有10000个样本,可以迭代三千次,每次都取出一份bootstrap sample,每份bootstrap sample可以看做是新的数据,从而我们得到了3000个模型 h t h_t ht。这是Bagging套袋法中一个重要的步骤。
  Bagging的算法过程如下:

  1. 从原始样本集中按照Bootstraping方法抽取n个样本,共进行k次,得到k组训练集。
  2. 使用k组训练集得到k个模型。
  3. 对于分类问题使用投票的方式得到分类结果,对于回归问题使用均值作为最后的结果。

  如果我们的模型对数据的随机性比较敏感的话,采用BAGging的方式得到的融合模型往往很有效果。

3. AdaBoost(Adaptive Boosting)

  在Bagging的过程中,每次Boostraping取到的样本都是独立随机的。而在模型融合的算法中,我们认为每个基分类器如果越不一样的,则融合得到的效果是最好的。考虑这样一种情况,在当前一轮取到的样本得到的模型 h t 1 h_{t1} ht1,如果让他在 h t 2 h_{t2} ht2的表现变得和抛硬币的情况一样,那么在 h t 2 h_{t2} ht2的样本就会使得 h t 2 h_{t2} ht2 h t 1 h_{t1} ht1的差别变大,也就是说两个分类器会得到很不一样的决策边界。
  而boostraping的过程其实就是在给样本赋予不同权重的过程,比如说,我们取到了3个样本1,,0个样本2,1个样本3,那么他们的权重就分别是3,0,1。要改变下一个模型的表现,其实只要修改它们的权重即可。令 ϵ \epsilon ϵ表示当前模型下分类错误的比例。则我们的权重优化操作为:

  • 将正确分类的样本权重乘上 ϵ \epsilon ϵ
  • 将错误分类的样本权重乘上 1 − ϵ 1-\epsilon 1ϵ

  或者我们进一步定义放缩因子 t = 1 − ϵ ϵ t=\sqrt{\frac{1-\epsilon}{\epsilon}} t=ϵ1ϵ ,则权重优化操作变为:

  • 将正确分类的样本权重除以 t t t
  • 将错误分类的样本权重乘上 t t t

  在通常 ϵ \epsilon ϵ都要小于 1 2 \frac{1}{2} 21,否则我们的基学习器就比抛硬币的概率还低了。此时 t ≥ 1 t\ge 1 t1,则上面的式子表现为增大错误分类的权重,缩小正确分类的权重。经过上面的修正,当前模型的表现就会变成五五开的情况。
  通常一开始的权重u初始化为 1 N \frac{1}{N} N1,即每个样本都取一次。
  那我们最终要怎么确定每个模型 h t h_t ht在最终模型h中占用的权重呢?考虑模型有的可能变现较差,有的表现较好,那么给予不同的权重是一个合理的选择。对于一个表现良好的模型 h t h_t ht,它的缩放因子t会更大,因此可以考虑使用 ln ⁡ t \ln t lnt。当t越大时,错误率 ϵ \epsilon ϵ越低,得到的权重越大,当t=1时,错误率 ϵ \epsilon ϵ 1 2 \frac{1}{2} 21 ln ⁡ t \ln t lnt=0,即这样的模型不予考虑,因为他跟抛硬币没什么区别。
  对于权重更新的式子可以合并为
u m + 1 , i = u m , i Z m ⋅ e x p ( − α m y i G m ( x i ) ) , i = 1 , 2... , N Z m = ∑ i = 1 N u m , i exp ⁡ ( − α m y i G m ( x i ) ) u_{m+1,i}=\frac{u_{m,i}}{Z_m}·exp\left(-\alpha_my_iG_m(x_i)\right) ,i=1,2...,N\\ Z_m=\sum_{i=1}^Nu_{m,i}\exp (-\alpha_my_iG_m(x_i)) um+1,i=Zmum,iexp(αmyiGm(xi)),i=1,2...,NZm=i=1Num,iexp(αmyiGm(xi))
  其中 Z m Z_m Zm为规范化因子。构建基本分类器的线性组合
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\left(\sum_{m=1}^M\alpha_mG_m(x)\right) G(x)=sign(f(x))=sign(m=1MαmGm(x))
  最终我们得到Adaptive Boosting的算法流程如下:

  1. 初始化权重 u 1 = [ 1 N , 1 N , . . . , 1 N ] u_1=[\frac{1}{N},\frac{1}{N},...,\frac{1}{N}] u1=[N1,N1,...,N1]
  2. 根据当前权重 u u u学习基本分类器 G m ( x ) G_m(x) Gm(x)
  3. 获得当前错误率 ϵ m = P ( G m ( x i ) ≠ y i ) = ∑ G m ( x i ) ≠ y i w m , i \epsilon_m=P(G_m(x_i)\ne y_i)=\sum\limits_{G_m(x_i)\ne y_i}w_{m,i} ϵm=P(Gm(xi)̸=yi)=Gm(xi)̸=yiwm,i
  4. 计算当前模型在融合模型中的权重 α m = 1 2 ln ⁡ 1 − ϵ m ϵ m \alpha_m=\frac{1}{2}\ln\frac{1-\epsilon_m}{\epsilon_m} αm=21lnϵm1ϵm
  5. 计算缩放因子 t = 1 − ϵ m ϵ m t=\sqrt{\frac{1-\epsilon_m}{\epsilon_m}} t=ϵm1ϵm
  6. 更新 u m + 1 , i = { u m , i Z m e − α m G m ( x i ) = y i u m , i Z m e α m G m ( x i ) ≠ y i u_{m+1,i}=\begin{cases}\frac{u_{m,i}}{Z_m}e^{-\alpha_m} & G_m(x_i)=y_i \\ \frac{u_{m,i}}{Z_m}e^{\alpha_m} & G_m(x_i)\ne y_i \end{cases} um+1,i={Zmum,ieαmZmum,ieαmGm(xi)=yiGm(xi)̸=yi,即将正确分类样本的权重降低,将错误分类样本的权重提高。
  7. 重复步骤2-6 M次。
  8. 得到最终模型 G ( x ) G(x) G(x)

4.AdaBoost误差分析

  当 G ( x i ) ≠ y i G(x_i) \ne y_i G(xi)̸=yi时, y i f ( x i ) < 0 y_if(x_i) \lt 0 yif(xi)<0,因而 exp ⁡ ( − y i f ( x i ) ) ≥ 1 \exp (-y_if(x_i))\ge 1 exp(yif(xi))1。则有 1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i exp ⁡ ( − y i f ( x i ) ) \frac{1}{N}\sum\limits_{i=1}^NI(G(x_i)\ne y_i)\le \frac{1}{N}\sum\limits_i\exp(-y_if(x_i)) N1i=1NI(G(xi)̸=yi)N1iexp(yif(xi))
  又
1 N ∑ i exp ⁡ ( − y i f ( x i ) ) = 1 N ∑ i exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i u 1 , i ∏ m = 1 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 ∑ i u 2 , i ∏ m = 2 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 Z 2 ∑ i u 3 , i ∏ m = 3 M exp ⁡ ( − α m y i G m ( x i ) ) = . . . = Z 1 Z 2 . . . Z M − 1 ∑ i u M , i exp ⁡ ( − α m y i G m ( x i ) ) = ∏ m = 1 M Z m \begin{aligned} &\frac{1}{N}\sum\limits_i\exp(-y_if(x_i))\\ &=\frac{1}{N}\sum\limits_i\exp\left(-\sum_{m=1}^M\alpha_my_iG_m(x_i)\right)\\ &=\sum_iu_{1,i}\prod_{m=1}^M\exp(-\alpha_my_iG_m(x_i))\\ &=Z_1\sum_iu_{2,i}\prod_{m=2}^M\exp(-\alpha_my_iG_m(x_i))\\ &=Z_1Z_2\sum_iu_{3,i}\prod_{m=3}^M\exp(-\alpha_my_iG_m(x_i))\\ &=...\\ &=Z_1Z_2...Z_{M-1}\sum_iu_{M,i}\exp(-\alpha_my_iG_m(x_i))\\ &=\prod_{m=1}^MZ_m\\ \end{aligned} N1iexp(yif(xi))=N1iexp(m=1MαmyiGm(xi))=iu1,im=1Mexp(αmyiGm(xi))=Z1iu2,im=2Mexp(αmyiGm(xi))=Z1Z2iu3,im=3Mexp(αmyiGm(xi))=...=Z1Z2...ZM1iuM,iexp(αmyiGm(xi))=m=1MZm
  因此AdaBoost最终分类器的训练误差界为
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i exp ⁡ ( − y i f ( x i ) ) = ∏ m Z m \frac{1}{N}\sum_{i=1}^NI(G(x_i)\ne y_i)\le \frac{1}{N}\sum_i\exp(-y_if(x_i))=\prod_mZ_m N1i=1NI(G(xi)̸=yi)N1iexp(yif(xi))=mZm
  结论:每一轮可以选取适当的 G m G_m Gm使得 Z m Z_m Zm最小,从而使得训练误差下降最快。
  在二分类问题里,令 γ m = 1 2 − ϵ m \gamma_m=\frac{1}{2}-\epsilon_m γm=21ϵm,有
Z m = ∑ i = 1 N u m , i exp ⁡ ( − α m y i G m ( x i ) ) = ∑ y i = G m ( x i ) u m , i e − a m + ∑ y i ≠ G m ( x i ) u m , i e a m = ( 1 − ϵ m ) e − a m + ϵ m e a m = 2 ϵ m ( 1 − ϵ m ) = 1 − 4 γ m 2 \begin{aligned} Z_m &=\sum_{i=1}^Nu_{m,i}\exp(-\alpha_my_iG_m(x_i))\\ &=\sum_{y_i=G_m(x_i)}u_{m,i}e^{-a_m}+\sum_{y_i \ne G_m(x_i)}u_{m,i}e^{a_m}\\ &=(1-\epsilon_m)e^{-a_m}+\epsilon_me^{a_m}\\ &=2\sqrt{\epsilon_m(1-\epsilon_m)}\\ &=\sqrt{1-4\gamma_m^2} \end{aligned} Zm=i=1Num,iexp(αmyiGm(xi))=yi=Gm(xi)um,ieam+yi̸=Gm(xi)um,ieam=(1ϵm)eam+ϵmeam=2ϵm(1ϵm) =14γm2
  再由 e x e^x ex 1 − x \sqrt{1-x} 1x 在点x=0处的泰勒展开式推出不等式 ( 1 − 4 γ m 2 ) ≤ exp ⁡ ( − 2 γ m 2 ) \sqrt{(1-4\gamma_m^2)}\le \exp(-2\gamma_m^2) (14γm2) exp(2γm2),从而有
∏ m = 1 M ( 1 − 4 γ m 2 ) ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) \prod_{m=1}^M\sqrt{(1-4\gamma_m^2)} \le \exp(-2\sum_{m=1}^M\gamma_m^2) m=1M(14γm2) exp(2m=1Mγm2)
  则二分类的训练误差界为
∏ m = 1 M Z m = ∏ m = 1 M 1 − 4 γ m 2 ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) \prod_{m=1}^MZ_m=\prod_{m=1}^M\sqrt{1-4\gamma_m^2} \le \exp(-2\sum_{m=1}^M\gamma_m^2) m=1MZm=m=1M14γm2 exp(2m=1Mγm2)
  如果存在 γ > 0 \gamma \gt 0 γ>0,对所有m有 γ m ≥ γ \gamma_m \ge \gamma γmγ,则
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ exp ⁡ ( − 2 M γ 2 ) \frac{1}{N}\sum_{i=1}^NI(G(x_i)\ne y_i)\le \exp(-2M\gamma^2) N1i=1NI(G(xi)̸=yi)exp(2Mγ2)
  这表明在此条件下Adaboost的训练误差是以指数速率下降的!

5.AdaBoost与前向分步算法

  其实AdaBoost是当前向分步算法损失函数为指数损失时的特例。 前向分步算法如下:

  1. 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
  2. 对m=1,2,…,M,极小化损失函数 ( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; y ) ) (\beta_m,\gamma_m)=\arg \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;y)) (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;y))得到参数 β m , γ m \beta_m,\gamma_m βm,γm。然后更新 f m ( x ) = f m − 1 ( x ) + β m b ( x ; y m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;y_m) fm(x)=fm1(x)+βmb(x;ym)
  3. 得到加法模型 f ( x ) = ∑ m = 1 M β m b ( x ; y m ) f(x)=\sum_{m=1}^M\beta_m b(x;y_m) f(x)=m=1Mβmb(x;ym)

  前向分步算法将同时求解M个模型的参数 β m , γ m \beta_m,\gamma_m βm,γm的优化问题简化为逐次求解各个 β m , γ m \beta_m,\gamma_m βm,γm。这与AdaBoost的步骤一致。
  当前向分步算法的损失函数是
L ( y , f ( x ) ) = exp ⁡ [ − y f ( x ) ] L(y,f(x))=\exp [-yf(x)] L(y,f(x))=exp[yf(x)]
时,等价于AdaBoost算法学习的具体步骤。
  假设经过m-1轮迭代后已经得到 f m − 1 ( x ) f_{m-1}(x) fm1(x),在第m轮时,需要迭代得到 a m , G m ( x ) 和 f m ( x ) a_m,G_m(x)和f_m(x) am,Gm(x)fm(x),有
f m ( x ) = f m − 1 ( x ) + a m G m ( x ) f_m(x)=f_{m-1}(x)+a_mG_m(x) fm(x)=fm1(x)+amGm(x)
  目标是让前向分步算法中得到的 a m a_m am G m ( x ) G_m(x) Gm(x)使 f m ( x ) f_m(x) fm(x)在训练集T上的指数损失最小,即
( a m , G m ( x ) ) = arg ⁡ min ⁡ a , G ∑ i = 1 N exp ⁡ [ − y i ( f m − 1 ( x i ) + a G ( x i ) ) ] = arg ⁡ min ⁡ a , G ∑ i = 1 N u ˉ m , i exp ⁡ [ − y i a G ( x i ) ] . . . . . . . . . . ( 1 ) (a_m,G_m(x))=\arg \min_{a,G}\sum_{i=1}^N\exp [-y_i(f_{m-1}(x_i)+aG(x_i))] \\ =\arg \min_{a,G}\sum_{i=1}^N\bar u_{m,i}\exp [-y_iaG(x_i)] ..........(1) (am,Gm(x))=arga,Gmini=1Nexp[yi(fm1(xi)+aG(xi))]=arga,Gmini=1Nuˉm,iexp[yiaG(xi)]..........(1)
  其中 u ˉ m , i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar u_{m,i}=\exp[-y_if_{m-1}(x_i)] uˉm,i=exp[yifm1(xi)],为当前已知量,与最小化无关。
  使式子1最小的G(x)为
G m ∗ ( x ) = arg ⁡ min ⁡ G ∑ i = 1 N u ˉ m , i I ( y i ≠ G ( x i ) ) G^*_m(x)=\arg \min_G\sum_{i=1}^N\bar u_{m,i}I(y_i \ne G(x_i)) Gm(x)=argGmini=1Nuˉm,iI(yi̸=G(xi))
  此分类器即为AdaBoost算法学习的基本分类器 G m ( x ) G_m(x) Gm(x),它是使第m轮数据分类误差率最小的分类器。
∑ i = 1 N u ˉ m , i exp ⁡ [ − y i a G ( x i ) ] = ∑ y i = G m ( x i ) u ˉ m , i e − a + ∑ y i ≠ G m ( x i ) u ˉ m , i e a = ∑ y i = G m ( x i ) u ˉ m , i e − a + ∑ y i ≠ G m ( x i ) u ˉ m , i e a + ∑ y i ≠ G m ( x i ) u ˉ m , i e − a − ∑ y i ≠ G m ( x i ) u ˉ m , i e − a = ( e a − e − a ) ∑ i = 1 N u ˉ m , i I ( y i ≠ G ( x i ) ) + e − a ∑ i = 1 N u ˉ m , i \begin{aligned} &\sum_{i=1}^N\bar u_{m,i}\exp [-y_iaG(x_i)]\\ &=\sum_{y_i=G_m(x_i)}\bar u_{m,i}e^{-a}+\sum_{y_i \ne G_m(x_i)}\bar u_{m,i}e^a \\ &=\sum_{y_i=G_m(x_i)}\bar u_{m,i}e^{-a}+\sum_{y_i \ne G_m(x_i)}\bar u_{m,i}e^a +\sum_{y_i \ne G_m(x_i)}\bar u_{m,i}e^{-a} -\sum_{y_i \ne G_m(x_i)}\bar u_{m,i}e^{-a} \\ &=(e^a-e^{-a})\sum_{i=1}^N\bar u_{m,i}I(y_i \ne G(x_i))+e^{-a}\sum_{i=1}^N\bar u_{m,i} \end{aligned} i=1Nuˉm,iexp[yiaG(xi)]=yi=Gm(xi)uˉm,iea+yi̸=Gm(xi)uˉm,iea=yi=Gm(xi)uˉm,iea+yi̸=Gm(xi)uˉm,iea+yi̸=Gm(xi)uˉm,ieayi̸=Gm(xi)uˉm,iea=(eaea)i=1Nuˉm,iI(yi̸=G(xi))+eai=1Nuˉm,i
  由于已经求出 G m ( x ) G_m(x) Gm(x),我们将其带入,对a求导并使其导数为0,得到
a m ∗ = 1 2 log ⁡ 1 − ϵ m ϵ m a_m^*=\frac{1}{2}\log \frac{1-\epsilon_m}{\epsilon_m} am=21logϵm1ϵm
  其中
ϵ m = ∑ i = 1 N u ˉ m , i I ( y i ≠ G m ( x i ) ) ∑ i = 1 N u ˉ m , i \epsilon_m=\frac{\sum_{i=1}^N\bar u_{m,i}I(y_i \ne G_m(x_i))}{\sum_{i=1}^N\bar u_{m,i}} ϵm=i=1Nuˉm,ii=1Nuˉm,iI(yi̸=Gm(xi))
  跟AdaBoost中的 a m a_m am完全一致。
  而权重的更新由 f m = f m − 1 + a m G m ( x ) f_m=f_{m-1}+a_mG_m(x) fm=fm1+amGm(x)以及 u ˉ m , i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar u_{m,i}=\exp[-y_if_{m-1}(x_i)] uˉm,i=exp[yifm1(xi)]
u ˉ m + 1 , i = u ˉ m , i exp ⁡ [ − y i a m G m ( x ) ] \bar u_{m+1,i}=\bar u_{m,i}\exp [-y_ia_mG_m(x)] uˉm+1,i=uˉm,iexp[yiamGm(x)]
  添上规范化因子 Z m Z_m Zm就与AdaBoost中的权值更新公式等价。

你可能感兴趣的:(机器学习之旅)