GBDT(Gradient Boosting Decision Tree,Friedman,1999)算法自提出以來,在各個領域普遍使用。從名字裏能夠看到,該算法主要涉及了三類知識,Gradient梯度、Boosting集成算法和 Decision Tree決策樹。html
該算法是GREEDY FUNCTION APPROXIMATION A GRADIENT BOOSTING MACHINE一文提出來的,它是一種基於 Gradient 的 Boosting Ensemble 模型。該算法底層基於 CART(GBDT 主要基於迴歸樹) 和函數空間的梯度降算法,除了具備樹模型的可解釋性強、有效處理混合類型的特徵、伸縮不變性(不須要對數據標準化)、對缺失值魯棒等優勢,還具備預測能力強、穩定性好等優點。相比於它的後繼算法 XGboost/LightGBM , GBDT 只要求模型損失函數一階可導,凸或非凸都適用;而 XGboost/LightGBM 對損失函數的要求更爲苛刻,必須一階二階均可導,並且要求損失函數爲嚴格的凸函數。算法
GBDT 顧名思義,其基本原理包括兩個核心算法思想,一個是加性加強;另外一個是梯度加強。函數
加法模型:spa
最終的分類器函數形式以下:翻譯
其中,第t顆迴歸樹,其對應的葉節點區域。其中J爲葉子節點的個數。3d
針對每個葉子節點裏的樣本,咱們求出使損失函數最小,也就是擬合葉子節點最好的的輸出值以下:htm
梯度加強:blog
大牛Freidman提出了用損失函數的負梯度來擬合本輪損失的近似值,進而擬合一個CART迴歸樹。第t輪的第i個樣本的損失函數的負梯度表示爲ci
利用能夠擬合一顆CART迴歸樹,獲得了第t顆迴歸樹,其對應的葉節點區域。其中J爲葉子節點的個數。io
GBDT算法:
一、迴歸算法
A. GBDT 迴歸算法在瞭解其基本原理以後,咱們看看 GBDT 用於迴歸和分類的具體算法。在迴歸算法中,典型的損失函數爲 MSE 損失
那麼可得,在實際訓練迭代過程當中,在訓練第 t 棵樹的時候,咱們須要將擬合的目標變量變爲,能夠看到新的目標變量便是樣本的原始目標變量和截止到上一時刻模型預測輸出的差值,也就是殘差。
二、分類算法
GBDT 用於分類場景的時候,其核心是如何將分類問題轉化爲迴歸問題。咱們以多分類的基礎,闡述 GBDT 在分類中的算法過程。
假設類別數量爲 K ,通過 T 輪迭代,獲得 T*K 棵迴歸樹。即在每一輪迭代的過程當中,是針對樣本 X 每一個可能的類都訓練一個分類迴歸樹,須要創建 K 棵 1 vs. All 的迴歸樹。
多分類中,使用的損失函數爲交叉熵
也就是說,在每一輪迭代的過程當中,須要創建 K 棵 1 vs. All 的迴歸樹,且須要將葉子節點的輸出(截止到 t 時刻的第 k 棵樹的累積值)轉化爲機率,使用 Softmax 來計算
上式等價於
相比於 GBDT 迴歸,在分類的時候,樹的輸出再通過一次變換後,才進行損失函數的計算
即每一個樣本在第 t 輪中的第 k 樹的新的目標變量, 和特徵向量一塊兒構成樣本。這樣每一輪的迭代中,就能夠擬合 k 棵迴歸樹。新造成的k棵樹,求解損失函數最小的式子以下,其中,則:
上式子難以求解,葉子節點對應的預測值(或者叫權重)能夠經過一次 Newton-Raphson 操做來計算:
算法以下:
https://www.sohu.com/a/227107019_505779
https://www.cnblogs.com/pinard/p/6140514.html
這篇有個例子,https://www.cnblogs.com/ModifyRong/p/7744987.html
這篇是原文翻譯,https://www.cnblogs.com/bentuwuying/p/6667267.html