1. Adaboost簡介

1.1 集成學習(ensemble learning)背景介紹

集成學習(ensemble learning)通過構建並結合多個學習器(learner)來完成學習任務,通常可獲得比單一學習器更良好的泛化性能(特別是在集成弱學習器(weak learner)時)。

目前集成學習主要分為2大類:

一類是以bagging、Random Forest等演算法為代表的,各個學習器之間相互獨立、可同時生成的並行化方法;

一類是以boosting、Adaboost等演算法為代表的,個體學習器是串列序列化生成的、具有依賴關係,它試圖不斷增強單個學習器的學習能力。

1.2 Adaboost背景介紹

Adaboost是Yoav Freund和Robert Schapire在1997年提出的一種集成學習(ensemble learning)演算法。

此前也Schapire也曾提出了一種boosting演算法(Schapire』s Boosting ),但實際應用效果並不好,主要原因是因為Schapire』s Boosting 對於訓練集樣本的選取條件十分精確而又苛刻,以至於很難找出符合條件的訓練集。而Adaboost在選取樣本的時候採用了基於概率分佈(也可解釋為基於權值)來選取樣本的方法,相比Schapire』s Boosting 放寬了對於訓練樣本選取的要求。

2. Adaboost 演算法詳解

2.1 Adaboost 步驟概覽

? ① 初始化訓練樣本的權值分佈,每個訓練樣本的權值應該相等(如果一共有N個樣本,則每個樣本的權值為1/N)

? ② 依次構造訓練集並訓練弱分類器。如果一個樣本被準確分類,那麼它的權值在下一個訓練集中就會降低;相反,如果它被分類錯誤,那麼它在下個訓練集中的權值就會提高。權值更新過後的訓練集會用於訓練下一個分類器。

? ③ 將訓練好的弱分類器集成為一個強分類器,誤差率小的弱分類器會在最終的強分類器裏佔據更大的權重,否則較小。

2.2 Adaboost 演算法流程

給定一個樣本數量為m的數據集T=   {left(x_{1}, y_{1}
ight), ldots,left(x_{m}, y_{m}
ight)  }  ,yi 屬於標記集合{-1,+1}。

訓練集的在第k個弱學習器的輸出權重為 D(k)=left(w_{k 1}, w_{k 2}, ldots w_{k m}
ight) ; quad w_{1 i}=frac{1}{m} ; i=1,2 ldots m

① 初始化訓練樣本的權值分佈,每個訓練樣本的權值相同:  D(1)=left(w_{1 1}, w_{1 2}, ldots w_{1 m}
ight) ; quad w_{1 i}=frac{1}{m} ; i=1,2 ldots m

② 進行多輪迭代,產生T個弱分類器。

? for t = 1, ... , T :

? a. 使用權值分佈 D(t) 的訓練集進行訓練,得到一個弱分類器 G_{t}(x) : quad chi 
ightarrow{-1,+1} ? b. 計算 Gt(x) 在訓練數據集上的分類誤差率(其實就是被 Gt(x) 誤分類樣本的權值之和): e_{t}=Pleft(G_{t}left(x_{i}
ight) 
eq y_{i}
ight)=sum_{i=1}^{m} w_{t i} Ileft(G_{t}left(x_{i}
ight) 
eq y_{i}
ight)

c. 計算弱分類器 Gt(x) 在最終分類器中的係數(即所佔權重)  alpha_{t}=frac{1}{2} ln frac{1-e_{t}}{e_{t}}

? d. 更新訓練數據集的權值分佈,用於下一輪(t+1)迭代 D(t+1)=left(w_{t+1,1} ,w_{t+1,2} ,cdots w_{t+1, i} cdots, w_{t+1, m}
ight) ?

for i = 1, ... , m: w_{t+1,i}=frac{w_{t,i}}{Z_{t}} 	imes left{egin{array}{ll}{e^{-alpha_{t}}} & {	ext ({ if } G_{t}left(x_{i}
ight)=y_{i}}) \ {e^{alpha_{t}}} & {	ext ({ if } G_{t}left(x_{i}
ight) 
eq y_{i}})end{array}
ight. =  frac{w_{t,i}}{Z_{t}} exp left(-alpha_{t} y_{i} G_{t}left(x_{i}
ight)
ight)

其中 Zt是規範化因子,使得D(t+1)成為一個概率分佈(和為1): Z_{t}=sum_{j=1}^{m} w_{t,i} exp left(-alpha_{t} y_{i} G_{t}left(x_{i}
ight)
ight)

③ 集成 T 個弱分類器為1個最終的強分類器:

G(x)=operatorname{sign}left(sum_{t=1}^{T} alpha_{t} G_{t}(x)
ight)

2.3 權值更新過程舉例說明

用一個例子闡釋上面所說的權值更新過程:

給定一個數據集T,由10個訓練樣本組成:x1,x2 ,…,x10,整個訓練集樣本總數 m=10。初始權重設置為 quad w_{1 i}=frac{1}{m}=0.1

根據權值分佈,我們訓練出第一個弱分類器G1(對於無法接受帶權樣本的基學習演算法,可以通過重採樣resampling來處理,後面會舉例介紹一下)。假設分類器G1在數據集T上的效果為:正確分類出樣本 x1 - x7,將樣本 x8 - x10 錯誤分類。我們可以計算出賦權後的誤差率: e_{1}=sum_{i=1}^{10} w_{1 i} Ileft(G_{1}left(x_{i}
ight) 
eq y_{i}
ight)=0.3

可以求出係數 α1 = 0.424,

根據上面 ②-d 步驟我們可以得出新的權值(還未規範化):

經過規範化因子規範化後的權值分佈(和為1):

下一個分類器從此分佈中產生。

3. 注意要點

(1)分類器的權重係數 α 實際上是通過最小化指數損失函數的得到的,如果想了解 α 的 推導過程可以參考 Schapire 論文原文或者周志華《機器學習》8.2節內容。

(2)對於無法接受帶權樣本的基學習演算法,可以通過重採樣resampling來產生訓練集,這也是為什麼之前說Adaboost可以理解為基於概率分佈來選取樣本。拿上面的例子來說,詳細做法是:10個樣本中每個樣本被抽中的概率是Pi(i=1,...,10),現在按抽取概率連續做10次可放回的樣本抽取,得到訓練集即可訓練出一個分類器。

(3)adaboost的靈魂在於其樣本權重更新(樣本權重模擬了概率分佈)的方法 以及 弱分類器加權組合

4. 相關面試題

(1)簡述一下 Adaboost 的權值更新方法。

? 答:參考上面的演算法介紹。

(2)訓練過程中,每輪訓練一直存在分類錯誤的問題,整個Adaboost卻能快速收斂,為何?

? 答:每輪訓練結束後,AdaBoost 會對樣本的權重進行調整,調整的結果是越到後面被錯誤分類的樣本權重會越高。而後面的分類器為了達到較低的帶權分類誤差,會把樣本權重高的樣本分類正確。這樣造成的結果是,雖然每個弱分類器可能都有分錯的樣本,然而整個 AdaBoost 卻能保證對每個樣本進行正確分類,從而實現快速收斂。

(3) Adaboost 的優缺點?

? 答:優點:能夠基於泛化性能相當弱的的學習器構建出很強的集成,不容易發生過擬合。

? 缺點:對異常樣本比較敏感,異常樣本在迭代過程中會獲得較高的權值,影響最終學習器的性能表現。

(4)AdaBoost 與 GBDT 對比有什麼不同?

? 答:區別在於兩者boosting的策略:Adaboost通過不斷修改權重、不斷加入弱分類器進行boosting;GBDT通過不斷在負梯度方向上加入新的樹進行boosting。

參考資料:

  1. 臺灣清華大學李端興教授2017年秋機器學習概論課程(CS 4602)PPT

  2. 周志華 《機器學習》第8章 集成學習
  3. July的博客

推薦閱讀:

相關文章