本文轉自
劉建平Pinard 原文鏈接http://www.cnblogs.com/pinard/p/6133937.html
在集成學習原理小結中,我們講到了集成學習按照個體學習器之間是否存在依賴關係可以分爲兩類,第一個是個體學習器之間存在強依賴關係,另一類是個體學習器之間不存在強依賴關係。前者的代表算法就是是boosting系列算法。在boosting系列算法中, Adaboost是最著名的算法之一。Adaboost既可以用作分類,也可以用作迴歸。本文就對Adaboost算法做一個總結。
1. 回顧boosting算法的基本原理
在集成學習原理小結中,我們已經講到了boosting算法系列的基本思想,如下圖:
從圖中可以看出,Boosting算法的工作機制是首先從訓練集用初始權重訓練出一個弱學習器1,根據弱學習的學習誤差率表現來更新訓練樣本的權重,使得之前弱學習器1學習誤差率高的訓練樣本點的權重變高,使得這些誤差率高的點在後面的弱學習器2中得到更多的重視。然後基於調整權重後的訓練集來訓練弱學習器2.,如此重複進行,直到弱學習器數達到事先指定的數目T,最終將這T個弱學習器通過集合策略進行整合,得到最終的強學習器。
不過有幾個具體的問題Boosting算法沒有詳細說明。
1)如何計算學習誤差率e?
2) 如何得到弱學習器權重係數
3)如何更新樣本權重D?
4) 使用何種結合策略?
只要是boosting大家族的算法,都要解決這4個問題。那麼Adaboost是怎麼解決的呢?
2. Adaboost算法的基本思路
我們這裏講解Adaboost是如何解決上一節這4個問題的。
假設我們的訓練集樣本是
訓練集的在第k個弱學習器的輸出權重爲
首先我們看看Adaboost的分類問題。
分類問題的誤差率很好理解和計算。由於多元分類是二元分類的推廣,這裏假設我們是二元分類問題,輸出爲{-1,1},則第k個弱分類器
接着我們看弱學習器權重係數,對於二元分類問題,第k個弱分類器
爲什麼這樣計算弱學習器權重係數?從上式可以看出,如果分類誤差率
第三個問題,更新更新樣本權重D。假設第k個弱分類器的樣本集權重係數爲
這裏
從
最後一個問題是集合策略。Adaboost分類採用的是加權平均法,最終的強分類器爲
接着我們看看Adaboost的迴歸問題。由於Adaboost的迴歸問題有很多變種,這裏我們以Adaboost R2算法爲準。
我們先看看回歸問題的誤差率的問題,對於第k個弱學習器,計算他在訓練集上的最大誤差
然後計算每個樣本的相對誤差
這裏是誤差損失爲線性時的情況,如果我們用平方誤差,則
最終得到第k個弱學習器的 誤差率
我們再來看看如何得到弱學習器權重係數
對於更新更新樣本權重D,第k+1個弱學習器的樣本集權重係數爲
這裏
最後是結合策略,和分類問題一樣,採用的也是加權平均法,最終的強迴歸器爲
3. AdaBoost分類問題的損失函數優化
剛纔上一節我們講到了分類Adaboost的弱學習器權重係數公式和樣本權重更新公式。但是沒有解釋選擇這個公式的原因,讓人覺得是魔法公式一樣。其實它可以從Adaboost的損失函數推導出來。
從另一個角度講, Adaboost是模型爲加法模型,學習算法爲前向分步學習算法,損失函數爲指數函數的分類問題。
模型爲加法模型好理解,我們的最終的強分類器是若干個弱分類器加權平均而得到的。
前向分步學習算法也好理解,我們的算法是通過一輪輪的弱學習器學習,利用前一個弱學習器的結果來更新後一個弱學習器的訓練集權重。也就是說,第k-1輪的強學習器爲
而第k輪的強學習器爲
上兩式一比較可以得到
可見強學習器的確是通過前向分步學習算法一步步而得到的。
Adaboost損失函數爲指數函數,即定義損失函數爲
利用前向分步學習算法的關係可以得到損失函數爲
將這個式子帶入損失函數,損失函數轉化爲
這樣就得到了我們第二節的樣本權重更新公式。
4. AdaBoost二元分類問題算法流程
這裏我們對AdaBoost二元分類問題算法流程做一個總結。
1) 初始化樣本集權重爲
2) 對於k=1,2,...K:
c) 計算弱分類器的係數
d) 更新樣本集的權重分佈
3) 構建最終分類器爲:
對於Adaboost多元分類算法,其實原理和二元分類類似,最主要區別在弱分類器的係數上。比如Adaboost SAMME算法,它的弱分類器的係數
其中R爲類別數。從上式可以看出,如果是二元分類,R=2,則上式和我們的二元分類算法中的弱分類器的係數一致。
5. Adaboost迴歸問題的算法流程
這裏我們對AdaBoost迴歸問題算法流程做一個總結。AdaBoost迴歸算法變種很多,下面的算法爲Adaboost R2迴歸算法過程。
1) 初始化樣本集權重爲
2) 對於k=1,2,...K:
b) 計算訓練集上的最大誤差
c) 計算每個樣本的相對誤差:
d) 計算迴歸誤差率
c) 計算弱學習器的係數
d) 更新樣本集的權重分佈爲
3) 構建最終強學習器爲:
6. Adaboost算法的正則化
如果我們加上了正則化項,則有
7. Adaboost小結
到這裏Adaboost就寫完了,前面有一個沒有提到,就是弱學習器的類型。理論上任何學習器都可以用於Adaboost.但一般來說,使用最廣泛的Adaboost弱學習器是決策樹和神經網絡。對於決策樹,Adaboost分類用了CART分類樹,而Adaboost迴歸用了CART迴歸樹。
這裏對Adaboost算法的優缺點做一個總結。
Adaboost的主要優點有:
1)Adaboost作爲分類器時,分類精度很高
2)在Adaboost的框架下,可以使用各種迴歸分類模型來構建弱學習器,非常靈活。
3)作爲簡單的二元分類器時,構造簡單,結果可理解。
4)不容易發生過擬合
Adaboost的主要缺點有:
1)對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性。