2. XGBoost 算法原理回顾
在进入回放验证与特征筛选实践之前,必须扎实理解 XGBoost 的核心原理。本章从梯度提升树(GBDT)的通用思想出发,逐步拆解 XGBoost 的目标函数、正则化设计及其与普通 GBDT 的关键差异。
2.1 梯度提升树核心思想
梯度提升树(Gradient Boosting Decision Tree, GBDT)是一种迭代式的集成学习算法,其核心思想是:通过逐步添加决策树,每棵新树拟合前一轮预测的残差(或负梯度方向),从而不断降低整体损失。
算法流程可概括为以下步骤:
- 初始化:用一个常数值(如均值)作为初始预测模型 \( F_0(x) \)。
- 迭代训练:对于第 \( 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 \) 为学习率(收缩因子)。
- 输出:最终模型 \( F_M(x) \)。
关键理解:GBDT 的“梯度”并非指对模型参数求导,而是对函数空间中的预测值求导。每棵树都在修正前一轮的预测错误,方向由损失函数的负梯度给出。
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 个叶子节点的输出权重 | 叶子节点的预测值 |