模型的基本原理不在赘述,仅结合scikit-learn中gbdt的实现,理清思路。
1 流程图
![](https://img.haomeiwen.com/i1813291/b700ad952c9aae80.png)
1.1 总体迭代过程
![](https://img.haomeiwen.com/i1813291/231806c7be35907e.png)
2 损失函数
2.1 GradientBoostingRegressor的损失函数
sklearn中实现了四种目标函数:LeastSquaresError,LeastAbsoluteError,HuberLossFunction,QuantileLossFunction。本人只使用过LeastSquaresError,LeastAbsoluteError这两种,因此仅对这两种目标函数展开理解。
-
LeastSquaresError
最小均方误差函数,形式为:
均方误差损失函数.png
其对应的负梯度为:
均方误差损失函数-负梯度.png
代码中的体现为:
![](https://img.haomeiwen.com/i1813291/f0c3180a91419a20.png)
-
LeastAbsoluteError
最小绝对值误差函数:形式为:
![](https://img.haomeiwen.com/i1813291/1ca106315d7a9604.png)
![](https://img.haomeiwen.com/i1813291/8b6ae522c34d653d.png)
2.2 GradientBoostingClassifier的损失函数
sklearn中实现了两种目标函数:Deviance(二分类问题BinomialDeviance和多分类问题MultinomialDeviance),ExponentialLoss。
- BinomialDeviance损失函数为:
![](https://img.haomeiwen.com/i1813291/44dac2b1e07aaafa.png)
负梯度
![](https://img.haomeiwen.com/i1813291/87a2c9eb74ad02c2.png)
代码中的体现
![](https://img.haomeiwen.com/i1813291/ea017b63c777e0cf.png)
- ExponentialLoss 损失函数为:
![](https://img.haomeiwen.com/i1813291/381afec4e698d7e7.png)
负梯度
![](https://img.haomeiwen.com/i1813291/509c44df65e91778.png)
代码中的体现
![](https://img.haomeiwen.com/i1813291/ac59aeee77e54432.png)
实际上以上两种损失函数都是偏差最小化损失函数,其一般化公式为:
![](https://img.haomeiwen.com/i1813291/3c8a47503d230a53.png)
值得注意的是,在Friedman的论文Greedy Function Approximation A Gradient Boosting Machine 中,描述的目标函数为
![](https://img.haomeiwen.com/i1813291/603772226a9d3620.png)
该目标函数对应的标签为y = {-1,1} ,而sklearn中对应的标签为y = {0,1}, 两者是等价的:
![](https://img.haomeiwen.com/i1813291/73e0b08ca382df66.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
网友评论