決策樹算法之 AdaBoost

AdaBoost 是一種更高級的「森林」類型的決策樹,和隨機森林比起來,它有如下三個特色學習

  1. AdaBoost 的每棵樹都只有一個根節點和兩個葉子節點,實際上叫樹樁(stump)可能會更合適
  2. AdaBoost 的每一個樹樁的權重是不一樣的,而隨機森林中的每棵樹的權重是相同的
  3. 前一個樹樁的錯誤數據會影響後一個樹樁的生成,意味着後面的樹樁是前面樹樁的補足。這種思想也被稱爲 Boost,除 AdaBoost 外,GBDT 和 XGBoost 也是這樣的思想(很明顯它們中都有 Boost)。

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

Weight_{stump} = \frac{1}{2}\log(\frac{1-TotalError}{TotalError})

該公式的曲線以下圖所示,能夠看到,偏差的取值範圍在 0 到 1 之間,隨着偏差越大,樹樁的 Weight 越小,上例中,咱們的偏差爲 0.125,所對應的 Weight 爲 0.973,也就是圖中藍色點所處的位置:io

一棵樹樁產生出來後,接着就要產生第二棵,前面說了,後一棵樹的生成依賴於前一棵樹的偏差,具體的,咱們會根據這個偏差來調整每一個樣本的權重,這樣,後面的樹就能夠根據樣本的新權重來訓練了,更進一步,前一棵樹中錯誤的樣本,咱們但願在下一棵樹的訓練中,提升這些樣本的權重,同時下降正確樣本的權重,這樣下一棵樹便會更傾向於把這類樣本處理好,起到了對前面樹的補足做用table

總體偏差和樹的 Weight 成負相關關係,Weight 越高表明置信度越高,這時錯誤的樣本相對於 Weight 低的樹來講,樣本權重要調的更高,而正確的樣本的權重要調的更低,錯誤樣本權重和正確樣本權重的調整分別以下面左圖和右圖所示:class

對於本例來講,第一個樹樁的 Weight 爲 0.973,則錯誤樣本的權重根據左圖公式,將調整爲 0.125 \times 2.646 = 0.33,同理,正確樣本的權重根據右圖公式,將調整爲 0.125 \times 0.378=0.05,歸一化後,最終全部樣本的權重調整以下:隨機數

序號 舊樣本權重 新樣本權重 歸一化後
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 的預測

在構建完 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 個特色:

  1. 每棵樹只有一個根節點和兩個葉子節點
  2. 後一棵樹由前一棵樹的偏差決定
  3. 每棵樹都有不一樣的權重,預測時會根據權重來聚合預測結果

參考:AdaBoost, Clearly Explained

相關文章:

相關文章
相關標籤/搜索