XGBoost系列文章(二):数学原理与推导
本文是XGBoost系列的第二篇,将深入解析其数学原理,用通俗语言+公式推导解释核心设计。内容涵盖目标函数、泰勒展开、正则化、节点分裂等关键环节,适合希望理解算法本质的读者。
1. XGBoost的目标函数由哪两部分组成?各自作用是什么?
XGBoost的目标函数是模型优化的核心,其形式为:
Obj = ∑ i = 1 n L ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k ) \text{Obj} = \sum_{i=1}^n L(y_i, \hat{y}_i) + \sum_{k=1}^K \Omega(f_k) Obj=i=1∑nL(yi,y^i)+k=1∑KΩ(fk)
-
第一部分:损失函数(Loss Function)
∑ i = 1 n L ( y i , y ^ i ) \sum_{i=1}^n L(y_i, \hat{y}_i) i=1∑nL(yi,y^i)
衡量预测值 y ^ i \hat{y}_i y^i 与真实值 y i y_i yi 的误差。例如:- 回归任务:均方误差(MSE) L = ( y i − y ^ i ) 2 L = (y_i - \hat{y}_i)^2 L=(yi−y^i)2
- 分类任务:对数损失(Logloss) L = − y i log p i − ( 1 − y i ) log ( 1 − p i ) L = -y_i \log p_i - (1-y_i)\log(1-p_i) L=−yilogpi−(1−yi)log(1−pi)
-
第二部分:正则化项(Regularization Term)
∑ k = 1 K Ω ( f k ) \sum_{k=1}^K \Omega(f_k) k=1∑KΩ(fk)
控制模型复杂度,防止过拟合。XGBoost的正则化项定义为:
Ω ( f k ) = γ T + 1 2 λ ∑ j = 1 T w j 2 + α ∑ j = 1 T ∣ w j ∣ \Omega(f_k) = \gamma T + \frac{1}{2}\lambda \sum_{j=1}^T w_j^2 + \alpha \sum_{j=1}^T |w_j| Ω(fk)=γT+21λj=1∑Twj2+αj=1∑T∣wj∣- T T T: 树的叶子节点数
- w j w_j wj: 第 j j j个叶子节点的权重
- γ \gamma γ, λ \lambda λ, α \alpha α: 超参数,惩罚复杂树结构
一句话总结:目标函数 = 让预测尽量准(损失函数) + 让模型尽量简单(正则化)。
2. 如何推导XGBoost的损失函数在泰勒二阶展开后的形式?
XGBoost采用泰勒二阶展开近似损失函数,具体推导如下:
假设在第 t t t次迭代时,模型预测值为 y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i) y^i(t)=y^i(t−1)+ft(xi),则损失函数展开为:
L ( y i , y ^ i ( t ) ) ≈ L ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) 其中: g i = ∂ L ( y i , y ^ i ( t − 1 ) ) ∂ y ^ i ( t − 1 ) ( 一阶导数 ) h i = ∂ 2 L ( y i , y ^ i ( t − 1 ) ) ∂ ( y ^ i ( t − 1 ) ) 2 ( 二阶导数 ) \begin{aligned} L(y_i, \hat{y}_i^{(t)}) &\approx L(y_i, \hat{y}_i^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) \\ \text{其中:} \quad g_i &= \frac{\partial L(y_i, \hat{y}_i^{(t-1)})}{\partial \hat{y}_i^{(t-1)}} \quad (\text{一阶导数}) \\ h_i &= \frac{\partial^2 L(y_i, \hat{y}_i^{(t-1)})}{\partial (\hat{y}_i^{(t-1)})^2} \quad (\text{二阶导数}) \end{aligned} L(yi,y^i(t))