XGBoost算法的数学推导与二阶泰勒展开优化过程
字数 2255 2025-11-11 05:40:09

XGBoost算法的数学推导与二阶泰勒展开优化过程

题目描述
XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升决策树的集成学习算法,通过二阶泰勒展开优化损失函数,并引入正则化项控制模型复杂度。本题要求详细解释其数学推导过程,包括目标函数的构建、泰勒展开的应用、最优权重的计算以及分裂节点的评估方法。

解题过程

  1. 目标函数的定义
    • 假设有 \(n\) 个样本和 \(K\) 棵树,模型的预测值为所有树的输出之和:

\[ \hat{y}_i = \sum_{k=1}^K f_k(x_i), \quad f_k \in \mathcal{F} \]

 其中 $ f_k $ 是第 $ k $ 棵树,$ \mathcal{F} $ 为所有可能的决策树空间。  
  • 目标函数包括损失函数和正则化项:

\[ \text{Obj} = \sum_{i=1}^n L(y_i, \hat{y}_i) + \sum_{k=1}^K \Omega(f_k) \]

 正则化项 $ \Omega(f_k) = \gamma T + \frac{1}{2} \lambda \|w\|^2 $,$ T $ 为叶子节点数,$ w $ 为叶子权重。  
  1. 加法训练与泰勒展开
    • 采用前向分步算法,第 \(t\) 次迭代时,模型预测为:

\[ \hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i) \]

  • 目标函数重写为:

\[ \text{Obj}^{(t)} = \sum_{i=1}^n L\left(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)\right) + \Omega(f_t) \]

  • 对损失函数进行二阶泰勒展开(以 \(\hat{y}_i^{(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) \]

 其中 $ 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)}) $ 分别为一阶和二阶梯度。  
  1. 叶子权重的优化
    • 定义叶子节点集合 \(I_j = \{ i \mid x_i \in \text{叶子} j \}\),每个叶子节点赋予权重 \(w_j\)。目标函数简化为:

\[ \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} \]

  • 代入目标函数,得到最小损失值:

\[ \text{Obj}^* = -\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 \]

  1. 分裂节点的评估
    • 枚举所有可能的分裂方案,计算分裂后的损失减少量(增益):

\[ \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 $ 为分裂后的左右节点样本集合。  
  • 选择增益最大的分裂方案,若增益为负则停止分裂(预剪枝)。
  1. 算法流程总结
    • 初始化模型预测值(如均值)。
    • 迭代训练每棵树:
      • 计算每个样本的一阶梯度 \(g_i\) 和二阶梯度 \(h_i\)
      • 根据增益公式贪婪地分裂节点,构建树结构。
      • 计算叶子权重 \(w_j^*\) 并更新模型。
    • 输出最终模型 \(\hat{y}_i = \sum_{k=1}^K f_k(x_i)\)

关键点:XGBoost通过二阶泰勒展开更精确地逼近损失函数,并利用正则化防止过拟合,同时通过加权分位数草图等技术优化计算效率。

XGBoost算法的数学推导与二阶泰勒展开优化过程 题目描述 : XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升决策树的集成学习算法,通过二阶泰勒展开优化损失函数,并引入正则化项控制模型复杂度。本题要求详细解释其数学推导过程,包括目标函数的构建、泰勒展开的应用、最优权重的计算以及分裂节点的评估方法。 解题过程 : 目标函数的定义 假设有 \( n \) 个样本和 \( K \) 棵树,模型的预测值为所有树的输出之和: \[ \hat{y} i = \sum {k=1}^K f_ k(x_ i), \quad f_ k \in \mathcal{F} \] 其中 \( f_ k \) 是第 \( k \) 棵树,\( \mathcal{F} \) 为所有可能的决策树空间。 目标函数包括损失函数和正则化项: \[ \text{Obj} = \sum_ {i=1}^n L(y_ i, \hat{y} i) + \sum {k=1}^K \Omega(f_ k) \] 正则化项 \( \Omega(f_ k) = \gamma T + \frac{1}{2} \lambda \|w\|^2 \),\( T \) 为叶子节点数,\( w \) 为叶子权重。 加法训练与泰勒展开 采用前向分步算法,第 \( t \) 次迭代时,模型预测为: \[ \hat{y}_ i^{(t)} = \hat{y}_ i^{(t-1)} + f_ t(x_ i) \] 目标函数重写为: \[ \text{Obj}^{(t)} = \sum_ {i=1}^n L\left(y_ i, \hat{y}_ i^{(t-1)} + f_ t(x_ i)\right) + \Omega(f_ t) \] 对损失函数进行二阶泰勒展开(以 \( \hat{y} i^{(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) \] 其中 \( 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)}) \) 分别为一阶和二阶梯度。 叶子权重的优化 定义叶子节点集合 \( I_ j = \{ i \mid x_ i \in \text{叶子} j \} \),每个叶子节点赋予权重 \( w_ j \)。目标函数简化为: \[ \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} \] 代入目标函数,得到最小损失值: \[ \text{Obj}^* = -\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 \) 为分裂后的左右节点样本集合。 选择增益最大的分裂方案,若增益为负则停止分裂(预剪枝)。 算法流程总结 初始化模型预测值(如均值)。 迭代训练每棵树: 计算每个样本的一阶梯度 \( g_ i \) 和二阶梯度 \( h_ i \)。 根据增益公式贪婪地分裂节点,构建树结构。 计算叶子权重 \( w_ j^* \) 并更新模型。 输出最终模型 \( \hat{y} i = \sum {k=1}^K f_ k(x_ i) \)。 关键点 :XGBoost通过二阶泰勒展开更精确地逼近损失函数,并利用正则化防止过拟合,同时通过加权分位数草图等技术优化计算效率。