AdaBoost 是一種更高級的「森林」類型的決策樹,和隨機森林比起來,它有如下三個特色學習
假設咱們有如下訓練數據,咱們想經過「胸口疼痛」、「血管堵塞」和「體重」這三個特徵來訓練一個心臟病預測模型:3d
胸口疼痛 | 血管堵塞 | 體重 | 患心臟病 |
---|---|---|---|
Yes | Yes | 205 | Yes |
No | Yes | 180 | Yes |
Yes | No | 210 | Yes |
Yes | Yes | 167 | Yes |
No | Yes | 156 | No |
No | Yes | 125 | No |
Yes | No | 168 | No |
Yes | Yes | 172 | No |
首先,咱們須要爲每一個樣本附上一個相同的權重,由於只有 8 條數據,因此每一個樣本的權重均爲 1/8,以下cdn
胸口疼痛 | 血管堵塞 | 體重 | 患心臟病 | 樣本權重 |
---|---|---|---|---|
Yes | Yes | 205 | Yes | 1/8 |
No | Yes | 180 | Yes | 1/8 |
Yes | No | 210 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
No | Yes | 156 | No | 1/8 |
No | Yes | 125 | No | 1/8 |
Yes | No | 168 | No | 1/8 |
Yes | Yes | 172 | No | 1/8 |
接下來,咱們利用基尼不純度在這 3 個特徵中找一個最合適的做爲樹根,通過計算,當「體重 >176」 時,基尼不純度最小,則第一個樹樁的節點爲「體重 >176」,以下圖所示:blog
產生出一個樹樁後,咱們把該樹樁判斷錯誤的樣本拿出來,將它們的權重相加,便得出該樹樁的總偏差,上述樹樁只有一個錯誤樣本:get
胸口疼痛 | 血管堵塞 | 體重 | 患心臟病 | 樣本權重 |
---|---|---|---|---|
Yes | Yes | 167 | Yes | 1/8 |
則該樹樁的總偏差(Total Error)即這條錯誤樣本的權重——0.125。經過總偏差,咱們即可以計算出該樹樁的 Weight:it
該公式的曲線以下圖所示,能夠看到,偏差的取值範圍在 0 到 1 之間,隨着偏差越大,樹樁的 Weight 越小,上例中,咱們的偏差爲 0.125,所對應的 Weight 爲 0.973,也就是圖中藍色點所處的位置:io
一棵樹樁產生出來後,接着就要產生第二棵,前面說了,後一棵樹的生成依賴於前一棵樹的偏差,具體的,咱們會根據這個偏差來調整每一個樣本的權重,這樣,後面的樹就能夠根據樣本的新權重來訓練了,更進一步,前一棵樹中錯誤的樣本,咱們但願在下一棵樹的訓練中,提升這些樣本的權重,同時下降正確樣本的權重,這樣下一棵樹便會更傾向於把這類樣本處理好,起到了對前面樹的補足做用。table
總體偏差和樹的 Weight 成負相關關係,Weight 越高表明置信度越高,這時錯誤的樣本相對於 Weight 低的樹來講,樣本權重要調的更高,而正確的樣本的權重要調的更低,錯誤樣本權重和正確樣本權重的調整分別以下面左圖和右圖所示:class
對於本例來講,第一個樹樁的 Weight 爲 0.973,則錯誤樣本的權重根據左圖公式,將調整爲 ,同理,正確樣本的權重根據右圖公式,將調整爲
,歸一化後,最終全部樣本的權重調整以下:隨機數
序號 | 舊樣本權重 | 新樣本權重 | 歸一化後 |
---|---|---|---|
1 | 1/8 | 0.05 | 0.07 |
2 | 1/8 | 0.05 | 0.07 |
3 | 1/8 | 0.05 | 0.07 |
4 | 1/8 | 0.33 | 0.49 |
5 | 1/8 | 0.05 | 0.07 |
6 | 1/8 | 0.05 | 0.07 |
7 | 1/8 | 0.05 | 0.07 |
8 | 1/8 | 0.05 | 0.07 |
接下來,咱們須要根據新的特徵權重來訓練樹樁,其中的一種辦法是根據權重來抽樣,即在每抽一條數據以前,產生一個 0-1 的隨機數,根據隨機數來決定抽哪條數據。以上面的數據舉例,當隨機數落在 [0, 0.07) 範圍內時,則抽出第 1 條樣本,落在 [0.07, 0.14) 範圍內時,則抽出第 2 條樣本,以此類推。
抽樣完成後,咱們從新對這些樣本賦予等值的權重,以下:
胸口疼痛 | 血管堵塞 | 體重 | 患心臟病 | 樣本權重 |
---|---|---|---|---|
No | Yes | 156 | No | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
No | Yes | 125 | No | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
Yes | Yes | 172 | No | 1/8 |
Yes | Yes | 205 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
可見第 4 條樣本被重複抽出來了屢次(它的樣本權重最高),使用這批數據訓練後,新的樹樁會更傾向於把這條樣本分類正確,由於在訓練時,重複的樣本會受到更大的懲罰。
接下來的步驟和最開始的同樣,重複上面的過程就能夠了。
在構建完 AdaBoost 後,咱們該如何作預測呢?預測過程和隨機森林相似,都是用每棵樹的結果來投票,差異在於這裏採用的是加權投票。例如咱們有條數據,每棵樹對該數據的預測結果以下:
樹序號 | 樹 Weight | 預測結果 |
---|---|---|
1 | 0.97 | 1 |
2 | 0.34 | 0 |
... | ... | ... |
100 | 0.46 | 1 |
聚合後,把相同預測結果的 Weight 相加,以下
預測結果 | 樹 Weight 之和 |
---|---|
1 | 43.7 |
0 | 20.1 |
取 Weight 較大者,因此該條數據的預測結果爲 1.
本文咱們一塊兒學習了 AdaBoost 的構建過程,AdaBoost 和隨機森林比起來,有 3 個特色:
參考:AdaBoost, Clearly Explained
相關文章: