Adaboost演算法原理詳解
Adaboost介紹
Adaboost,是英文Adaptive Boosting(自適應增強)的縮寫,它的自適應在於:前一個基本分類器分錯的樣本會得到加強,加權後的全體樣本再次被用來訓練下一個基本分類器,同時,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代數。
Adaboost步驟
- 初始化訓練資料的權值分佈,如果有N個樣本,每個訓練樣本最開始都被賦予相同權重:1/N。
- 訓練弱分類器。具體過程中,如果一個樣本被準確分類,那麼在構造下一個訓練集中,它的權重就被降低;相反,如果某個樣本沒有被準確分類,那麼它的權重就得到提高。然後,權重更新過的樣本集被用於訓練下一分類器,整個訓練過程如此迭代下去。
- 將各個訓練得到的弱分類器組合成強分類器。各個弱分類器的訓練過程結束後,加大分類誤差率小的分類器的權重,使其在最後的分類函式中起較大的決定作用,而降低分類誤差率的弱分類器的權重,使其在最後的分類函式中起較小的決定作用。
下面介紹幾條運算中需要用到的公式
誤差率
誤差率表示錯誤的個數佔的比重,結合每個樣本的權重的話,就變成了最右邊的公式,I中表示分類錯誤的樣本,w表示每個樣本的權重,一共有N個樣本。
權重係數
在步驟3說到,我們需要給每個分類器一個權重,最後再結合,我們需要定義一個權重係數。 權重係數,它表示弱分類器在最終分類器中的重要程度(可以得到弱分類器在最終分類器的權重)。 當e<=0.5時,a>=0,且a隨著e的減小而增大,意味著誤差率越小的分類器在最終分類器的作用越大。
例子
有10個樣本,樣本0.1.2.6.7.8是1類別,3.4.5.9是-1類別。 每個樣本的權值都是1/10=0.1, 現在我們要考慮從哪裡切一刀,使得誤差率最小。 這裡我們通過計算得到當分類值2.5時誤差率最小,為0.3。 接著我們計算第一個分類器的權重係數: 這個a1代表第一個分類器在最終的分類函式中所佔的比重為0.4236 在步驟2說到,我們要更新訓練集的權重,有很多種方法對資料的權重進行改變,目的都是一樣的 (對正確分類的資料減小權重,對錯誤分類的增加權重)。 上面就是對權值的更新,對正確分類的資料減小權重,對錯誤分類的增加權重,可用於下一輪的迭代。 第二個分類器的權重係數也可以計算出來,為0.6496,這個a2代表第二個分類器在最終的分類函式中所佔的比重為0.6496。 同理我們可以繼續對樣本進行權重更新,構造第三個分類器,最後計算出誤差率進而求第三個分類器權重係數為0.7514。 我們最後把三個弱分類器組合起來,成為一個強分類器 G(x)=sign(0.4236G1(X)+0.6496G2(X)+0.7514G3(X))(sign表示當x<0.取-1,當x>0,取1) 這就是Adaboost的一個構造過程,不復雜,但效果很好。
總結
Adaboost是一種整合演算法,通過結合弱分類器來得到最終的強分類器。
- 優點: 泛化錯誤率低,易編碼,可用在絕大部分分類器上,無引數調整
- 缺點: 對離群點敏感(難以分類,權重會呈指數增長)