一文弄懂AdaBoost、提升树、残差树、GDBT
本人第一次看到提升方法時,也是一臉懵逼;但是時隔一個寒假,當我為春招惡補機器學習知識時,第二次看見提升方法,頓時有了“撥開云霧見青天”的感覺;古人"溫故而知新"誠不欺我。下面是我對常見的四種提升方法的一點理解。
本文來自于本人的知乎的機器學習愛好者專欄
作者:超愛學習
原文鏈接:https://zhuanlan.zhihu.com/p/59751960
1.AdaBoost
AdaBoost全稱為Adaptive Boosting,中文名稱叫做自適應提升算法;雖然名字聽起來給人一種高大上的感覺,但其實背后的原理并不難理解。什么叫做自適應,就是這個算法可以在不同的數據集上都適用,這個基本和廢話一樣,一個算法肯定要能適應不同的數據集。提升方法是指:分類問題中,通過改變訓練樣本的權重,學習多個分類器,并將這些分類器進行線性組合,提高分類器的性能。
AdaBoost和提升樹、殘差樹、GDBT之間也有這十分密切的聯系,可以毫不夸張的說,明白了AdaBoost的原理之后,理解提升樹、殘差樹和GDBT樹也是十分的容易。
1.1原理推導
推導就是copy李航的《統計學習方法》推導方法,我會適當的做一些解釋以便大家理解。
訓練數據如下:??,其中??,??。最后我們要得到分類器?,其中??為分類器的個數,每一次訓練我們都獲得一個基分類器??,??是每個基訓練器的權重,也就是說每個基分類器說話的分量。我們看最后的分類器,他就是結合多個不同基分類器的意見,集百家之長,最終輸出結果。
那么每個基分類器的權重就顯得十分重要了,那么這個權重是如何確定的呢,AdaBoost是這么考慮的,如果一個基分類器的準確率高,那么它的權重就會更高一點,反之權重就會較低。
通常我們認為AdaBoost算法是模型為加法模型、損失函數為指數函數、學習算法為前向分步算法的二類分類學習方法。現在有出現了三個新名詞:
(1)加法模型
這個就和字面的意思一樣,一個函數是由多個基函數累加而成?
其中??是每個基函數的系數,??是每個基函數的參數,??就是一個基函數了。
假設一個基函數為??,那么一個加法模型就可以寫成:??。
(2)前向分步算法
在給定訓練數據以及損失函數??的情況下,加法模型的經驗風險最小化即損失函數極小化問題如下:
這個問題直接優化比較困難,前向分步算法解決這個問題的思想如下:由于我們最終的分類器其實加法模型,所以我們可以從前向后考慮,每增加一個基分類器,就使損失函數的值更小一點,逐步的逼近最優解。這樣考慮的話,每一次計算損失函數的時候,我們只需要考慮當前基分類器的系數和參數,同時此次之前基分類器的系數和參數不受此次的影響。算法的思想有點類似梯度下降,每一次都向最優解移動一點。
因此我們可以得到前向分布算法的步驟(參考《統計學習方法》p144):
輸入:
訓練數據集??,損失函數?
基分類器?。
輸出:加法模型?
(1)初始化?
(2)對?
(a)極小化損失函數
得到參數??。
(b)更新?
(3)得到加法模型?
(3)指數損失函數
指數損失函數的形式如下
如果前向分步算法采用指數函數做為損失函數,那么其就為AdaBoost算法。
經過??輪的迭代操作,我們得到了??:
在第??輪迭代得到??和?
使用前向分布算法我們的目標是使指數損失函數的值最小
上式可以改寫成為
其中??。由于??變換不依賴??。因此與最小化無關。接下來我們就要最小化??。
假設??為我們所求,先考慮??。由于??為正整數,所以要最小化??此式,只要讓??的值相等的盡可能的多。因為當兩者值域為-1和+1。當兩者取值相等時,無論??的取何值,指數都會小于0。也就是說,此時我們可以先不考慮??的取值,只考慮??。
很明顯可以得出?
在已知??的情況下,我們求??。
求導之后,可得
其中?
上面幾個公式的推導如果不清楚,可以私信我。
1.2AdaBoost算法步驟
有了上述推導,,我們很自然的就可以寫出AdaBoost算法的步驟
輸入:訓練數據如下:??,其中??,??。
輸出:最后我們要得到分類器?。
(1)初始化訓練數據的權值分布
(2)對?
(a)使用具有權值分布??的訓練數據集學習,得到基本分類器??。
(b)計算??在訓練集上的分類誤差率
(c)計算的系數
(d)根據前??次得到的結果,更新權值:
其中??,是一個規范化因子,用于歸一化。
(3)構建最終的分類器?。
2.提升樹
提升樹和AdaBoost之間的關系就好像編程語言中對象和類的關系,一個類可以生成多個不同的對象。提升樹就是AdaBoost算法中基分類器選取決策樹樁得到的算法。
用于分類的決策樹主要有利用ID3和C4.5兩種算法,我們選取任意一種算法,生成只有一層的決策樹,即為決策樹樁。
3.殘差樹
我們可以看到AdaBoost和提升樹都是針對分類問題,如果是回歸問題,上面的方法就不奏效了;而殘差樹則是針對回歸問題的一種提升方法。其基學習器是基于CART算法的回歸樹,模型依舊為加法模型、損失函數為平方函數、學習算法為前向分步算法。
提升樹模型可以表示為??。
什么叫做殘差,比如小明的年齡是10歲,第一次我們的殘差樹擬合的值為6,那么第二次我們擬合的目標值為10-6=4。
采用平方誤差損失函數時,我們每一次學習的是上一次殘差,損失函數為
其中為殘差。每次通過擬合殘差值,那么最終就可以得到以以個很好的模型。
4.GDBT
GDBT中文名稱叫做梯度提升樹。其基本原理和殘差樹類似,基學習器是基于CART算法的回歸樹,模型依舊為加法模型、學習算法為前向分步算法。不同的是,GDBT沒有規定損失函數的類型,設損失函數為??。前向加法算法的每一步都是擬合損失函數的負梯度
如果一個函數到達極小值,那么其梯度值一定為零;當函數沒有到達最小值的時候,我們每次都選擇梯度的反方向走,這樣可以最快的到達極小值。這也就是GDBT的思想。
參考:
1.《統計學習方法》李航
2.機器學習算法GBDT的面試要點總結-上篇 - ModifyBlog - 博客園
https://www.cnblogs.com/ModifyRong/p/7744987.html
3.梯度提升樹(GBDT)原理小結 - 劉建平Pinard - 博客園
https://www.cnblogs.com/pinard/p/6140514.html
備注:公眾號菜單包含了整理了一本AI小抄,非常適合在通勤路上用學習。
往期精彩回顧那些年做的學術公益-你不是一個人在戰斗適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊備注:加入本站微信群或者qq群,請回復“加群”加入知識星球(4500+用戶,ID:92416895),請回復“知識星球”喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的一文弄懂AdaBoost、提升树、残差树、GDBT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入门GAN的补习
- 下一篇: AI基础:机器学习的损失函数