AdaBoost原理詳解

寫一點本身理解的AdaBoost,而後再貼上面試過程當中被問到的相關問題。按照如下目錄展開。git

固然,也能夠去個人博客上看github

  • Boosting提高算法
  • AdaBoost
    • 原理理解
    • 實例
    • 算法流程
    • 公式推導
  • 面經

 

Boosting提高算法

AdaBoost是典型的Boosting算法,屬於Boosting家族的一員。在說AdaBoost以前,先說說Boosting提高算法。Boosting算法是將「弱學習算法「提高爲「強學習算法」的過程,主要思想是「三個臭皮匠頂個諸葛亮」。通常來講,找到弱學習算法要相對容易一些,而後經過反覆學習獲得一系列弱分類器,組合這些弱分類器獲得一個強分類器。Boosting算法要涉及到兩個部分,加法模型和前向分步算法。加法模型就是說強分類器由一系列弱分類器線性相加而成。通常組合形式以下:面試

$$F_M(x;P)=\sum_{m=1}^nβ_mh(x;a_m)$$算法

其中,$h(x;a_m)$ 就是一個個的弱分類器,$a_m$是弱分類器學習到的最優參數,$β_m$就是弱學習在強分類器中所佔比重,$P$是全部$a_m$和$β_m$的組合。這些弱分類器線性相加組成強分類器。機器學習

前向分步就是說在訓練過程當中,下一輪迭代產生的分類器是在上一輪的基礎上訓練得來的。也就是能夠寫成這樣的形式:ide

$$F_m (x)=F_{m-1}(x)+ β_mh_m (x;a_m)$$函數

因爲採用的損失函數不一樣,Boosting算法也所以有了不一樣的類型,AdaBoost就是損失函數爲指數損失的Boosting算法。學習

 

 

AdaBoost

原理理解

基於Boosting的理解,對於AdaBoost,咱們要搞清楚兩點:ui

  1. 每一次迭代的弱學習$h(x;a_m)$有何不同,如何學習?
  2. 弱分類器權值$β_m$如何肯定?

對於第一個問題,AdaBoost改變了訓練數據的權值,也就是樣本的機率分佈,其思想是將關注點放在被錯誤分類的樣本上,減少上一輪被正確分類的樣本權值,提升那些被錯誤分類的樣本權值。而後,再根據所採用的一些基本機器學習算法進行學習,好比邏輯迴歸。spa

對於第二個問題,AdaBoost採用加權多數表決的方法,加大分類偏差率小的弱分類器的權重,減少分類偏差率大的弱分類器的權重。這個很好理解,正確率高分得好的弱分類器在強分類器中固然應該有較大的發言權。

 

實例

爲了加深理解,咱們來舉一個例子。

有以下的訓練樣本,咱們須要構建強分類器對其進行分類。x是特徵,y是標籤。

 

序號 1 2 3 4 5 6 7 8 9 10
x 0 1 2 3 4 5 6 7 8 9
y 1 1 1 -1 -1 -1 1 1 1 -1

 

令權值分佈$D_1=(w_{1,1},w_{1,2},…,w_{1,10} )$

並假設一開始的權值分佈是均勻分佈:$w_{1,i}=0.1,i=1,2,…,10$

如今開始訓練第一個弱分類器。咱們發現閾值取2.5時分類偏差率最低,獲得弱分類器爲:

固然,也能夠用別的弱分類器,只要偏差率最低便可。這裏爲了方便,用了分段函數。獲得了分類偏差率$e_1=0.3$。

第二步計算$(G_1 (x)$在強分類器中的係數$α_1=\frac{1}{2} log\frac{ 1-e_1}{e_1}=0.4236$,這個公式先放在這裏,下面再作推導。

第三步更新樣本的權值分佈,用於下一輪迭代訓練。由公式:

$$w_{2,i}=\frac{w_{1,i}}{z_1}exp⁡(-α_1 y_i G_1 (x_i )),i=1,2,…,10$$

獲得新的權值分佈,從各0.1變成了:

$$D_2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715)$$

能夠看出,被分類正確的樣本權值減少了,被錯誤分類的樣本權值提升了。

第四步獲得第一輪迭代的強分類器:

$$sign(F_1 (x))=sign(0.4236G_1 (x))$$

以此類推,通過第二輪……第N輪,迭代屢次直至獲得最終的強分類器。迭代範圍能夠本身定義,好比限定收斂閾值,分類偏差率小於某一個值就中止迭代,好比限定迭代次數,迭代1000次中止。這裏數據簡單,在第3輪迭代時,獲得強分類器:

$$sign(F_3 (x))=sign(0.4236G_1 (x)+0.6496G_2 (x)+0.7514G_3 (x))$$
的分類偏差率爲0,結束迭代。

$F(x)=sign(F_3 (x))$就是最終的強分類器。

 

算法流程

總結一下,獲得AdaBoost的算法流程:

  • 輸入:訓練數據集$T=\{(x_1,y_1),(x_2,y_2),(x_N,y_N)\}$,其中,$x_i∈X⊆R^n$,$y_i∈Y={-1,1}$,迭代次數$M$
  • 1. 初始化訓練樣本的權值分佈:$D_1=(w_{1,1},w_{1,2},…,w_{1,i}),w_{1,i}=\frac{1}{N},i=1,2,…,N$。
  • 2. 對於$m=1,2,…,M$
  •   (a) 使用具備權值分佈$D_m$的訓練數據集進行學習,獲得弱分類器$G_m (x)$
  •   (b) 計算$G_m(x)$在訓練數據集上的分類偏差率:

$$e_m=\sum_{i=1}^Nw_{m,i}  I(G_m (x_i )≠y_i )$$

  •   (c) 計算$G_m (x)$在強分類器中所佔的權重:

$$α_m=\frac{1}{2}log \frac{1-e_m}{e_m} $$

  •   (d) 更新訓練數據集的權值分佈(這裏,$z_m$是歸一化因子,爲了使樣本的機率分佈和爲1):

$$w_{m+1,i}=\frac{w_{m,i}}{z_m}exp⁡(-α_m y_i G_m (x_i )),i=1,2,…,10$$

$$z_m=\sum_{i=1}^Nw_{m,i}exp⁡(-α_m y_i G_m (x_i ))$$

  • 3.    獲得最終分類器:

$$F(x)=sign(\sum_{i=1}^Nα_m G_m (x))$$

 

公式推導

如今咱們來搞清楚上述公式是怎麼來的。

假設已經通過$m-1$輪迭代,獲得$F_{m-1} (x)$,根據前向分步,咱們能夠獲得:

$$F_m (x)=F_{m-1} (x)+α_m G_m (x)$$

咱們已經知道AdaBoost是採用指數損失,由此能夠獲得損失函數:

$$Loss=\sum_{i=1}^Nexp⁡(-y_i F_m (x_i ))=\sum_{i=1}^Nexp⁡(-y_i (F_{m-1} (x_i )+α_m G_m (x_i )))$$

這時候,$F_{m-1}(x)$是已知的,能夠做爲常量移到前面去:

$$Loss=\sum_{i=1}^N\widetilde{w_{m,i}} exp⁡(-y_i α_m G_m (x_i ))$$
其中,$\widetilde{w_{m,i}}=exp⁡(-y_i (F_{m-1} (x)))$ ,敲黑板!這個就是每輪迭代的樣本權重!依賴於前一輪的迭代重分配。

是否是以爲還不夠像?那就再化簡一下:

$$\widetilde{w_{m,i}}=exp⁡(-y_i (F_{m-1} (x_i )+α_{m-1} G_{m-1} (x_i )))=\widetilde{w_{m-1,i}} exp⁡(-y_i α_{m-1} G_{m-1} (x_i ))$$

如今夠像了吧?ok,咱們繼續化簡Loss:

$$Loss=\sum_{y_i=G_m(x_i)}\widetilde{w_{m,i}} exp(-α_m)+\sum_{y_i≠G_m(x_i)}\widetilde{w_{m,i}} exp⁡(α_m)$$

$$=\sum_{i=1}^N\widetilde{w_{m,i}}(\frac{\sum_{y_i=G_m(x_i)}\widetilde{w_{m,i}}}{\sum_{i=1}^N\widetilde{w_{m,i}}}exp(-α_m)+\frac{\sum_{y_i≠G_m(x_i)}\widetilde{w_{m,i}}}{\sum_{i=1}^N\widetilde{w_{m,i}}}exp(α_m))$$

公式變形以後,炒雞激動!$\frac{\sum_{y_i≠G_m(x_i)}\widetilde{w_{m,i}}}{\sum_{i=1}^N\widetilde{w_{m,i}}}$這個不就是分類偏差率$e_m$嗎???!重寫一下,

$$Loss=\sum_{i=1}^N\widetilde{w_{m,i}}exp⁡(-α_m)+e_m exp⁡(α_m))$$

Ok,這樣咱們就獲得了化簡以後的損失函數。接下來就是求導了。

對$α_m$求偏導,令$\frac{∂Loss}{∂α_m }=0$獲得:

$$α_m=\frac{1}{2}log\frac{1-e_m}{e_m} $$

真漂亮!

另外,AdaBoost的代碼實戰與詳解請戳代碼實戰之AdaBoost

 

 

面經

今年8月開始找工做,參加大廠面試問到的相關問題有以下幾點:

  1. 手推AdaBoost
  2. 與GBDT比較
  3. AdaBoost幾種基本機器學習算法哪一個抗噪能力最強,哪一個對重採樣不敏感?

 

做者 Scorpio.Lu轉載請註明出處!

相關文章
相關標籤/搜索