模型的基本原理不在赘述,仅结合scikit-learn中gbdt的实现,理清思路。
1 流程图
1.1 总体迭代过程
2 损失函数
2.1 GradientBoostingRegressor的损失函数
sklearn中实现了四种目标函数:LeastSquaresError,LeastAbsoluteError,HuberLossFunction,QuantileLossFunction。本人只使用过LeastSquaresError,LeastAbsoluteError这两种,因此仅对这两种目标函数展开理解。
-
LeastSquaresError
最小均方误差函数,形式为:
其对应的负梯度为:
代码中的体现为:
-
LeastAbsoluteError
最小绝对值误差函数:形式为:
2.2 GradientBoostingClassifier的损失函数
sklearn中实现了两种目标函数:Deviance(二分类问题BinomialDeviance和多分类问题MultinomialDeviance),ExponentialLoss。
- BinomialDeviance损失函数为:
负梯度
代码中的体现
- ExponentialLoss 损失函数为:
负梯度
代码中的体现
实际上以上两种损失函数都是偏差最小化损失函数,其一般化公式为:
值得注意的是,在Friedman的论文Greedy Function Approximation A Gradient Boosting Machine 中,描述的目标函数为
该目标函数对应的标签为y = {-1,1} ,而sklearn中对应的标签为y = {0,1}, 两者是等价的:
2.3 单棵回归树
在总体迭代过程一节我们已经看到,每次迭代都会建立一个回归树去拟合负梯度向量,与建树相关的点有:
- 损失函数
均方差损失函数 -
节点分裂原则:
通常使用的是friedman_mse原则,公式为Greedy Function Approximation: A Gradient Boosting Machine论文中的(35)式:
- 叶子节点的值
叶子节点的值为分到该叶子节点的所有样本对应的输出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