以前一直以為GBDT算法十分的什么,而且十分難懂,但是最近看了李航老師的《統(tǒng)計(jì)學(xué)習(xí)方法》一書的第八章,從AdaBoost算法,到通過前向分步算法來解釋AdaBoost算法,再到最后的提升樹部分,感覺寫的十分細(xì)致,有些數(shù)學(xué)上的推導(dǎo)也并不是那么難懂。今天,我們就一步步揭開GBDT的什么面紗。
有關(guān)加法模型和前向分步算法,可以參考我上一節(jié)的帖子:http://www.itdecent.cn/p/a712dff0f388
關(guān)于GBDT,我們按照如下的思路展開,首先將介紹一下回歸樹的概念,然后介紹提升樹的概念,最后是梯度提升決策樹GBDT算法。
1、回歸樹
回歸樹的生成過程如下圖所示:

2、提升樹模型
提升樹算法采用前向分步算法,首先確定初始提升樹f0(x)=0,第m步的模型是:

由于書的線性組合可以很好地?cái)M合訓(xùn)練數(shù)據(jù),即使數(shù)據(jù)中的輸入與輸出之間的關(guān)系很復(fù)雜也是如此,所以提升樹是一個高功能的學(xué)習(xí)算法。
下面討論針對不同問題的提升樹學(xué)習(xí)算法,其主要區(qū)別在于使用的損失函數(shù)不同,包括平方損失函數(shù)的回歸問題,用指數(shù)損失函數(shù)的分類問題以及用一般損失函數(shù)的一般決策問題。
對于二類分類問題,提升樹算法只需將AdaBoost算法中的基分類器限制為二分類決策樹即可,可以說此時(shí)的提升樹算法是AdaBoost算法的特殊情況,這里不再細(xì)述,下面敘述回歸問題的提升樹。
我們剛才已經(jīng)回顧了回歸樹的生成,那么這里直接給出回歸提升樹的算法模型,回歸提升樹使用以下前向分步算法:

在前向分步算法的m步,需要求解以下的式子得到第m棵樹的參數(shù):

當(dāng)采用平方誤差損失函數(shù)時(shí),即使用如下的損失:

損失變?yōu)椋?/p>

可以看到,r時(shí)當(dāng)前模型擬合數(shù)據(jù)的殘差(residual),隨意,對回歸問題的提升樹算法來說,只需簡單的擬合當(dāng)前模型的殘差,這樣,算法是相當(dāng)簡單的,所以回歸問題的提升樹算法過程整理如下:


3、GBDT
提升樹利用加法模型與前向分步算法實(shí)現(xiàn)學(xué)習(xí)的優(yōu)化過程,當(dāng)損失函數(shù)是平方損失和指數(shù)損失函數(shù)時(shí),每一步的優(yōu)化是很簡單的,但對一般損失函數(shù)而言,往往每一步優(yōu)化并不是十分容易,針對這一問題,F(xiàn)reidman提出了梯度提升算法,這是利用最速下降法的近似方法,其關(guān)鍵是利用損失函數(shù)的負(fù)梯度在當(dāng)前模型的值作為提升樹算法中的殘差的近似值,擬合一個回歸樹,即:

則GBDT算法的一般流程是:


