集成學習主要包括Boosting(提升)和Bagging(袋裝)兩大類,本文主要分享Boosting類集成學習中的AdaBoost算法,會詳細講解AdaBoost的原理。碼字不易,喜歡請點贊!!!
1.提升算法的思路
俗話說的好,“三個臭皮匠,頂個諸葛亮”。提升方法就是基於這種思想的,對於任意一個複雜的問題,將多個專家的判斷進行適當的綜合所得到的判斷,要比其中任意一個專家單獨判斷的好。
Kearns和Valiant首先提出了強可學習(strongly learnable)和弱可學習(weakly learnable)的概念。其指出,強可學習得預測準確率很高,而弱可學習得準確率僅比隨即猜測略好。後來,Schapire證明,強可學習與弱可學習是等價的。
這樣,我們就可以通過發現“弱學習算法”,然後將它提升爲“強學習算法”。很明顯,發現弱學習算法通常比發現強學習算法容易得多。
關於提升算法的研究很多,最具代表性的是AdaBoost算法。本文將在理論方面根據自己的理解來詳解AdaBoost算法,歡迎各位學者批評者正。
2.AdaBoost算法
假設給定一個二分類訓練數據集:
T={(x1,y1),(x2,y2),...,(xN,yN)}
其中,xi∈χ∈Rn,yi∈Y={−1,+1}。AdaBoost算法,通過從訓練樣本集中學習到一系列的弱分類器,並將這些弱分類器線性組合成爲一個強分類器。
算法過程:
輸入:訓練樣本集T={(x1,y1),(x2,y2),...,(xN,yN)},其中,xi∈χ∈Rn,yi∈Y={−1,+1};弱學習算法;
輸出:最終分類器G(x)。
(1)初始化訓練數據的權值分佈
D1=(w11,...,w1i,...,w1N)
其中w1i=N1,i=1,2,...,N
(2)對m=1,2,...,M
(a)使用具有權值分佈Dm的訓練數據集學習,得到基分類器
Gm(x):χ→{−1,+1}
(b)計算Gm(x)在訓練數據集上的分類誤差率
em=i=1∑NP(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)=Gm(xi)=yi∑wmi
其中wmi爲基學習器m在第i個樣本上的權重
(c)計算基學習器Gm(x)的係數
αm=21logem1−em
這裏的對數是自然對數,當em≤21時,αm≥0,並且當em變小時,αm變大。這也表明,當一個基學習器的分類誤差率越小時,這個基學習器的權重越大。
(d)更新訓練數據集的權重分佈
Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)
Zm=i=1∑Nwm,iexp(−αmyiGm(xi))
wm+1,i=Zmwm,iexp(−αmyiGm(xi))
其中,Zm爲規範化因子,使得Dm+1成爲一個概率分佈,並有∑i=1Nwm,i=1。
(3)構建基分類器的線性組合
f(x)=m=1∑MαmGm(x)
得到最終的分類器
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
其中sign函數爲符號函數。
3.AdaBoost算法說明
步驟(1)假設訓練數據集具有均勻的權值分佈,這一假設保證了第1步能夠在原始數據上學習基分類器G1(x)
步驟(2)中,基分類器Gm(x)在訓練樣本集上的分類誤差率爲:
em=Gm(xi)=yi∑wmi
其中,wmi爲第m個分類器中第i個數據的權重。這表明,Gm(x)在訓練樣本集上的分類誤差率是被Gm(x)誤分類樣本的權重之和,因此,可看出數據權值分佈Dm和基分類器Gm(x)的分類誤差率的關係。
更新訓練數據權重分佈時:
wm+1,i=Zmwm,iexp(−αmyiGm(xi))
因此
當Gm(xi)=yi時,wm+1,i=Zmwm,iexp(−αm)
當Gm(xi)=yi時,wm+1,i=Zmwm,iexp(αm)
由此可知,被基分類器Gm(x)誤分類樣本的權值將會擴大,而被正確分類的樣本的權值會縮小。
4.前向分佈算法與AdaBoost
AdaBoost算法還有一個解釋,即可以認爲AdaBoost算法是加法模型。
4.1前向分佈算法
考慮加法模型:
f(x)=m=1∑Mβmb(x;γm)
其中b(x;γm)爲基函數,βm爲基函數的係數。顯然,這個公式就是一個加法模型。
在給定訓練數據及損失函數L(y,f(x))的條件下,學習加法模型f(x)成爲經驗極小化即損失函數極小化爲題:
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))
通常這是個複雜的優化問題,但是前向分佈算法,給出了求解這一問題的想法:因爲學習的是加法模型,如果能夠從前向後,每一步只學習一個基函數及其係數,逐步逼近優化目標函數,那麼就可以簡化優化的複雜度。因此,每步只需要優化如下損失函數:
β,γmini=1∑NL(yi,βb(xi;γ))
前向分佈算法算法過程:
輸入:訓練樣本集T={(x1,y1),(x2,y2),...,(xN,yN)},其中,xi∈χ∈Rn,yi∈Y={−1,+1};基函數集合{b(x,γ)};損失函數L(y,f(x));
輸出:加法模型f(x)。
(1)初始化f0(x)=0
(2)對m=1,2,…,M
(a)極小化損失函數
(βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))
得到參數βm,γm。
(b)更新
fm(x)=fm−1(x)+βmb(x;γm)
(3)得到加法模型
f(x)=fM(x)=m=1∑Mβmb(x;γm)
通過以上步驟,前向分佈算法將同時求解m=1到M的所有參數βm,γm的問題優化成爲了逐次求解各個βm,γm的問題。
4.2前向分佈算法與AdaBoost
我們將前向分佈算法的損失函數限定爲指數損失函數,基函數爲基分類器時即等價於AdaBoost,因此,AdaBoost算法可以認爲是前向分佈算法的特例。
5.AdaBoost算法優缺點
優點
- Adaboost作爲分類器時,分類精度很高
- 在Adaboost的框架下,可以使用各種迴歸分類模型來構建弱學習器,非常靈活。
- 作爲簡單的二元分類器時,構造簡單,結果可理解。
- 不容易發生過擬合
缺點
- 對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性。
參考文獻
李航 《統計學習方法》
https://www.cnblogs.com/pinard/p/6133937.html