本文将记录《统计学习方法》中有关提升学习Adaboost的内容。
Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

提升算法需要解决的问题:
1)如何计算弱分类器学习误差率e?
2) 如何得到弱学习器权重系数α?
3)如何更新样本权重D?
4) 使用何种结合策略结合得到强学习算法?

Adaboost分类算法

输入:数据集 T = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),...,(x_N,y_N)\} T={(x1​,y1​),...,(xN​,yN​)}
输出:最终的强分类器

  1. 初始化了全部样本的权重:
    W 0 = { w 1 0 , . . . w N 0 } ,    w i 0 = 1 N W^0=\{w_1^0,...w_N^0\},\;w_i^0=\frac{1}{N} W0={w10​,...wN0​},wi0​=N1​
  2. 对于m=1,2…,M次迭代的弱分类器:
    1. 对上次的样本权重构建弱分类器: G m G_m Gm​
    2. 计算在弱分类器上的分类误差:
      E m = ∑ i N w i m I ( G m ( x i ̸ = y i ) ) E_m=\sum_i^Nw^m_iI(G_m(x_i\not=y_i)) Em​=i∑N​wim​I(Gm​(xi​̸​=yi​))
    3. 计算该弱分类器的结合权重:
      α m = 1 2 l o g E m 1 − E m \alpha_m=\frac{1}{2}log{E_m \over1-E_m } αm​=21​log1−Em​Em​​
    4. 调整样本权重:
      W m + 1 = { w i m + 1 , . . . , w N m + 1 } w i m + 1 = w i m Z e − α i y i G m ( x i ) Z = ∑ i N w i m + 1 W^{m+1} = \{w^{m+1}_i,...,w^{m+1}_N\}\\ w^{m+1}_i= {w^m_i\over Z }e^{-\alpha_iy_iG_m(x_i)}\\ Z=\sum_i^N w^{m+1}_i Wm+1={wim+1​,...,wNm+1​}wim+1​=Zwim​​e−αi​yi​Gm​(xi​)Z=i∑N​wim+1​

3.构建强分类器的集合策略采用的加权:
f ( x ) = ∑ m M α m G m G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m M α m G m ) f(x)=\sum_m^M\alpha_mG_m\\ G(x)=sign(f(x))=sign(\sum_m^M\alpha_mG_m) f(x)=m∑M​αm​Gm​G(x)=sign(f(x))=sign(m∑M​αm​Gm​)

Adaboost回归算法

输入: T = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),...,(x_N,y_N)\} T={(x1​,y1​),...,(xN​,yN​)}
输出:最终的强回归算法

  1. 初始化了全部样本的权重:
    W 0 = { w 1 0 , . . . w N 0 } ,    w i 0 = 1 N W^0=\{w_1^0,...w_N^0\},\;w_i^0=\frac{1}{N} W0={w10​,...wN0​},wi0​=N1​

  2. 对于m=1,2…M的弱回归算法:

    1. 构建弱回归算法 G m G_m Gm​

    2. 计算在该弱学习算法上的最大误差,得到每个样本的相对误差:
      E m = max ⁡ ∣ y i − G m ( x i ) ∣ e i m = ∣ y i − G m ( x i ) ∣ E m E_m=\max{|y_i-G_m(x_i)|}\\ e^m_i={|y_i-G_m(x_i)|\over E_m} Em​=max∣yi​−Gm​(xi​)∣eim​=Em​∣yi​−Gm​(xi​)∣​

      如果采用平方误差, e i m = ( y i − G m ( x i ) ) 2 E m 2 e^m_i={(y_i-G_m(x_i))^2\over E^2_m} eim​=Em2​(yi​−Gm​(xi​))2​;
      如果采用指数误差 e i m = 1 − e x p ( − y i + G m ( x i ) E m ) e^m_i=1-exp({-y_i+G_m(x_i)\over E_m}) eim​=1−exp(Em​−yi​+Gm​(xi​)​)

      得到该弱回归算法的误差率:
      e m = ∑ i N w i m e i m e^m=\sum_i^Nw^m_ie^m_i em=i∑N​wim​eim​

    3. 计算该弱回归算法的结合权重:
      α m = e m 1 − e m \alpha_m={e^m\over 1-e^m} αm​=1−emem​

    4. 更新样本权重:
      W m + 1 = { w i m + 1 , . . . , w N m + 1 } w i m + 1 = w i m Z α m 1 − e i m Z = ∑ i N w i m + 1 W^{m+1} = \{w^{m+1}_i,...,w^{m+1}_N\}\\ w^{m+1}_i= {w^m_i\over Z }\alpha^{1-e^m_i}_m\\ Z=\sum_i^N w^{m+1}_i Wm+1={wim+1​,...,wNm+1​}wim+1​=Zwim​​αm1−eim​​Z=i∑N​wim+1​

  3. 弱回归算法结合策略:
    f ( x ) = ∑ k ( l n 1 a k ) g ( x ) f(x)=\sum_k(ln\frac{1}{a_k})g(x) f(x)=k∑​(lnak​1​)g(x)

前向分步算法

前向分布算法是一个加法算法,将前面的弱学习算法通过对之前的算法一步一步的求和,强算法由弱算法加权得到,利用前一个弱学习来更新后一个弱学习的权重。
那么对于第K-1轮强学习算法:
f k − 1 = ∑ i k − 1 α i G i ( x ) f_{k-1}=\sum^{k-1}_i\alpha_iG_i(x) fk−1​=i∑k−1​αi​Gi​(x)
对于第K轮强学习算法
f k = ∑ i k α i G i ( x ) f_{k}=\sum^{k}_i\alpha_iG_i(x) fk​=i∑k​αi​Gi​(x)
对比可知:
f k − 1 = f k − 1 ( x ) + ∑ i k − 1 α i G i ( x ) f_{k-1}=f_{k-1}(x)+\sum^{k-1}_i\alpha_iG_i(x) fk−1​=fk−1​(x)+i∑k−1​αi​Gi​(x)
定义损失函数:
∑ L ( y i , f k − 1 ( x ) + α G ( x ; γ ) \sum L(y_i,f_{k-1}(x)+\alpha G(x;\gamma) ∑L(yi​,fk−1​(x)+αG(x;γ)
最小化损失函数:
( α ∗ , γ ∗ ) = arg ⁡ min ⁡ ∑ L ( y i , f m − 1 ( x ) + α G ( x , γ ) ) (\alpha^*,\gamma^*)=\arg \min \sum L(y_i,f_{m-1}(x)+\alpha G(x,\gamma)) (α∗,γ∗)=argmin∑L(yi​,fm−1​(x)+αG(x,γ))
更新强学习算法:
f m ( x ) = f m − 1 ( x ) + α m ∗ G ( x , γ ∗ ) f_m(x)=f_{m-1}(x)+\alpha_m^*G(x,\gamma^*) fm​(x)=fm−1​(x)+αm∗​G(x,γ∗)

更多推荐