GBDT模型

模型的基本原理不在赘述,仅结合scikit-learn中gbdt的实现,理清思路。

1 流程图

gbdt实现流程图.png

1.1 总体迭代过程

_fit_stage.png

2 损失函数

2.1 GradientBoostingRegressor的损失函数

sklearn中实现了四种目标函数:LeastSquaresErrorLeastAbsoluteErrorHuberLossFunctionQuantileLossFunction。本人只使用过LeastSquaresErrorLeastAbsoluteError这两种,因此仅对这两种目标函数展开理解。

  • 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容