機器學習實戰——利用AdaBoost元算法提高分類性能

一、 Adaboost概述

1、過程描述:


如上圖所示,Adaboost的訓練過程有如一個學生學習的過程:我們把每個訓練樣例看做一道練習題,所有的訓練樣本看做一本習題集。第一次做題的時候,由於每道題都沒有做過,不知道哪些難哪些簡單,所以一視同仁,做完了對照答案,可能會有很多題目做的不對,那麼對於做錯的題目,我們就重點標記,給予更高的重視程度,這個用權重w來標示,到第二輪做題的時候就重視這些沒做對的“難題”,對於第一次就做對的題目,可以認爲是比較簡單的,那麼第二次的時候稍微看下就可以了,可以降低他的權重。並且,對於第一輪做完以後的效果給一個整體的評分,評價這輪做題的能力,這個就是alpha。在第二輪做題的時候,就按照上一輪調整過的權重對不同的題目給予不同的重視程度和時間分配。如此不斷練習,幾輪下來,難題就逐漸被攻克了。每輪做題都是有收穫的,只不過每次收穫的知識權重不同(alpha),這樣,我們最後就得到m個分類器,綜合每個分類器的權重,我們就能得到一個“學習成績很好”的分類器了。

2、 算法實現

1) 初始化所有訓練樣本的權重爲1/N, N爲訓練樣本的總數。
2) for m = 1, ..., M
a) 訓練一個弱分類器ym,使得他能最小化權重誤差函數
b) 接下來計算該分類器的話語權
c) 按照分類器的話語權,調整分類器分對和分錯的樣本的權重
其中Zm爲,
3) 最後綜合所有的分類器,得到一個強分類器

3、 一些思考

1) 對於不同的訓練樣本開始給予同樣的權重,按照上面權重調整的公式,正類和負類的調整步調分別是一致的,有沒有可能到第二輪的時候,選取的分類器還是一樣的,導致最後結果不收斂?

2) 如果對於每個分類的結果都能有一個概率描述,那麼可以參考概率大小來對不同樣本調整權重,不需要步調一致地調整權重,這樣也許更精細一些。

3) 對於最終結果是否會收斂,每次調整權重之後重新選擇的分類器就一定會比之前的分類器更好嗎?如果所有的分類器都很弱,最後的結果綜合在一起,豈不是更弱嗎?

4) 對於參數M的設置和訓練過程終止點的設定,有什麼科學的方法?

5) 如果對於每次訓練,選取不同的分類器,結果會怎麼樣呢?

6) 如何擴展到多分類問題?

二、 原理

總體的思想如開始的那張圖,表達的已經很清楚,問題就在於,權重更新的方法,錯誤率的計算方法是怎麼來的?爲什麼要這樣更新權重,爲什麼要這麼來計算錯誤率?

直接用前項分佈加法模型:


其中fm是前m個弱分類器的組合,

假設前面m-1個y和aloha都已經固定了,那麼我們要找到ym和alpha_m,使得E最小化,將E變形得到:

其中可以備看做常量(認爲前m-1個y和a都已經固定了)

最小化E的過程其實也是尋找ym最小化弱分類器

我們構造弱分類器的時候已經保證了這個條件,因爲,我們再根據上式就可以求出a的表達式爲:

 

繼而就能找到更新W的公式

三、特點

1、 Adaboost是存在過擬合的,只不過沒有決策樹那麼明顯,但是其泛化性能遠沒有SVM那麼好;
2、 Adaboost的根本就在於其權重更新和弱分類器加權組合:權重更新的過程保證了前面的弱分類器重點處理普遍問題,後面的弱分類器重點處理疑難問題,最終所有的分類器加權組合就構成一個強分類器。
3、 優點:
泛化錯誤率低, 易編碼, 可以應用在大部分的分類器上, 無參數調整;
4、 缺點:
對離羣點敏感。
5、 Adaboost每次迭代改變的都是樣本的分佈,而不是重複採樣,不用做特徵篩選,也不易overfitting。
6、 一是訓練的錯誤率上界,隨着迭代次數的增加,會逐漸下降,這個可以證明;二是adaboost算法即使訓練次數很多,也不會出現過擬合的問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章