模型的基本原理不在赘述,仅结合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



