模型的基本原理不在贅述,僅結合scikit-learn中gbdt的實現,理清思路。
1 流程圖
gbdt實現流程圖.png
1.1 總體迭代過程
_fit_stage.png
2 損失函數
2.1 GradientBoostingRegressor的損失函數
sklearn中實現了四種目標函數:LeastSquaresError,LeastAbsoluteError,HuberLossFunction,QuantileLossFunction。本人只使用過LeastSquaresError,LeastAbsoluteError這兩種,因此僅對這兩種目標函數展開理解。
-
LeastSquaresError
最小均方誤差函數,形式為:
均方誤差損失函數.png
其對應的負梯度為:
均方誤差損失函數-負梯度.png
代碼中的體現為:
image.png
-
LeastAbsoluteError
最小絕對值誤差函數:形式為:
最小絕對值誤差損失函數.png
image.png
2.2 GradientBoostingClassifier的損失函數
sklearn中實現了兩種目標函數:Deviance(二分類問題BinomialDeviance和多分類問題MultinomialDeviance),ExponentialLoss。
- BinomialDeviance損失函數為:
image.png
負梯度
image.png
代碼中的體現
binomialDeviance.png
- ExponentialLoss 損失函數為:
ExponentialLoss 損失函數.png
負梯度
image.png
代碼中的體現
image.png
實際上以上兩種損失函數都是偏差最小化損失函數,其一般化公式為:
image.png
值得注意的是,在Friedman的論文Greedy Function Approximation A Gradient Boosting Machine 中,描述的目標函數為
negative binomial log-likelihood-Friedman損失函數.png
該目標函數對應的標簽為y = {-1,1} ,而sklearn中對應的標簽為y = {0,1}, 兩者是等價的:
image.png
2.3 單棵回歸樹
在總體迭代過程一節我們已經看到,每次迭代都會建立一個回歸樹去擬合負梯度向量,與建樹相關的點有:
- 損失函數
均方差損失函數 -
節點分裂原則:
節點分裂原則.png
通常使用的是friedman_mse原則,公式為Greedy Function Approximation: A Gradient Boosting Machine論文中的(35)式:
friedman_mse.png - 葉子節點的值
葉子節點的值為分到該葉子節點的所有樣本對應的輸出yi的平均值。
Refs
- Generalized Boosted Models: A guide to the gbm package
- Greedy Function Approximation: A Gradient Boosting Machine
- Additive Logistic Regression a Statistical View of Boosting.pdf