機(jī)器學(xué)習(xí)算法學(xué)習(xí)-梯度提升樹(GBDT)

1. 算法

GBDT (Gradient Boosting Decision Tree) ,梯度提升樹,是屬于集成算法中boosting類的一種算法。這個(gè)算法是現(xiàn)有機(jī)器學(xué)習(xí)算法中相對(duì)較實(shí)用的算法。由其衍生的lightGBR以及Xgboost都是非常實(shí)用的數(shù)據(jù)分析工具。

1.1 與Adboost比較

回顧下Adaboost,我們是利用前一輪迭代弱學(xué)習(xí)器的誤差率來更新訓(xùn)練集的權(quán)重,這樣一輪輪的迭代下去,Adboost實(shí)際上是加法模型(結(jié)果是加權(quán)累加各個(gè)單層決策樹的結(jié)果)+前向分布算法(利用前一輪迭代弱學(xué)習(xí)器的誤差率來更新訓(xùn)練集的權(quán)重)。GBDT也是迭代,使用了前向分布算法,二者的大體框架類似,但是弱學(xué)習(xí)器限定了只能使用CART回歸樹模型,同時(shí)迭代思路和Adaboost也有所不同。

相同:

1. 都是 Boosting 家族成員,使用弱分類器;

2. 都使用加法模型和前向分布算法;

不同:

1. 迭代思路不同:Adaboost 是通過提升錯(cuò)分?jǐn)?shù)據(jù)點(diǎn)的權(quán)重來彌補(bǔ)模型的不足,更新弱學(xué)習(xí)器的權(quán)重和強(qiáng)學(xué)習(xí)器的權(quán)重(利用錯(cuò)分樣本),而 GBDT 是通過算梯度來彌補(bǔ)模型的不足,更新弱學(xué)習(xí)器的權(quán)重和強(qiáng)學(xué)習(xí)器的權(quán)重(利用殘差);

2. 損失函數(shù)不同:AdaBoost 采用的是指數(shù)損失,GBDT 使用的是絕對(duì)損失或者 Huber 損失函數(shù);

1.2?GBDT的負(fù)梯度擬合

在GBDT的迭代中,假設(shè)我們前一輪迭代得到的強(qiáng)學(xué)習(xí)器是f_{t-1}(x), 損失函數(shù)是L(y,f_{t-1}(x)), 我們本輪迭代的目標(biāo)是找到一個(gè)CART回歸樹模型的弱學(xué)習(xí)器h_{t}(x),讓本輪的損失函數(shù)L(y,f_{t}(x))=L(y, f_{t-1}(x)+h_{t}(x))最小。也就是說,本輪迭代找到?jīng)Q策樹,要讓樣本的損失盡量變得更小。

GBDT的思想可以用一個(gè)通俗的例子解釋,假如有個(gè)人30歲,我們首先用20歲去擬合,發(fā)現(xiàn)損失有10歲,這時(shí)我們用6歲去擬合剩下的損失,發(fā)現(xiàn)差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有一歲了。如果我們的迭代輪數(shù)還沒有完,可以繼續(xù)迭代下面,每一輪迭代,擬合的歲數(shù)誤差都會(huì)減小。

如果認(rèn)為 GBDT是分類樹那就大錯(cuò)特錯(cuò)了(雖然調(diào)整后也可以分類)。對(duì)于分類樹而言,其值加減無意義(如性別),而對(duì)于回歸樹而言,其值加減才是有意義的(如說年齡)。GBDT 的核心在于累加所有樹的結(jié)果作為最終結(jié)果,所以 GBDT 中的樹都是回歸樹,不是分類樹,這一點(diǎn)相當(dāng)重要。

回歸樹在分枝時(shí)會(huì)窮舉每一個(gè)特征的每個(gè)閾值以找到最好的分割點(diǎn),衡量標(biāo)準(zhǔn)是最小化均方誤差。

模型的預(yù)測(cè)值可以表示為:

f_{i}(x)?為基模型與其權(quán)重的乘積,模型的訓(xùn)練目標(biāo)是使預(yù)測(cè)值?F_{k}(x) 逼近真實(shí)值 y,也就是說要讓每個(gè)基模型的預(yù)測(cè)值逼近各自要預(yù)測(cè)的部分真實(shí)值。由于要同時(shí)考慮所有基模型,導(dǎo)致了整體模型的訓(xùn)練變成了一個(gè)非常復(fù)雜的問題。所以研究者們想到了一個(gè)貪心的解決手段:每次只訓(xùn)練一個(gè)基模型。那么,現(xiàn)在改寫整體模型為迭代式:

這樣一來,每一輪迭代中,只要集中解決一個(gè)基模型的訓(xùn)練問題:使F_{k}(x)逼近真實(shí)值y

舉個(gè)例子:比如說 A 用戶年齡 20 歲,第一棵樹預(yù)測(cè) 12 歲,那么殘差就是 8,第二棵樹用 8 來學(xué)習(xí),假設(shè)其預(yù)測(cè)為 5,那么其殘差即為 3,如此繼續(xù)學(xué)習(xí)即可。

那么 Gradient 從何體現(xiàn)?其實(shí)很簡(jiǎn)單,其殘差其實(shí)是最小均方損失函數(shù)關(guān)于預(yù)測(cè)值的反向梯度(劃重點(diǎn)):

也就是說,預(yù)測(cè)值和實(shí)際值的殘差與損失函數(shù)的負(fù)梯度相同。

但要注意,基于殘差 GBDT 容易對(duì)異常值敏感,舉例:

很明顯后續(xù)的模型會(huì)對(duì)第 4 個(gè)值關(guān)注過多,這不是一種好的現(xiàn)象,所以一般回歸類的損失函數(shù)會(huì)用絕對(duì)損失或者 Huber 損失函數(shù)來代替平方損失函數(shù)。

1.3 GBDT回歸算法

好了,有了上面的思路,下面我們總結(jié)下GBDT的回歸算法。為什么沒有加上分類算法一起?那是因?yàn)榉诸愃惴ǖ妮敵鍪遣贿B續(xù)的類別值,需要一些處理才能使用負(fù)梯度,我們?cè)谙乱还?jié)講。

輸入是訓(xùn)練集樣本T={(x,y1),(x2,y2),...(xm,ym)}, 最大迭代次數(shù)T, 損失函數(shù)L。

輸出是強(qiáng)學(xué)習(xí)器f(x)

1) 初始化弱學(xué)習(xí)器

2) 對(duì)迭代輪數(shù)t=1,2,...T有:

????a)對(duì)樣本i=1,2,...m,計(jì)算負(fù)梯度

? ??b)利用(x_{i}, r_{ti})(i=1,2,3...m), 擬合一顆CART回歸樹,得到第t顆回歸樹,其對(duì)應(yīng)的葉子節(jié)點(diǎn)區(qū)域?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=R_%7Btj%7D%2Cj%3D1%2C2%2C3...J" alt="R_{tj},j=1,2,3...J" mathimg="1">。其中J為回歸樹t的葉子節(jié)點(diǎn)的個(gè)數(shù)。

? ??c) 對(duì)葉子區(qū)域j =1,2,..J,計(jì)算最佳擬合值

? ??d) 更新強(qiáng)學(xué)習(xí)器

3) 得到強(qiáng)學(xué)習(xí)器f(x)的表達(dá)式

1.4 GBDT分類算法

梯度提升分類樹的原理和思想和梯度提升回歸樹本質(zhì)上是沒有區(qū)別的。他們的模型都是決策回歸樹(DecisionTreeRegressor),可能有人有疑問,為什么梯度提升分類樹的模型也是決策回歸樹,那是怎么實(shí)現(xiàn)分類的呢?其實(shí)梯度提升分類樹和邏輯斯蒂回歸類似。

? 邏輯斯蒂回歸的預(yù)測(cè)模型:sigmoid函數(shù) + 線性回歸

? 梯度提升分類樹的預(yù)測(cè)模型: sigmoid函數(shù) + 決策回歸樹

但是由于梯度提升分類樹的樣本輸出不是連續(xù)的而是離散的,因此無法直接擬合類別輸出的誤差。這時(shí)候需要構(gòu)建交叉熵?fù)p失函數(shù)(也叫對(duì)數(shù)損失函數(shù))。

詳細(xì)的數(shù)學(xué)推導(dǎo)可以看看這篇文章:http://www.itdecent.cn/p/e44f163fea1a

1.5?GBDT常用損失函數(shù)

這里我們?cè)賹?duì)常用的GBDT損失函數(shù)做一個(gè)總結(jié)。

對(duì)于分類算法,其損失函數(shù)一般有對(duì)數(shù)損失函數(shù)和指數(shù)損失函數(shù)兩種:

a) 如果是指數(shù)損失函數(shù),則損失函數(shù)表達(dá)式為

其負(fù)梯度計(jì)算和葉子節(jié)點(diǎn)的最佳負(fù)梯度擬合參見Adaboost原理篇。

b)?如果是對(duì)數(shù)損失函數(shù),分為二元分類和多元分類兩種,



對(duì)于回歸算法,常用損失函數(shù)有如下4種:

a)均方差,這個(gè)是最常見的回歸損失函數(shù)了

b)絕對(duì)損失,這個(gè)損失函數(shù)也很常見

對(duì)應(yīng)負(fù)梯度誤差為:

c)Huber損失,它是均方差和絕對(duì)損失的折衷產(chǎn)物,對(duì)于遠(yuǎn)離中心的異常點(diǎn),采用絕對(duì)損失,而中心附近的點(diǎn)采用均方差。這個(gè)界限一般用分位數(shù)點(diǎn)度量。損失函數(shù)如下:

對(duì)應(yīng)的負(fù)梯度誤差為:

d) 分位數(shù)損失。它對(duì)應(yīng)的是分位數(shù)回歸的損失函數(shù),表達(dá)式為

其中θ為分位數(shù),需要我們?cè)诨貧w前指定。對(duì)應(yīng)的負(fù)梯度誤差為:

對(duì)于Huber損失和分位數(shù)損失,主要用于健壯回歸,也就是減少異常點(diǎn)對(duì)損失函數(shù)的影響。


1.6 正則化

和Adaboost一樣,我們也需要對(duì)GBDT進(jìn)行正則化,防止過擬合。GBDT的正則化主要有三種方式。

第一種是和Adaboost類似的正則化項(xiàng),即步長(learning rate)。定義為ν,對(duì)于前面的弱學(xué)習(xí)器的迭代

如果我們加上了正則化項(xiàng),則有

ν的取值范圍為0<ν≤10<ν≤1。對(duì)于同樣的訓(xùn)練集學(xué)習(xí)效果,較小的ν意味著我們需要更多的弱學(xué)習(xí)器的迭代次數(shù)。通常我們用步長和迭代最大次數(shù)一起來決定算法的擬合效果。

第二種正則化的方式是通過子采樣比例(subsample)。取值為(0,1]。注意這里的子采樣和隨機(jī)森林不一樣,隨機(jī)森林使用的是放回抽樣,而這里是不放回抽樣。如果取值為1,則全部樣本都使用,等于沒有使用子采樣。如果取值小于1,則只有一部分樣本會(huì)去做GBDT的決策樹擬合。選擇小于1的比例可以減少方差,即防止過擬合,但是會(huì)增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間。

使用了子采樣的GBDT有時(shí)也稱作隨機(jī)梯度提升樹(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采樣,程序可以通過采樣分發(fā)到不同的任務(wù)去做boosting的迭代過程,最后形成新樹,從而減少弱學(xué)習(xí)器難以并行學(xué)習(xí)的弱點(diǎn)。

第三種是對(duì)于弱學(xué)習(xí)器即CART回歸樹進(jìn)行正則化剪枝。在決策樹原理篇里我們已經(jīng)講過,這里就不重復(fù)了。

2. 優(yōu)缺點(diǎn)

GBDT主要的優(yōu)點(diǎn)有:

1) 可以靈活處理各種類型的數(shù)據(jù),包括連續(xù)值和離散值。

2) 在相對(duì)少的調(diào)參時(shí)間情況下,預(yù)測(cè)的準(zhǔn)確率也可以比較高。這個(gè)是相對(duì)SVM來說的。

3)使用一些健壯的損失函數(shù),對(duì)異常值的魯棒性非常強(qiáng)。比如 Huber損失函數(shù)和Quantile損失函數(shù)。

4)可以自動(dòng)進(jìn)行特征組合,擬合非線性數(shù)據(jù);

GBDT的主要缺點(diǎn)有:

1)由于弱學(xué)習(xí)器之間存在依賴關(guān)系,難以并行訓(xùn)練數(shù)據(jù)。不過可以通過自采樣的SGBT來達(dá)到部分并行。

3. 鏈接

梯度提升分類樹原理推導(dǎo)(超級(jí)詳細(xì)?。?/p>

http://www.itdecent.cn/p/e44f163fea1a

【機(jī)器學(xué)習(xí)】決策樹(中)——Random Forest、Adaboost、GBDT (非常詳細(xì))

https://zhuanlan.zhihu.com/p/86263786

梯度提升樹(GBDT)原理小結(jié)

https://www.cnblogs.com/pinard/p/6140514.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容