機器學習實戰刻意練習 —— Task 04. AdaBoost

機器學習實戰刻意練習

第 1 周任務
  分類問題:K-鄰近算法
  分類問題:決策樹

第 2 周任務
  分類問題:樸素貝葉斯
  分類問題:邏輯迴歸

第 3 周任務
  分類問題:支持向量機

第 4 周任務
  分類問題:AdaBoost

第 5 周任務
  迴歸問題:線性迴歸、嶺迴歸、套索方法、逐步迴歸等
  迴歸問題:樹迴歸

第 6 周任務
  聚類問題:K均值聚類
  相關問題:Apriori

第 7 周任務
  相關問題:FP-Growth

第 8 周任務
  簡化數據:PCA主成分分析
  簡化數據:SVD奇異值分解
    



AdaBoost



1.簡介

  Boosting,也稱爲增強學習或提升法,是一種重要的集成學習技術,能夠將預測精度僅比隨機猜度略高的弱學習器增強爲預測精度高的強學習器,這在直接構造強學習器非常困難的情況下,爲學習算法的設計提供了一種有效的新思路和新方法。作爲一種元算法框架,Boosting幾乎可以應用於所有目前流行的機器學習算法以進一步加強原算法的預測精度,應用十分廣泛,產生了極大的影響。而AdaBoost正是其中最成功的代表,被評爲數據挖掘十大算法之一。在AdaBoost提出至今的十幾年間,機器學習領域的諸多知名學者不斷投入到算法相關理論的研究中去,紮實的理論爲AdaBoost算法的成功應用打下了堅實的基礎。AdaBoost的成功不僅僅在於它是一種有效的學習算法,還在於1)它讓Boosting從最初的猜想變成一種真正具有實用價值的算法;2)算法採用的一些技巧,如:打破原有樣本分佈,也爲其他統計學習算法的設計帶來了重要的啓示;3)相關理論研究成果極大地促進了集成學習的發展。



2.Boosting提升算法

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

FM(x;P)=m=1nβmh(x;am)F_M(x;P)=\sum_{m=1}^nβ_mh(x;a_m)

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

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

Fm(x)=Fm1(x)+βmhm(x;am)F_m (x)=F_{m-1}(x)+ β_mh_m (x;a_m)

  由於採用的損失函數不同,Boosting算法也因此有了不同的類型,AdaBoost就是損失函數爲指數損失的Boosting算法。


3. AdaBoost

 3.1. 原理理解

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

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

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

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

 3.1.實例

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

  有如下的訓練樣本,我們需要構建強分類器對其進行分類。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

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

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

  現在開始訓練第一個弱分類器。我們發現閾值取2.5時分類誤差率最低,得到弱分類器爲:G1(x)={1,      x<2.51,  x>2.5G_1(x)=\left\{\begin{matrix}1, \, \, \, \, \, \, x<2.5 \\-1, \, \, x>2.5 \end{matrix}\right.

  當然,也可以用別的弱分類器,只要誤差率最低即可。這裏爲了方便,用了分段函數。得到了分類誤差率e1=0.3e_1=0.3

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

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

w2,i=w1,iz1exp(α1yiG1(xi))i=1,2,,10w_{2,i}=\frac{w_{1,i}}{z_1}exp⁡(-α_1 y_i G_1 (x_i )),i=1,2,…,10

  得到新的權值分佈,從各0.1變成了:D2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715)D_2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715)

  可以看出,被分類正確的樣本權值減小了,被錯誤分類的樣本權值提高了。

  第四步得到第一輪迭代的強分類器:sign(F1(x))=sign(0.4236G1(x))sign(F_1(x))=sign(0.4236G_1(x))

  以此類推,經過第二輪……第N輪,迭代多次直至得到最終的強分類器。迭代範圍可以自己定義,比如限定收斂閾值,分類誤差率小於某一個值就停止迭代,比如限定迭代次數,迭代1000次停止。這裏數據簡單,在第3輪迭代時,得到強分類器:

sign(F3(x))=sign(0.4236G1(x)+0.6496G2(x)+0.7514G3(x))sign(F_3(x))=sign(0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x))

的分類誤差率爲0,結束迭代。

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

3.2. 算法流程

  總結一下,得到AdaBoostAdaBoost的算法流程:

  輸入:訓練數據集T=(x1,y1),(x2,y2),(xN,yN)T={(x_1,y_1),(x_2,y_2),(x_N,y_N)},其中,xiXRnyiY=1,1x_i∈X⊆R^n,y_i∈Y=−1,1,迭代次數MM

  1. 初始化訓練樣本的權值分佈:D1=(w1,1,w1,2,,w1,i),w1,i=1N,i=1,2,,ND_1=(w_{1,1},w_{1,2},…,w_{1,i}),w_{1,i}=\frac{1}{N},i=1,2,…,N
  2. 對於m=1,2,,Mm=1,2,…,M
      ( a ) 使用具有權值分佈DmD_m的訓練數據集進行學習,得到弱分類器Gm(x)G_m(x)
      ( b ) 計算Gm(x)G_m(x)在訓練數據集上的分類誤差率:em=i=1Nwm,iI(Gm(xi)yi)e_m=\sum_{i=1}^Nw_{m,i} I(G_m (x_i )≠y_i )
      ( c ) 計算Gm(x)G_m(x)在強分類器中所佔的權重:αm=12log1ememα_m=\frac{1}{2}log \frac{1-e_m}{e_m}
      ( d ) 更新訓練數據集的權值分佈(這裏,zmz_m是歸一化因子,爲了使樣本的概率分佈和爲1):
    wm+1,i=wm,izmexp(αmyiGm(xi))i=1,2,,10w_{m+1,i}=\frac{w_{m,i}}{z_m}exp⁡(-α_m y_i G_m (x_i )),i=1,2,…,10

zm=i=1Nwm,iexp(αmyiGm(xi))z_m=\sum_{i=1}^Nw_{m,i}exp⁡(-α_m y_i G_m (x_i ))

  1. 得到最終分類器:
    F(x)=sign(i=1NαmGm(x))F(x)=sign(\sum_{i=1}^Nα_m G_m (x))

未完待續。。。


參考資料

  • https://www.cnblogs.com/ScorpioLu/p/8295990.html
  • https://louisscorpio.github.io/2017/11/28/%E4%BB%A3%E7%A0%81%E5%AE%9E%E6%88%98%E4%B9%8BAdaBoost/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章