Skip to content

数学原理

本章目标

  1. 理解 XGBoost 与 GBDT 共享的数学基础——加法模型、梯度提升、收缩步长。
  2. 理解 XGBoost 独有的数学创新——二阶泰勒展开(Hessian)、显式正则化目标函数、分位数加权草图。
  3. 理解 XGBoost 的回归目标(MSE)与分类目标(交叉熵)在数学形式上的差异。

重点方法与概念速览

名称类型作用
二阶泰勒展开目标函数近似使用 Hessian(二阶导数)比仅用梯度更精确地近似损失变化
正则化目标函数模型正则化Ω(f)=γT+12λ|w|2+α|w|1——剪枝 + 权重收缩
分裂增益公式分裂决策精确计算每次分裂的损失下降——直接最大化增益
加权分位数草图近似分裂点搜索用二阶梯度加权的分位数确定候选分裂点——比等频分桶更高效
稀疏感知分裂缺失值处理自动学习缺失值的最优分裂方向
列块并行计算加速预排序后按列分块——在分裂搜索层面并行

1. 加法模型与目标函数

加法模型

与 GBDT 一致:

y^i(M)=m=1Mfm(xi),fmF

其中 F 是回归树空间,fm 是第 m 棵树。

正则化目标函数(XGBoost 独有)

XGBoost 的核心创新——在损失函数外显式加入正则项:

Obj(Θ)=i=1N(yi,y^i)+m=1MΩ(fm)

其中单棵树的正则项为:

Ω(f)=γT+12λw2+αw1
  • T:叶子节点数,γgamma)控制分裂的"代价"——分裂增益必须超过 γ 才执行
  • w:叶子权重的向量,λreg_lambda=1.0)做 L2 收缩,αreg_alpha=0.0)做 L1 稀疏

理解重点

  • GBDT(sklearn)的"正则化"主要是学习率收缩——XGBoost 在此基础上加入显式的 L1/L2 惩罚项。
  • gamma=0.0 表示当前源码不要求分裂有最低增益——调大 gamma 是防止过拟合的有效手段。
  • reg_lambda=1.0(L2 默认开启)是 XGBoost 泛化性能好的重要原因——它对叶子权重做持续的收缩约束。

2. 二阶泰勒展开(XGBoost 独有)

在第 m 轮,XGBoost 对损失函数做二阶泰勒展开:

Obj(m)i=1N[(yi,y^i(m1))+gifm(xi)+12hifm2(xi)]+Ω(fm)

其中:

gi=(yi,y^i)y^i|y^=y^(m1),hi=2(yi,y^i)y^i2|y^=y^(m1)

回归(MSE)下的 gihi

对于当前回归任务,=12(yiy^i)2

gi=y^iyi,hi=1

理解重点

  • 二阶泰勒展开是 XGBoost 最核心的数学创新——Hessian hi 提供了损失函数曲率信息,使目标函数近似比 GBDT 的一阶近似更精确。
  • 在 MSE 回归下,hi=1(常数),二阶信息退化——但 XGBoost 的框架对任意可微损失函数都适用。
  • 对于分类(对数损失),hi=pi(1pi)——此时二阶信息提供了预测不确定性的加权。

3. 叶子权重的闭式解

将目标函数按叶子重组,对第 j 个叶子:

Objleaf(m)=iIj(giwj+12hiwj2)+12λwj2+α|wj|

L1 正则化 α=0.0 时(当前源码),对 wj 求导为零得最优权重:

wj=iIjgiiIjhi+λ

代入得最优叶子对应的目标函数值:

Obj=12j=1T(iIjgi)2iIjhi+λ+γT

理解重点

  • 叶子权重的闭式解存在,是因为 XGBoost 的二次近似目标函数——GBDT(sklearn)没有这样的闭式解。
  • reg_lambda=1.0 在分母中——它抑制大权重,防止单片叶子主导预测。
  • 在 MSE 回归中,wj=gi|Ij|+λ——即该叶子内残差均值的 L2 压缩版。

4. 分裂增益公式

给定一个叶子节点,将其分裂为左右子节点 LR,分裂增益为:

Gain=12[GL2HL+λ+GR2HR+λ(GL+GR)2HL+HR+λ]γ

其中 G=iIgiH=iIhi

Gain>0 时执行分裂;gamma 增大要求更高的最小增益——做预剪枝。

理解重点

  • 分裂增益公式使 XGBoost 能精确评估每次候选分裂的效果——最大化增益等价于最小化目标函数。
  • γ=0.0(当前源码)意味着只要增益为正就分裂——这是最小限制。
  • 这个公式也是特征重要性的计算基础——特征在所有分裂中的增益累加。

5. 加权分位数草图

XGBoost 寻找候选分裂点时,不用简单的等频分桶(直方图),而是用二阶梯度加权分位数:

hi 加权排序后取分位数——样本的 Hessian 越大,在分位数计算中的权重越大。

理解重点

  • hi 反映了样本对损失函数的"重要性"——Hessian 大的样本,损失在该点变化剧烈,分裂点应该更精确地考虑它们。
  • 在 MSE 回归中 hi=1,加权分位数退化为等频分位数——此时近似分裂点搜索与直方图分桶等价。
  • 在分类场景下,hi=pi(1pi)——接近决策边界(p0.5)的样本有更大权重。

6. 数学原理如何映射到当前源码

数学概念数学符号/公式代码实现
加法模型y^i(M)=m=1Mfm(xi)XGBRegressor(n_estimators=300, learning_rate=0.05)
正则化目标Obj=+Ω(f)reg_lambda=1.0, reg_alpha=0.0, gamma=0.0
梯度(MSE)gi=y^iyi内部自动计算
Hessian(MSE)hi=1内部自动计算
叶子权重闭式解wj=GjHj+λ内部自动计算
分裂增益Gain=12[GL2HL+λ+GR2HR+λ(GL+GR)2HL+HR+λ]γ内部自动计算
行采样随机子集subsample=0.9
列采样随机特征子集colsample_bytree=0.9
最小叶子权重和iIjhi min_child_weightmin_child_weight=1
学习率收缩ηfmlearning_rate=0.05
列块并行预排序后按列分块n_jobs=-1

7. XGBoost vs GBDT vs LightGBM 数学对比

维度GBDT (sklearn)LightGBMXGBoost
目标函数近似一阶(仅梯度)一阶(仅梯度)二阶(梯度 + Hessian)
正则化学习率收缩学习率收缩学习率 + L1 + L2 + gamma 剪枝
叶子权重逐点线搜索逐点线搜索闭式解(二次近似)
分裂点搜索预排序 → 逐一计算直方图分桶加权分位数草图
缺失值不支持不支持稀疏感知——自动学习最优方向
并行直方图构建级列块级
树生长Level-wiseLeaf-wiseLevel-wise(近似)

常见坑

  1. 在 MSE 回归场景下,hi=1 是常数——XGBoost 的二阶展开近似退化为与牛顿法而非梯度下降对应的形式,理解这一点很重要。
  2. 忽略 reg_lambda=1.0 的默认值——XGBoost 默认 L2 正则化已开启,与 GBDT/LightGBM 的默认行为不同。
  3. 混淆 min_child_weight=1min_samples_leaf——前者是 Hessian 和的最小值(MSE 下等价于叶子最小样本数),非样本计数。
  4. 认为 gammareg_lambda 功能重叠——gamma 做分裂级剪枝(分裂是否值得),reg_lambda 做权重级收缩(叶子值是否过大)。

小结

  • XGBoost 的数学核心链:加法模型 → 二阶泰勒展开(gi+12hif2)→ 正则化目标(+γT+12λw2+αw1)→ 叶子权重闭式解 wj=GjHj+λ → 分裂增益公式 → 精确剪枝。
  • 与 GBDT/LightGBM 的最关键区别:二阶展开 + 显式正则化项——前者提供更精确的目标近似,后者提供更强的过拟合控制。
  • 当前源码 XGBRegressor(n_estimators=300, max_depth=6, reg_lambda=1.0, reg_alpha=0.0, gamma=0.0) 是回归任务的经典配置——L2 默认开启、无 L1 稀疏、无最低分裂增益。