牛顿提升(XGBoost)的一步:梯度、海森、增益和叶子权重

XGBoost 一类的提升树每一步怎么决定在哪里分裂、叶子取多少?正则化参数 λ、γ 起什么作用?

SOA SRMSOA PACAS MAS-II按输入的参数计算
对过的标准答案
3 条
覆盖的考试公式
1 个
参数
8 个
开源库
1 个

01当场运行

改一个参数,当场重算

正在用默认参数运行,计算量大的方法最多要 20 秒。

04出处和说明

公式从哪里来,有什么限制

列出参考的教材、论文和考试公式条目。方法的限制和实现上的说明也写在这里。

参考

  • Chen、Guestrin (2016) XGBoost: a scalable tree boosting system, KDD
  • Hastie、Tibshirani、Friedman:The Elements of Statistical Learning(第 2 版)第 10 章 Boosting and additive trees

覆盖的考试公式

  • SML-007BoostingSRMPAMAS-II

公式条目按精算考试的公式表整理,编号和中文名是平台自己的。

这个方法算什么

对当前的预测 F 算每个观测的一阶导 g 和二阶导 h,按一个变量的每个分裂点算分裂增益 ½[G_L²/(H_L+λ) + G_R²/(H_R+λ) − G²/(H+λ)] − γ,取增益最大的一刀,叶子权重 w* = −G/(H+λ)。增益不大于 0 时不分裂。支持平方误差、对数损失、泊松偏差(带风险暴露)。

说明和限制

  • XGBoost 把损失在当前预测处做二阶展开,每片叶子的最优权重是牛顿法的一步。λ 把叶子权重往 0 收缩,γ 是每多一片叶子要付的代价(增益要超过它才分裂)。
  • 平方误差时 g = F − y、h = 1,λ = 0 的叶子权重就是残差的平均。对数损失 g = p − y、h = p(1 − p)。泊松 g = μ − y、h = μ(μ = e·exp F)。
  • 更新后的预测 F + η·w*。只有一个变量时,这里把每个相邻值的中点都试一遍(精确的贪心算法)。

数据

没有用数据:按输入的参数计算

开源库和版本

  • numpy2.4.6BSD-3-Clause数值计算