XGBoost算法的原理与构建过程
题目描述
XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升框架的机器学习算法,通过迭代地构建多棵决策树(弱学习器)来优化预测效果。其核心创新包括正则化目标函数、二阶泰勒展开近似损失函数、以及高效的贪心建树策略。要求详细解释XGBoost的目标函数设计、树构建过程(包括分裂点选择)、以及防止过拟合的策略。
解题过程
- 目标函数设计
- 假设有数据集 \(D = \{(x_i, y_i)\}\)(共 \(n\) 个样本),XGBoost通过加法模型组合 \(K\) 棵决策树:
\[ \hat{y}_i = \sum_{k=1}^K f_k(x_i), \quad f_k \in \mathcal{F} \]
其中 $ f_k $ 表示第 $ k $ 棵树,$ \mathcal{F} $ 为所有可能的树结构空间。
- 目标函数包含损失函数 \(L\)(如均方误差、交叉熵)和正则化项 \(\Omega\)(控制模型复杂度):
\[ \text{Obj} = \sum_{i=1}^n L(y_i, \hat{y}_i) + \sum_{k=1}^K \Omega(f_k) \]
正则化项定义为 $ \Omega(f) = \gamma T + \frac{1}{2} \lambda \|w\|^2 $,其中 $ T $ 为树叶节点数,$ w $ 为叶节点权重,$ \gamma $ 和 $ \lambda $ 为超参数。
- 加法训练与泰勒展开
- 采用前向分步算法:第 \(t\) 次迭代时,添加新树 \(f_t\) 来优化当前模型 \(\hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i)\)。
- 目标函数按泰勒二阶展开近似(令 \(g_i = \partial_{\hat{y}^{(t-1)}} L(y_i, \hat{y}^{(t-1)})\), \(h_i = \partial_{\hat{y}^{(t-1)}}^2 L(y_i, \hat{y}^{(t-1)})\)):
\[ \text{Obj}^{(t)} \approx \sum_{i=1}^n \left[ L(y_i, \hat{y}_i^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) \right] + \Omega(f_t) + \text{常数} \]
移除常数项后,优化目标简化为:
\[ \tilde{\text{Obj}}^{(t)} = \sum_{i=1}^n \left[ g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) \right] + \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T w_j^2 \]
- 叶节点权重求解
- 定义叶节点 \(j\) 的样本集合为 \(I_j = \{ i \mid x_i \in \text{叶节点} j \}\),将目标函数按叶节点重组:
\[ \tilde{\text{Obj}}^{(t)} = \sum_{j=1}^T \left[ \left( \sum_{i \in I_j} g_i \right) w_j + \frac{1}{2} \left( \sum_{i \in I_j} h_i + \lambda \right) w_j^2 \right] + \gamma T \]
- 对 \(w_j\) 求导并令导数为零,得到最优叶节点权重:
\[ w_j^* = -\frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda} \]
代入目标函数,得到最小损失值:
\[ \tilde{\text{Obj}}^{(t)} = -\frac{1}{2} \sum_{j=1}^T \frac{(\sum_{i \in I_j} g_i)^2}{\sum_{i \in I_j} h_i + \lambda} + \gamma T \]
- 贪心建树策略
- 从根节点开始,递归选择最佳分裂点。对于每个特征,先按特征值排序,然后枚举可能的分裂点。
- 分裂后,目标函数的减少量(增益)为:
\[ \text{Gain} = \frac{1}{2} \left[ \frac{(\sum_{i \in I_L} g_i)^2}{\sum_{i \in I_L} h_i + \lambda} + \frac{(\sum_{i \in I_R} g_i)^2}{\sum_{i \in I_R} h_i + \lambda} - \frac{(\sum_{i \in I} g_i)^2}{\sum_{i \in I} h_i + \lambda} \right] - \gamma \]
其中 $ I_L $ 和 $ I_R $ 为分裂后的左右节点样本集,$ I $ 为分裂前节点样本集。仅当增益大于零时才分裂。
- 过拟合控制与优化技巧
- 正则化:通过 \(\gamma\) 和 \(\lambda\) 惩罚复杂树结构。
- 收缩率(Shrinkage):每棵树权重乘以学习率 \(\eta\)(如 0.1),减缓学习过程。
- 列抽样:训练时随机选择部分特征,减少方差。
- 近似分裂算法:针对大数据集,通过分位数缩略图近似枚举分裂点,提升效率。
总结
XGBoost通过二阶泰勒展开精确近似损失函数,结合正则化项与贪心建树策略,实现了高效且强泛化能力的梯度提升。其设计兼顾精度与速度,成为结构化数据建模的标杆算法。