牛顿提升(XGBoost)的一步:梯度、海森、增益和叶子权重
XGBoost 一类的提升树每一步怎么决定在哪里分裂、叶子取多少?正则化参数 λ、γ 起什么作用?
- 对过的标准答案
- 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数值计算
05同族的方法
提升树,还有 2 个方法
同一个方法族里的其他方法。在智能体里,用一句话就能调用这些方法。
在智能体里这样问“XGBoost 一类的提升树每一步怎么决定在哪里分裂、叶子取多少?正则化参数 λ、γ 起什么作用?”