AdaBoost算法原理詳細總結

        在集成學習方法之Bagging,Boosting,Stacking篇章中,我們談論boosting框架的原理,在boosting系列算法中,AdaBoost是著名的算法之一。AdaBoost是英文"Adaptive Boosting"(自適應增強)的縮寫,由Yoav Freund和Robert Schapire在1995年提出。
        今天我們就來探討下AdaBoost分類算法的原理,本篇我們先介紹AdaBoost算法;然後通過誤差分析探討AdaBoost爲什麼能提升模型的學習精度;並且從前向分步加法模型角度解釋AdaBoost;最後對AdaBoost的算法優缺點進行一個總結。

1)從boosting到AdaBoost算法

        集成原理中,我們提到的boosting框架的思想是選擇同質的基分類器,讓基分類器之間按照順序進行訓練,並讓每個基分類器都嘗試去修正前面的分類。既然這樣,怎樣才能讓同質的基分類器能夠修正前面的分類?或者說怎樣才能讓同質的基分類器之間保持“互助”呢?
       AdaBoost的做法是,讓前一個基分類器ft1(x)f_{t-1}(x)在當前基分類器ft(x)f_t(x)的訓練集上的效果很差(和我們隨機瞎猜一樣),這樣ft(x)f_t(x)就能修正ft1(x)f_{t-1}(x)的分類誤差,ft(x)f_t(x)ft1(x)f_{t-1}(x)之間也就產生了“互助”。
       AdaBoost的具體做法是,通過提高被前一輪基分類器ft1(x)f_{t-1}(x)分類錯誤的樣本的權值,降低被正確分類樣本的權值,使得上一個基分類器ft1(x)f_{t-1}(x)在更新權值後的訓練集上的錯誤率ϵt1\epsilon_{t-1}增大到0.5。(再在更新權值後的訓練集上訓練基分類器ft(x)f_t(x),那ft(x)f_t(x)必能和ft1(x)f_{t-1}(x)產生互助。)

2)AdaBoost算法

       下面我們在二分類問題上介紹AdaBoost算法。假如給定訓練數據集T={(xi,yi)}i=1nT=\left\{ (x^i,y^i) \right\}^n_{i=1}xiRdx^i\in R^dyi{1,1}y^i\in\left\{ -1,1\right\}
樣本權值爲winw_i^n,誤差率ϵi\epsilon_i。在訓練數據集TT上訓練第一個基分類器f1(x)f_1(x),其錯誤率爲ϵ1ϵ1<0.5\epsilon_1,\epsilon_1 < 0.5(起碼比瞎猜要好一些)
ϵ1=nw1nδ((f1(xn)y^n)Z1Z1=nw1n\epsilon_1=\frac{\sum_nw_1^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_1} \qquad Z_1 = \sum_nw_1^n
        更新樣本的權值(權值爲w2nw_2^n)後的訓練集爲T{T}',使得f1(x)f_1(x)T{T}'分類效果等同於隨機瞎猜(ϵ=0.5\epsilon=0.5)。用數學語言表示即爲
nw2nδ((f1(xn)y^n)Z2=0.5Z2=nw2n\frac{\sum_nw_2^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_2}=0.5 \qquad Z_2 = \sum_nw_2^n
        那麼樣本權重如何更新呢?AdaBoost具體做法是,減小f1(x)f_1(x)分類正確的樣本的權值,權值除以一個常數dd,即w1nd1\frac{w_1^n}{d_1};增大f1(x)f_1(x)分類錯誤的樣本的權值,權值乘以一個常數dd,即w1nd1w_1^nd_1。用數學語言表示即爲
{w2n=w1nd1if f1(xn)y^n)w2n=w1nd1if f1(xn)=y^n)\begin{cases} w_2^n = w_1^nd_1 \qquad if \ f_1(x^n)\neq {\hat y}^n)\\ w_2^n = \frac{w_1^n}{d_1} \qquad if \ f_1(x^n)= {\hat y}^n)\\ \end{cases}
        下面我們再回到下式中來,

nw2nδ((f1(xn)y^n)Z2=0.5\frac{\sum_nw_2^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_2}=0.5

其中,Z2=f1(xn)y^nw1nd1+f1(xn)=y^nw1nd1Z_2=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1+\sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1};當f1(xn)y^nf_1(x^n)\neq {\hat y}^n時,w2n=w1nd1w_2^n = w_1^nd_1
        將上面兩式帶入得:

f1(xn)y^nw1nd1f1(xn)y^nw1nd1+f1(xn)=y^nw1nd1=0.5\frac{\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1}{\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1+\sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1}}=0.5

f1(xn)=y^nw1nd1=f1(xn)y^nw1nd1\sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1}=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1

又因爲ϵ1=f1(xn)y^nw1nZ1ϵ1Z1=f1(xn)y^nw1n\epsilon_1=\frac{\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n}{Z_1}\Rightarrow \epsilon_1Z_1=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n
1ϵ1=f1(xn)=y^nw1nZ1(1ϵ1)Z1=f1(xn)=y^nw1n1-\epsilon_1=\frac{\sum_{f_1(x^n)= {\hat y}^n} w_1^n}{Z_1}\Rightarrow (1-\epsilon_1)Z_1=\sum_{f_1(x^n)= {\hat y}^n} w_1^n
因此,
f1(xn)=y^nw1nd1=f1(xn)y^nw1nd1\sum_{f_1(x^n)= {\hat y}^n} \frac{w_1^n}{d_1}=\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n d_1
1d1f1(xn)=y^nw1n=d1f1(xn)y^nw1n\frac{1}{d_1}\sum_{f_1(x^n)= {\hat y}^n} {w_1^n}=d_1\sum_{f_1(x^n)\neq {\hat y}^n} w_1^n
1d1(1ϵ1)Z1=d1ϵ1Z1\frac{1}{d_1}(1-\epsilon_1)Z_1=d_1\epsilon_1Z_1
d1=1ϵ1ϵ1d_1=\sqrt{\frac{1-\epsilon_1 }{\epsilon_1}}
其中d1>1d_1>1(因爲ϵ1<0.5\epsilon_1<0.5)。
        因此AdaBoost每次更新權值表達式爲:
{wt+1n=wtn1ϵtϵt=wtnexp(Ln(1ϵtϵt))if ft(xn)y^n)wt+1n=wtn1ϵtϵt=wtnexp(Ln(1ϵtϵt))if ft(xn)=y^n)\begin{cases} w_{t+1}^n = w_t^n\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}=w_t^nexp(Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}})) \qquad if \ f_t(x^n)\neq {\hat y}^n)\\ w_{t+1}^n = \frac{w_t^n}{\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}}=w_t^nexp(-Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}})) \qquad if \ f_t(x^n)= {\hat y}^n)\\ \end{cases}
αt=Ln(1ϵtϵt)\alpha_t= Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}})αt\alpha_t即爲基分類器ft(x)f_t(x)的權重係數。當ϵt=0.1\epsilon_t =0.1時,αt=1.1\alpha_t=1.1,當ϵt=0.4\epsilon_t =0.4時,αt=0.2\alpha_t=0.2。這表明,當基分類器分類誤差率越小時,基分類器的權重越大,在最終表決時起的作用也越大;當基分類器分類誤差率越大時,基分類器的權重越小,在最終表決時起的作用也越小。將αt\alpha_t帶入上式,樣本權值更新表達式變成:
{wt+1n=wtn1ϵtϵt=wtnexp(αt)if ft(xn)y^n)wt+1n=wtn1ϵtϵt=wtnexp(αt)if ft(xn)=y^n)\begin{cases} w_{t+1}^n = w_t^n\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}=w_t^nexp(\alpha_t) \qquad if \ f_t(x^n)\neq {\hat y}^n)\\ w_{t+1}^n = \frac{w_t^n}{\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}}=w_t^nexp(-\alpha_t) \qquad if \ f_t(x^n)= {\hat y}^n)\\ \end{cases}
爲了方便表示,將上式兩項合併成一項得,權值更新的表達式爲:
wt+1n=wtnexp(y^nft(xn)αt)w_{t+1}^n =w_t^nexp(-{\hat y}^nf_t(x^n)\alpha_t)
ft(xn)=y^nf_t(x^n)= {\hat y}^n時,y^nft(xn){\hat y}^nf_t(x^n)爲+1,當 ft(xn)y^n\ f_t(x^n)\neq {\hat y}^n時,y^nft(xn){\hat y}^nf_t(x^n)爲-1,以上兩式爲等價變換。
       以上就是AdaBoost算法如何做樣本權值更新的整個推導過程。

       
       下面對二元分類AdaBoost算法流程進行總結
       輸入:訓練數據集T={(xi,yi)}i=1NT=\left\{ (x^i,y^i) \right\}^N_{i=1}xiRdx^i\in R^dyi{1,1}y^i\in\left\{ -1,1\right\}
       輸出:最終的分類器H(x)H(x)
①初始化訓練數據的權值(權值相等)
w1n=1w_1^n=1
for t=1...T:for \ t=1...T:

  • 在權值爲{wt1,wt2...wtN}\left\{ w_t^1,w_t^2...w_t^N\right\}的訓練機上訓練基分類器ft(x)f_t(x)

  • 計算ft(x)f_t(x)在訓練數據集上的分類誤差率ϵt\epsilon_t ϵt=P(ft(xny^n))=nwtnδ(ft(xny^n))\epsilon_t=P(f_t(x^n\neq {\hat y}^n))=\sum_nw_t^n\delta (f_t(x^n\neq {\hat y}^n))

  • 計算ft(x)f_t(x)的權值係數
    αt=Ln(1ϵtϵt)\alpha_t= Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}})

  • for n=1,2....N:for \ n=1,2....N:
           if xnft(x)if \ x^n 被f_t(x)分類錯誤:
                   wt+1n=wtn1ϵtϵt=wtnexp(αt)w_{t+1}^n= w_t^n\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}=w_t^nexp(\alpha_t)
           else xnelse \ x^nft(x)f_t(x)分類正確:
                   wt+1n=wtn1ϵtϵt=wtnexp(αt)w_{t+1}^n = \frac{w_t^n}{\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}}=w_t^nexp(-\alpha_t)
    ③構建基分類器線性組合
    g(x)=Tαtft(x)g(x)=\sum_T\alpha_tf_t(x)
    得到最終的分類器H(x)H(x)
    H(x)=sign(Tαtft(x))H(x)=sign(\sum_T\alpha_tf_t(x))

3)AdaBoost的訓練誤差分析

       AdaBoost最基本的性質是它能在學習的過程中不斷減少訓練誤差,且訓練誤差以指數速率下降,且無限逼近於0。具體的數學表達式爲:
ErrorRate=1Nδ(y^ng(x)<0)1Nnexp(y^ng(x))=1NZT+1Error Rate=\frac{1}{N}\sum \delta (\hat y^n g(x)<0)\leq \frac{1}{N}\sum_nexp(-\hat y^n g(x))=\frac{1}{N}Z_{T+1}
1NZT+1=t=1T2ϵt(1ϵt)=t=1T(14γt2)exp(2t=1Tγt2)\frac{1}{N}Z_{T+1}=\prod _{t=1}^T2\sqrt{\epsilon _t(1-\epsilon _t)}=\prod _{t=1}^T\sqrt{(1-4\gamma _t^2)}\leq exp(-2\sum _{t=1}^T\gamma _t^2)
其中,γt=12ϵt\gamma_t=\frac{1}{2}-\epsilon _t

       下面我們就AdaBoost做二元分類的情況,對這一結論分步進行證明。證明過程會涉及較多的數學公式的推導,對證明不感興趣的小夥伴可以直接跳到第5部分AdaBoost算法總結。
       首先我們證明:
ErrorRate=1Nδ(y^ng(x)<0)1Nexp(y^ng(x))Error Rate=\frac{1}{N}\sum \delta (\hat y^n g(x)<0)\leq \frac{1}{N}exp(-\hat y^n g(x))

       從上一部分內容可知,訓練數據集T={(xi,yi)}i=1nT=\left\{ (x^i,y^i) \right\}^n_{i=1}xiRdx^i\in R^dyi{1,1}y^i\in\left\{ -1,1\right\},最終的分類器H(x),αtH(x),\alpha_t的表達式爲
H(x)=sign(t=1Tαtft(x))αt=Ln(1ϵtϵt)H(x)=sign(\sum_{t=1}^T\alpha_tf_t(x)) \qquad \alpha_t = Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}})
       分類器H(x)H(x)的分類誤差率爲ErrorRateError Rate等於分類錯誤的樣本所佔總樣本的比例,用數學語言表達即爲,
ErrorRate=1Nδ(H(xn)(y^)n)Error Rate=\frac{1}{N}\sum \delta (H(x^n)\neq (\hat y)^n)
其中,H(xn)(y^)nH(x^n)\neq (\hat y)^n表示模型的預測值和真實值異號,因此,
ErrorRate=1Nδ(y^nt=1Tαtft(x)<0)Error Rate=\frac{1}{N}\sum \delta (\hat y^n \sum_{t=1}^T\alpha_tf_t(x)<0)
g(x)=t=1Tαtft(x)g(x)=\sum_{t=1}^T\alpha_tf_t(x),因此,
ErrorRate=1Nδ(y^ng(x)<0)Error Rate=\frac{1}{N}\sum \delta (\hat y^n g(x)<0)
下面我們開始證明:
ErrorRate=1Nδ(y^ng(x)<0)1Nexp(y^ng(x))Error Rate =\frac{1}{N}\sum \delta (\hat y^n g(x)<0)\leq \frac{1}{N}exp(-\hat y^n g(x))
其中δ(y^ng(x)<0)\delta (\hat y^n g(x)<0)爲01損失函數,exp(y^ng(x))exp(-\hat y^n g(x))爲指數損失函數。畫出函數圖像很容易發現上式不等式成立:在這裏插入圖片描述
       下面我們證明
ErrorRate1Nnexp(y^ng(x))=1NZT+1Error Rate\leq \frac{1}{N}\sum_nexp(-\hat y^n g(x))=\frac{1}{N}Z_{T+1}
       已知g(x)=t=1Tαtft(x)g(x)=\sum_{t=1}^T\alpha_tf_t(x)(上面我們定義的等式)。且Zt+1Z_{t+1}爲基分類器ft+1(x)f_{t+1}(x)所有訓練樣本的權重之和,用數學語言表示,
       Zt+1=nwT+1nZ_{t+1}=\sum _nw_{T+1}^n

                =nwTnexp(y^nft(xn)αt)=\sum _nw_{T}^nexp(-\hat y^nf_t(x^n)\alpha_t)(權值更新公式)
                =nt=1Texp(y^nft(xn)αt)=\sum _n\prod _{t=1}^Texp(-\hat y^nf_t(x^n)\alpha_t)
                =nexp(y^nt=1Tft(xn)αt)=\sum _nexp(-\hat y^n\sum _{t=1}^Tf_t(x^n)\alpha_t)(連乘符號\prod,放到指數expexp中變成求和\sum
                =nexp(y^ng(xn))=\sum _nexp(-\hat y^ng(x^n))
       因此,ErrorRate1Nnexp(y^ng(x))=1NZT+1Error Rate\leq \frac{1}{N}\sum_nexp(-\hat y^n g(x))=\frac{1}{N}Z_{T+1}
       已知αt=Ln(1ϵtϵt)\alpha_t = Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}}),下面我們證明
ErrorRate1NZT+1=t=1T2ϵt(1ϵt)Error Rate\leq \frac{1}{N}Z_{T+1}=\prod _{t=1}^T2\sqrt{\epsilon _t(1-\epsilon _t)}
       Zt+1Z_{t+1}爲基分類器ft+1(x)f_{t+1}(x)所有訓練樣本的權重之和,它是由上一輪權值ZtZ_{t}更新而來的,被分類錯誤的樣本權值增大,被分類正確的樣本權值減小。
       且Z1=NZ_1=N,因此,

       ZT+1=Ztϵtexp(αt)+Zt(1ϵt)exp(αt)Z_{T+1}=Z_t \epsilon _{t}exp(\alpha _{t})+Z_t(1-\epsilon _{t})exp(-\alpha _{t})
                       =Ztϵt1ϵtϵt+Zt(1ϵt)ϵt1ϵt=Z_t \epsilon _{t}\sqrt{\frac{1-\epsilon _{t}}{\epsilon _{t}}}+Z_t(1-\epsilon _{t})\sqrt{\frac{\epsilon _{t}}{1-\epsilon _{t}}}
                       =2Ztϵt(1ϵt)=2Z_t\sqrt{\epsilon _{t}(1-\epsilon _{t})}
                       =Nt=1T2ϵt(1ϵt)=N\prod _{t=1}^T2\sqrt{\epsilon _{t}(1-\epsilon _{t})}
       因此,
ErrorRate1NZT+1=t=1T2ϵt(1ϵt)Error Rate\leq \frac{1}{N}Z_{T+1}=\prod _{t=1}^T2\sqrt{\epsilon _t(1-\epsilon _t)}
       由於ϵt<0.5\epsilon _t<0.5,因此2ϵt(1ϵt)12\sqrt{\epsilon _t(1-\epsilon _t)}\leq 1,所以AdaBoost的分類誤差率是不斷的再減小的。
       下面我們證明
t=1T2ϵt(1ϵt)=t=1T(14γt2)exp(2t=1Tγt2)\prod _{t=1}^T2\sqrt{\epsilon _t(1-\epsilon _t)}=\prod _{t=1}^T\sqrt{(1-4\gamma _t^2)}\leq exp(-2\sum _{t=1}^T\gamma _t^2)
       t=1T2ϵt(1ϵt)\prod _{t=1}^T2\sqrt{\epsilon _t(1-\epsilon _t)}
       =t=1T2(12(12ϵt))(12+12ϵt)=\prod _{t=1}^T2\sqrt{(\frac{1}{2}-(\frac{1}{2}-\epsilon _t))(\frac{1}{2}+\frac{1}{2}-\epsilon _t)}
γt=12ϵt\gamma_t=\frac{1}{2}-\epsilon _tγt>0\gamma_t >0得,
       t=1T2ϵt(1ϵt)\prod _{t=1}^T2\sqrt{\epsilon _t(1-\epsilon _t)}
       =t=1T2(12(12ϵt))(12+12ϵt)=\prod _{t=1}^T2\sqrt{(\frac{1}{2}-(\frac{1}{2}-\epsilon _t))(\frac{1}{2}+\frac{1}{2}-\epsilon _t)}
       =t=1T214γt2=\prod _{t=1}^T2\sqrt{\frac{1}{4}-\gamma _t^2}
       =t=1T14γt2=\prod _{t=1}^T\sqrt{1-4\gamma _t^2}
       最後我們證明,
t=1T(14γt2)exp(2t=1Tγt2)\prod _{t=1}^T\sqrt{(1-4\gamma _t^2)}\leq exp(-2\sum _{t=1}^T\gamma _t^2)
       首先我們構造一個函數f(x)=ex+x1f(x)=e^{-x}+x-1,由於f(x)=ex>0f''(x)=e^{-x}>0,因此f(x)f(x)爲凸函數,且minf(x)=f(0)=0minf(x)=f(0)=0,所以f(x)0f(x) \geq 0。下面我們進入正式證明:
       f(x)=ex+x10f(x)=e^{-x}+x-1 \geq 0
       ex1x\Rightarrow e^{-x}\geq 1-x,令x=4γ2x=4\gamma^2,得
       e4γ214γ2\Rightarrow e^{-4\gamma^2}\geq 1-4\gamma^2
       e2γ214γ2\Rightarrow e^{-2\gamma^2}\geq \sqrt{1-4\gamma^2}
因此對於t=1,2...Tt=1,2...T,都有{e2γ1214γ12e2γ2214γ22...e2γt214γt2\begin{cases} e^{-2\gamma_1^2}\geq \sqrt{1-4\gamma_1^2}\\ e^{-2\gamma_2^2}\geq \sqrt{1-4\gamma_2^2}\\ ...\\ e^{-2\gamma_t^2}\geq \sqrt{1-4\gamma_t^2}\\ \end{cases}
       將上式連乘得:
t=1Texp(2γt2)t=1T14γt2\Rightarrow\prod _{t=1}^Texp(-2\gamma_t^2) \geq \prod _{t=1}^T \sqrt{1-4\gamma_t^2}
       t=1T14γt2t=1Texp(2γt2)\Rightarrow\prod _{t=1}^T \sqrt{1-4\gamma_t^2}\leq \prod _{t=1}^Texp(-2\gamma_t^2)
       t=1T14γt2exp(2t=1Tγt2)\Rightarrow \prod _{t=1}^T \sqrt{1-4\gamma_t^2}\leq exp(-2\sum _{t=1}^T\gamma_t^2)

       因此,證明得到下式成立:
ErrorRate=1Nδ(y^ng(x)<0)exp(2t=1Tγt2)Error Rate=\frac{1}{N}\sum \delta (\hat y^n g(x)<0)\leq exp(-2\sum _{t=1}^T\gamma_t^2)
       上不等式表明,AdaBoost的訓練誤差是以指數速率下降且無限逼近於0。(γ>0,2t=1Tγt2<0\gamma >0,-2\sum _{t=1}^T\gamma_t^2<0,小於0的數求指數小於1,小於1的數無限連乘,將無限逼近與0)

4)前向分步加法模型解釋AdaBoost

       AdaBoost的另外一種解釋,認爲AdaBoost是加法模型、損失函數爲指數函數、學習算法爲前向分步算法的分類學習算法。
       加法模型比較好理解,最終的分類器是有若干個基分類器加權平均得到。即
H(x)=Tαtft(x)H(x)=\sum_T\alpha_tf_t(x)
其中,ft(x)f_t(x)爲基分類器,αt\alpha_t爲基分類器的權值。
       前向分步學習算法,即利用前一個基分類器的結果更新後一個基分類器的訓練權重。
       假定第t1t-1輪後分類器爲:
gt1(x)=t=1t1αtft(x)g_{t-1}(x)= \sum_{t=1}^{t-1}\alpha_tf_t(x)
       而第tt輪後分類器爲爲:
gt(x)=t=1tαtft(x)g_{t}(x)= \sum_{t=1}^{t}\alpha_tf_t(x)
       有上兩式可以得:
gt(x)=gt1(x)+αtft(x)g_t(x)=g_{t-1}(x)+\alpha_tf_t(x)
       因此,最終的分類器是通過前向學習算法得到的。
       AdaBoost的損失函數爲,
argminα,fnexp(y^ngt(x))\underbrace{argmin}_{\alpha,f}\sum_nexp(-\hat y^n g_t(x))
       利用前向分步學習算法可以得到損失函數爲:
(αt,ft(x))=argminα,fnexp(y^n(gt1(x)+αtft(x))(\alpha_t,f_t(x))= \underbrace{argmin}_{\alpha,f}\sum_nexp(-\hat y^n (g_{t-1}(x)+\alpha_tf_t(x))
       令wtn=exp(y^ngt1(x))w'^n_t=exp(-\hat y^n g_{t-1}(x)),它的值不依賴αt,ft(x)\alpha_t,f_t(x),因此與最小化無關,僅僅依賴於gt1(x)g_{t-1}(x),隨着每一輪迭代而改變。將上式子代入損失函數,得
(αt,ft(x))=argminα,fnwtnexp(y^αtft(x))(\alpha_t,f_t(x))= \underbrace{argmin}_{\alpha,f}\sum_n w'^n_texp(-\hat y \alpha_tf_t(x))
       我們先求ft(x)f^*_t(x),對於任意的αt>0\alpha_t>0,使得上式最小的ft(x)f_t(x)由下式得到:
ft(x)=argminfwtnδ(y^nft(xn))f^*_t(x)=\underbrace{argmin}_fw_t'^n\delta (\hat y^n \neq f_t(x^n))
       其中,wtn=exp(y^ngt1(x))w'^n_t=exp(-\hat y^n g_{t-1}(x))

       基分類器ft(x)f^*_t(x)即爲AdaBoost算法的基分類器ft(x)f_t(x),因爲它是讓第tt輪加權訓練數據分類誤差率最小的基分類器。將ft(x)f^*_t(x)帶入損失函數,對αt\alpha_t求導,使其等於0,得
αt=12Ln1ϵtϵt\alpha_t = \frac{1}{2}Ln\frac{1-\epsilon _t}{\epsilon _t}
       其中ϵt\epsilon _t爲分類誤差率:
ϵt=nwtnδ(y^nft(xn))nwtn=nwtnδ(y^nft(xn))\epsilon _t=\frac{\sum _nw'^n_t\delta (\hat y^n \neq f_t(x^n))}{\sum_n w'^n_t}=\sum _nw_t^n\delta (\hat y^n \neq f_t(x^n))
       這與我們在第二部分討論的一致(見下式)。上式的wtnw^n_t爲權值率,下式中的wtnw^n_t爲權值,除以Z1Z_1等價於權值率。
ϵ1=nw1nδ((f1(xn)y^n)Z1Z1=nw1n\epsilon_1=\frac{\sum_nw_1^n\delta((f_1(x^n)\neq {\hat y}^n)}{Z_1} \qquad Z_1 = \sum_nw_1^n
αt=Ln(1ϵtϵt)\alpha_t= Ln(\sqrt{\frac{1-\epsilon_t }{\epsilon_t}})
       最後我們來看下每一輪權值的更新,利用以下兩式
gt(x)=gt1(x)+αtft(x)g_t(x)=g_{t-1}(x)+\alpha_tf_t(x)
wtn=exp(y^ngt1(x))w'^n_t=exp(-\hat y^n g_{t-1}(x))
       可得到權值更新公式爲:
wt+1n=wtnexp(y^nft(xn)αt)w_{t+1}^n =w_t^nexp(-{\hat y}^nf_t(x^n)\alpha_t)
       這與我們在第一部分討論的權值更新公式也一致。因此,AdaBoost也可以從加法模型、指數損失函數、前向分步學習算法角度來解釋。
       需要注意的是,是先有了AdaBoost算法之後,人們才發現,通過加法模型、指數損失函數、前向分步學習算法的方式可以解釋AdaBoost算法的過程。

5)AdaBoost算法總結

       下面我們對AdaBoost算法的優缺點進行總結。
優點:

  • 既可以處理分類任務,又可以處理迴歸任務;
  • 不易過擬合;
  • AdaBoost訓練的分類器,分類精度高;
  • 支持各種分類器做基分類器,如邏輯迴歸,SVM;
    缺點:
  • 對異常值敏感,異常值的權重在模型訓練的過程中可能會越來越大,最終影響整個模型的性能;

       終於寫完了,這篇寫的有點長,涉及的數學推導比較多,我也儘量往詳細寫了,大家需要一些耐心慢慢看。如果看到數學推導就頭暈的小夥伴,可以只看第二部分AdaBoost算法原理部分。本篇涉及的數學公式較多,我也多檢查了兩遍,儘量減少數學上的表述錯誤。如果小夥伴發現還有錯誤,還望指正!
       下篇我們探討Scikit learn中的AdaBoost算法庫類,並進行實踐。
       
(歡迎大家在評論區探討交流,也歡迎大家轉載,轉載請註明出處!)
上篇:Scikit-learn隨機森林算法庫總結與調參實踐
下篇:Scikit-learn AdaBoost算法庫總結與實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章