注:本文假設讀者已經有了AdaBoost和GBDT的背景知識。
看到網上關於AdaBoost和GBDT資料都不少,可是鮮有資料介紹他們聯繫,剛好之前有看過,最近複習到此,覺得有所收穫,所以記錄下來。此爲讀書筆記,若有錯誤,請予糾正。
前情概要:涉及公式較多,如要閱讀,請提前找一個安靜場所。
轉載請標明出處:http://blog.csdn.net/wuzqchom/article/details/69487888
本篇文章分爲兩部分,第一部分:http://blog.csdn.net/wuzqChom/article/details/69487847
從AdaBoost到GBDT
若上面的式子使用梯度下降求解,則可將式子變換爲:
minηminh1N∑Nn=1exp(−yn(∑T−1t=1αtgt(xn)+ηh(xn)))
h 可以想象爲一個方向,η 爲往該方向走多遠,和梯度下降完全一個概念。對應到AdaBoost上面,h 即爲一棵決策樹,而η 即爲該樹的權重。
上面的AdaBoost損失函數是指數函數,把它generalize一點:
minηminh1N∑Nn=1err(∑T−1t=1αtgt(xn)+ηh(xn),yn)
上面的式子就是GradientBoost 的優化式子了。但是損失函數要求平滑。
將err 損失函數換成squared-error,並一階泰勒展開(先不考慮η ):
minh1N∑n=1Nerr(∑t=1T−1αtgt(xn)sn+ηh(xn),yn)≈minh1N∑n=1Nerr(sn,yn)+1N∑n=1Nηh(xn)∗2(sn−yn)
由於我們現在是要優化關於
h 的函數,所以第一項可以看成是常數,還記得嗎,
h 即相當於確定了一個方向而已,至於走多遠,我們可以交由
η 來決定(即第二步優化確定),但我們目前僅關注應該往哪個方向走。我們可以加限制條件令
h 的長度爲1,但是約束化的優化問題比較不容易求,可以加一個L2正則轉換成無約束的優化問題。上式就變成了:
minhC1+ηN∑n=1N(h(xn)∗2(sn−yn)+(h(xn))2)=C1+ηN∑n=1N(C2+(h(xn)−(yn−sn))2)
C1,C2 爲常數項,第一個式子到第二個式子用了配方,並把無關項設爲常數
C2 .
從上面的式子可以看出,加了正則化的優化目標即爲求平方錯誤的迴歸問題
{xn,yn−sn} ,
yn−sn 即爲殘差。GBDT每一棵決策樹就是爲了擬合殘差,這是朝着
h 方向走的結果,而
h 爲一個函數,在GBDT當中即爲一棵決策樹。
好了,現在我們方向找到了,究竟應該朝這個方向走多遠,那麼就是
η 來決定啦。優化
η 容易得多,即爲單變量的優化問題(注意此時已經從
g 的集合
h 中找到了最優的
gt ):
minη1N∑n=1N(−yn(∑t=1T−1αtgt(xn)sn+ηgt(xn)−yn))2=1N((yn−sn)−ηgt(xn))2
又見殘差!!
經過上述的優化之後,我們就得到了
αt 和
gt ,對了,上述所說的準確來說還只是GB迴歸問題,假如我們的每一個
g 都是有決策樹學術來的,那麼就是我們要的GBDT了。
簡單總結一下GBDT的過程:
- 用決策樹算法學,以{xn,yn−sn} 爲目標學得棵決策樹gt 。
- 在學得gt 之後,解{gt(xn) ,yn−sn }的單變量的線性迴歸問題得到αt 。
- 更新sn=sn+αtgt(xn)
- 重複1-3,到一定次數爲止,返回G(x)=∑Tt=1αtgt(x)
ps:
GBDT實際上是用迴歸樹來作爲基分類器,所以用GBRT可能更合適一點。
The end.
參考資料:林軒田. 機器學習技法課程 Lecture 11.