2. XGBoost 算法原理回顾

在进入回放验证与特征筛选实践之前,必须扎实理解 XGBoost 的核心原理。本章从梯度提升树(GBDT)的通用思想出发,逐步拆解 XGBoost 的目标函数、正则化设计及其与普通 GBDT 的关键差异。

2.1 梯度提升树核心思想

梯度提升树(Gradient Boosting Decision Tree, GBDT)是一种迭代式的集成学习算法,其核心思想是:通过逐步添加决策树,每棵新树拟合前一轮预测的残差(或负梯度方向),从而不断降低整体损失。

算法流程可概括为以下步骤:

  1. 初始化:用一个常数值(如均值)作为初始预测模型 \( F_0(x) \)。
  2. 迭代训练:对于第 \( m \) 轮(\( m = 1, 2, \dots, M \)):
    • 计算当前模型 \( F_{m-1}(x) \) 对每个样本的负梯度(即伪残差):\( r_{im} = -\left[ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right]_{F=F_{m-1}} \)。
    • 用一棵回归树 \( h_m(x) \) 拟合这些伪残差 \( \{ (x_i, r_{im}) \} \)。
    • 通过线性搜索确定该树的最优权重 \( \gamma_m \)。
    • 更新模型:\( F_m(x) = F_{m-1}(x) + \nu \cdot \gamma_m h_m(x) \),其中 \( \nu \) 为学习率(收缩因子)。
  3. 输出:最终模型 \( F_M(x) \)。
关键理解:GBDT 的“梯度”并非指对模型参数求导,而是对函数空间中的预测值求导。每棵树都在修正前一轮的预测错误,方向由损失函数的负梯度给出。
梯度提升树迭代流程示意图 梯度提升树(GBDT)迭代流程 初始模型 F₀ 计算负梯度 rᵢ 拟合残差 hₘ 更新 Fₘ 迭代 M 轮,直到收敛或达到预设轮数 💡 核心要点: • 每棵新树 hₘ 的目标是拟合前一轮的负梯度(伪残差)。 • 学习率 ν 控制每棵树的贡献,防止过拟合。

2.2 XGBoost 的目标函数与正则项

XGBoost 在 GBDT 的基础上,对目标函数进行了显式改造,引入了二阶泰勒展开和正则化项,从而在优化精度和控制复杂度之间取得更好的平衡。

2.2.1 目标函数形式

在第 \( t \) 轮迭代时,XGBoost 的目标函数为:

Obj(t) = Σᵢ L(yᵢ, ŷᵢ^(t-1) + fₜ(xᵢ)) + Ω(fₜ) + constant

其中:

  • \( L \) 为损失函数(如平方损失、对数损失)。
  • \( ŷᵢ^(t-1) \) 为前 \( t-1 \) 轮的预测值。
  • \( fₜ(xᵢ) \) 为第 \( t \) 棵树的输出。
  • \( Ω(fₜ) \) 为正则化项。

2.2.2 二阶泰勒展开加速优化

XGBoost 对损失函数进行二阶泰勒展开,使得优化过程同时利用一阶梯度 \( gᵢ \) 和二阶梯度 \( hᵢ \):

Obj(t) ≈ Σᵢ [ L(yᵢ, ŷᵢ^(t-1)) + gᵢ fₜ(xᵢ) + ½ hᵢ fₜ²(xᵢ) ] + Ω(fₜ) + constant

其中:

  • \( gᵢ = ∂_{ŷ^(t-1)} L(yᵢ, ŷ^(t-1)) \) —— 一阶梯度。
  • \( hᵢ = ∂²_{ŷ^(t-1)} L(yᵢ, ŷ^(t-1)) \) —— 二阶梯度。
优势:相比普通 GBDT 仅使用一阶梯度,二阶梯度提供了损失函数的曲率信息,使得 XGBoost 的收敛速度更快、分裂点更精确。

2.2.3 正则化项设计

XGBoost 的正则化项 \( Ω(fₜ) \) 显式控制树的复杂度,定义如下:

Ω(fₜ) = γ T + ½ λ Σⱼ wⱼ² + α Σⱼ |wⱼ|

各参数含义:

参数 含义 作用
γ (gamma) 叶子节点数量惩罚系数 控制树的生长,γ 越大,叶子越少,模型越简单
λ (lambda) L2 正则化系数(权重衰减) 防止叶子权重过大,提升泛化能力
α (alpha) L1 正则化系数 产生稀疏解,部分叶子权重为 0,用于特征选择
T 树中叶子节点总数 衡量树的结构复杂度
wⱼ 第 j 个叶子节点的输出权重 叶子节点的预测值
XGBoost 目标函数与正则项结构 Obj(t) = Σᵢ [ gᵢ fₜ(xᵢ) + ½ hᵢ fₜ²(xᵢ) ] + γ T + ½ λ Σⱼ wⱼ² + α Σⱼ |wⱼ| + constant 损失函数二阶展开部分