集成學習(二):AdaBoost與LogitBoost


總結兩種具體的提升算法:

 

AdaBoost算法:

 

         AdaBoost的基本想法是不斷調整訓練數據中樣本的權值來訓練新的學習器,對於當前誤分類的點在下一步中就提高權重“重點關照一下”,最后再將所有的弱分類器做加權和,對於分類正確率高的權重給得大大(更可靠),分類正確率低的給的權重低乃至是負的權重。其具體的算法可以用前向分布可加模型,配以指數損失函數得到,具體推導如下:

         我們這里討論二分類問題。設學習訓練集$D=\lbrace (x_{1},y_{1}),...,(x_{N},y_{N}),y_{i}\in\lbrace -1,+1\rbrace\rbrace$, 我們有某個基准的二分類算法$b$,輸出為類別$+1$或者$-1$,我們希望用$M$步學習得到某個學習器:$f=\sum_{m=1}^{M}\alpha_{m}b_{m}$使得誤差:

 \begin{equation}L(f)=\sum_{i=1}^{M}e^{-y_{i}f(x_{i})}\end{equation} 

最小。

        我們現在可以考慮其前向分步可加模型了,為方便起見我們令$f_{0}=0$。對任意的$m=1,...,T$,第$m$步學習時,我們已經得到了基模型$b_{1},...,b_{m-1}$以及相應的權重$\alpha_{k}$,且令$f_{m-1}=\sum_{k=1}^{m-1}\alpha_{k}b_{k}$, 那么我們現在只需要求$\alpha_{m}$,$b_{m}$使得$L(f_{m-1}+\alpha_{m}b_{m})$盡量小。

        這時候我們計算:

    \[\exp(-y_{i}f_{m-1}(x_{i})-\alpha_{m}b_{m}(x_{i})y_{i})=\begin{cases} e^{-y_{i}f_{m-1}(x_{i})}\cdot e^{-\alpha_{m}}& \text{if }y_{i}=b_{m}(x_{i}),\\  e^{-y_{i}f_{m-1}(x_{i})}\cdot e^{+\alpha_{m}} & \text{if } y_{i}\neq b_{m}(x_{i}).\end{cases}\]

       上式也可以寫成:

   \begin{split}\exp(-y_{i}-\alpha_{m}b_{m}(x_{i})y_{i})=&(e^{+\alpha_{m}}-e^{-\alpha_{m}})\cdot \overline{w}_{m,i}l_{0-1}(b_{m}(x_{i}),y_{i})\newline +& \overline{w}_{m,i}\cdot e^{-\alpha_{m}} \end{split}

   其中:$\overline{w}_{m,i}=e^{-y_{i}f_{m-1}(x_{i})}$, 上式兩邊同時取$\sum_{i=1}^{N}$我們立即得到:

   $$L(f_{m-1}+\alpha_{m}b_{m})=(e^{\alpha_{m}}-e^{-\alpha_{m}})\sum_{i=1}^{N}\overline{w}_{m,i}l_{01}(b_{m}(x_{i}),y_{i})+e^{-\alpha_{m}}\sum_{i=1}^{N}\overline{w}_{m,i}$$

       注意到要使得上式盡量小,務必使:

                                                      $$\sum_{i=1}^{N}\overline{w}_{m,i}l_{01}(b_{m}(x_{i}),y_{i})$$

  盡量小, 那么b_{m}就應該以第$i$個樣本賦予權重$w_{m,i}=\overline{w}_{m,i}/\overline{W}_{m}$來進行訓練模型,其中$\overline{W}_{m}=\sum_{i=1}^{N}w_{m,i}.$我們同時注意到:

\begin{split}L(f_{m-1}+\alpha_{m}b_{m})=&e^{-\alpha_{m}}\sum_{i=1}^{N}\overline{w}_{m,i}(1-l_{0,1}(b_{m}(x_{i}),y_{i}))+e^{\alpha_{m}}\sum_{i=1}^{N}\overline{w}_{m,i}(l_{0,1}(b_{m}(x_{i}),y_{i}))\newline =& \overline{W}[e^{-\alpha_{m}}(1-Err_{m})+e^{+\alpha_{m}}Err_{m}]\end{split}

其中$Err_{m}$是$b_{m}$的在權重$w_{m,i}$下的誤分類率。上式顯然在:

$$\alpha_{m}=\frac{1}{2}\log\frac{1-Err_{m}}{Err_{m}}$$

取得最小值,所以我們應該取$\alpha_{m}=\frac{1}{2}\log\frac{1-Err_{m}}{Err_{m}}$。 

        現在我們總結一下上述推導出來的兩個要點:

  • 每一步調整訓練數據的權重,使得$w_{m,i}=e^{-y_{i}f_{m-1}(x_{i})}/\overline{W}$,注意到其實$w_{m,i}$與之前的權重$w_{m-1,i}$滿足: \begin{equation}w_{m,i}=w_{m-1,i}\cdot e^{-\alpha_{m-1}y_{i}b_{m-1}(x_{i})}/\sum_{i=1}^{N}w_{m-1,i}\cdot e^{-\alpha_{m-1}y_{i}b_{m-1}(x_{i})}\end{equation}從中也看出,對於分類出錯的點,下一次學習中也將分配更大的權重。這一點也很容易理解,那就是出問題的將被重點照顧一下,以提高爭取率。
  • 每一步基模型的權重為$\alpha_{m}=\frac{1}{2}\log\frac{1-Err_{m}}{Err_{m}}$,可以觀察到,模型的錯誤率越小,其分配的權重就越大,其在“委員會”里的發言權就越大,這也很好理解。

 

綜上所述AdaBoost算法的流程如下:


 

            輸入:數據集$D=\lbrace(x_{1},y_{1})...(x_{N},y_{N})\rbrace$,其中$x_{i}\in\mathbb{R}^{P}$,$y_{i}\in\lbrace -1,+1\rbrace$; 正整數$M>0$; 基算法$b$。

            輸出:某分類器

            Step1:  選擇初始權值:$w_{1,i}=1/N$, i=1,...,N;

            Step2:  對m=1,...,M, 執行:

                                                1)以第$i$個樣本配以權值$w_{m,i}$,用基算法訓練得到模型$b_{m}$;

                                                2)計算出$b_{m}$的在權重$w_{m,i}$之下的誤分類率$Err_{m}$

                                                3)計算出系數:\begin{equation}\alpha_{m}=\frac{1}{2}\log\frac{1-Err_{m}}{Err_{m}}\end{equation}

                                                4)如果m<M則計算下一步學習的樣本權重:\begin{equation}w_{m+1,i}=\begin{cases} w_{m,i}\cdot e^{\alpha_{m}}& \text{if $b_{m}$ missclassifies the i-th sample},\\  w_{m,i}\cdot e^{-\alpha_{m}} & \text{otherwise} .\end{cases}\end{equation}

                                                    除以適當的常數使得$\sum_{i=1}^{N}w_{m+1,i}=1$

            Step3:  輸出模型$f=\text{sign}(\sum_{m=1}^{M}\alpha_{m}b_{m})$

 

 

            


 

AdaBoost 對訓練集誤分類率的估計

 

          定理:設AdaBoost第m步的誤分類率為$Err_{m}$, $\gamma_{m}\triangleq\frac{1}{2}-Err_{m}$, 則最終得到的分類器$f=\text{sign}(\sum_{m=1}^{M}\alpha_{m}b_{m})$的誤分類率滿足:

                                      \begin{equation}\frac{1}{N}\sum_{i=1}^{N}l_{01}(f(x_{i}),y_{i})\leq \exp(-2\sum_{m=1}^{M}\gamma_{i}^{2})\end{equation}  

    

          推論:如果對每一個弱分類器$\gamma_{m}\geq \gamma>0$,則:

 

                                      \begin{equation}\frac{1}{N}\sum_{i=1}^{N}l_{01}(f(x_{i}),y_{i})\leq \exp(-2M\gamma^{2})\end{equation}       

 

AdaBoost 的優缺點:

      優點:1)分類精度很高

                     2)是一種框架性算法,靈活性高,可以自由選擇弱分類器的類型。

                     3)不容易過擬合

          缺點:正是由於每次對於誤分類點賦予很大的權重將導致AdaBoost模型對異常點的魯棒性很差。

 

LogitBoost算法

 

          AdaBoost對於誤分類點的懲罰過大造成對異常點敏感,並且不能預測類別的概率。LogitBoost算法可以彌補這兩個缺憾,它采樣前向分步可加模型,損失函數選取為對數損失函數,每一步迭代的時候是考慮牛頓下降法應用於誤差函數來更新模型,具體說來如下:

          對於數據$D=\lbrace(x_{1},y_{1}),...,(x_{N},y_{N})\rbrace$, $x_{i}\in\mathbb{R}^{P}$, $y_{i}\in\lbrace+1,-1\rbrace,$, 某種基准回歸算法$b$, 我們用前向分布可加模型依次利用數據集$D$,算法$b$訓練得到模型$b_{m}$, $m=1,...,M$, 最終集成為模型$f=\sum_{m=1}^{M}b_{i}$,其中損失函數我們選擇:

                                                                \begin{equation}L(f)=\sum_{i=1}^{N}\log(1+e^{-y_{i}f(x_{i})})\end{equation}

         並且我們可以預測概率:\begin{equation}P(Y=1\mid X=x)=\frac{1}{1+e^{-f(x)}}\end{equation}

         所謂的牛頓下降法在XGBoost中有應用, 我們簡要看一下。為了接下來討論方便我們令函數:$l:\mathbb{R}\times\mathbb{R}\longrightarrow \mathbb{R}$, $l(t,y)\triangleq\log(1+e^{-ty})$。容易計算得到:

                                              \begin{equation}\partial_{1}l(t,y)=\frac{-ye^{-ty}}{1+e^{-ty}}\end{equation}

                                              \begin{equation}\partial^{2}_{11}l(t,y)=\frac{e^{-ty}}{(1+e^{-ty})^{2}}\end{equation}                                                   

         在前向分布的第$m$步迭代的時候,我們有:

                                              \begin{split}L(f_{m-1}+b_{m})=&\sum_{i=1}^{N}l(f_{m-1}(x_{i})+b_{m}(x_{i}),y_{i})\newline \approx&\sum_{i=1}^{N}[l(f_{m-1}(x_{i}),y_{i})+g_{m,i}b_{m}(x_{i})+\frac{1}{2}w_{m,i}b^{2}_{m}(x_{i})]\newline =& L(f_{m-1})+\sum_{i=1}^{N}w_{m,i}(b_{m}(x_{i})+g_{m,i}/w_{m,i})^{2}-\frac{1}{2}\sum_{i=1}^{N}g_{m,i}^{2}/w_{m,i}\end{split}

其中:

                    $$g_{m,i}=\partial_{1}l(f_{m-1}(x_{i}),y_{i}),\\  w_{m,i}=\partial^{2}_{11}l(f_{m-1}(x_{i}),y_{i}) $$

所以我們為了讓$L(f_{m-1}+b_{m})$盡量小,得讓:

                                                    $$\sum_{i=1}^{N}w_{m,i}(b_{m}(x_{i})+g_{m,i}/w_{m,i})^{2}$$

盡量小,這時候應該在一權重為$w_{m,i}$的MSE為損失函數訓練出模型$b_{m}$。

         這時我們總結一下LogitBoost算法如下:

 


 

                               輸入:訓練集$D=\lbrace(x_{1},y_{1}),...,(x_{N},y_{N})\rbrace$, 基准回歸算法$b$, 正整數$M>0$

                               輸出:分類器以及概率預測函數

                               Step1.令$b_{0}=0$

                               Step2.對$m=1,...,M:$

                                             1)計算 $$w_{m,i}=\frac{e^{-y_{i}f_{m-1}(x_{i})}}{(1+e^{-y_{i}f_{m-1}(x_{i})})^{2}}$$

                                                         $$z_{m,i}=y_{i}(1+e^{-y_{i}f(x_{i})})$$

                                             2)用算法$b$訓練數據集D,誤差函數選:

                                                           $$L(b)=\sum_{i=1}^{N}w_{m,i}(b(x_{i})-z_{m,i})^{2}$$

                                                得到模型$b_{m}$

                                             3)令:$$f=f_{m-1}+b_{m}$$

                               Step3. 輸出分類器$f_{M}$以及概率預測函數$\hat{P}(Y=1\mid X=x)\triangleq \frac{1}{1+e^{-f_{M}(x)}}$


 

參考文獻:

1. 李航:《統計學習方法》,北京,清華大學出版社,2012.

2. 周志華:《機器學習》,北京,清華大學出版社,2016.

3. Kevin P. Murphy:Machine Learning: A Probabilistic Perspective, The MIT Press Cambridge, Massachusetts London, England, © 2012 Massachusetts Institute of Technology


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM