本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。
让我们详细解析公式 (12-5)每一部分的含义。
公式 (12-5) 的形式
L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + ∑ i = 1 t Ω ( f i ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + ∑ i = 1 t Ω ( f i ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + Constant (12-5) \begin{aligned} L^{(t)} &= \sum_{i=1}^{n} l(y_i, \hat{y}_i^{(t)}) + \sum_{i=1}^{t} \Omega(f_i) \\ &= \sum_{i=1}^{n} l\left(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)\right) + \sum_{i=1}^{t} \Omega(f_i) \\ &= \sum_{i=1}^{n} l\left(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)\right) + \Omega(f_t) + \text{Constant} \tag{12-5} \end{aligned} L(t)=i=1∑nl(yi,y^i(t))+i=1∑tΩ(fi)=i=1∑nl(yi,y^i(t−1)+ft(xi))+i=1∑tΩ(fi)=i=1∑nl(yi,y^i(t−1)+ft(xi))+Ω(ft)+Constant(12-5)
逐步解释公式的各部分
-
目标函数 L ( t ) L^{(t)} L(t):
- L ( t ) L^{(t)} L(t) 表示在第 t t t 轮迭代时的目标函数值。
- XGBoost 通过最小化 L ( t ) L^{(t)} L(t) 来选择一个合适的树 f t f_t ft,从而在每一轮迭代中减少预测误差。
-
第一行:完整的目标函数表达式
L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + ∑ i = 1 t Ω ( f i ) L^{(t)} = \sum_{i=1}^{n} l(y_i, \hat{y}_i^{(t)}) + \sum_{i=1}^{t} \Omega(f_i) L(t)=i=1∑nl(yi,y^i(t))+i=1∑tΩ(fi)- 损失项 ∑ i = 1 n l ( y i , y ^ i ( t ) ) \sum_{i=1}^{n} l(y_i, \hat{y}_i^{(t)}) ∑i=1nl(yi,y^i(t)):表示所有样本在第 t t t 轮中的损失总和。这里, l ( y i , y ^ i ( t ) ) l(y_i, \hat{y}_i^{(t)}) l(yi,y^i(t)) 衡量了第 i i i 个样本的真实值 y i y_i yi 与模型在第 t t t 轮的预测值 y ^ i ( t ) \hat{y}_i^{(t)} y^i(t) 之间的误差。
- 正则化项 ∑ i = 1 t Ω ( f i ) \sum_{i=1}^{t} \Omega(f_i) ∑i=1tΩ(fi):表示模型在前 t t t 轮迭代中所有树的正则化总和,用于控制每棵树的复杂度,防止过拟合。
-
第二行:展开第 t t t 轮的损失函数
L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + ∑ i = 1 t Ω ( f i ) L^{(t)} = \sum_{i=1}^{n} l\left(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)\right) + \sum_{i=1}^{t} \Omega(f_i) L(t)=i=1∑nl(yi,y^i(t−1)+ft(xi))+i=1∑tΩ(fi)- 在第 t t t 轮,预测值 y ^ i ( t ) \hat{y}_i^{(t)} y^i(t) 被更新为前一轮的预测值 y ^ i ( t − 1 ) \hat{y}_i^{(t-1)} y^i(t−1) 加上当前新树的预测 f t ( x i ) f_t(x_i) ft(xi)。因此,损失函数部分可以展开为:
∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) \sum_{i=1}^{n} l\left(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)\right) i=1∑nl(yi,y^i(t−1)+ft(xi)) - 正则化部分依然是前 t t t 轮所有树的正则化项总和 ∑ i = 1 t Ω ( f i ) \sum_{i=1}^{t} \Omega(f_i) ∑i=1tΩ(fi)。
- 在第 t t t 轮,预测值 y ^ i ( t ) \hat{y}_i^{(t)} y^i(t) 被更新为前一轮的预测值 y ^ i ( t − 1 ) \hat{y}_i^{(t-1)} y^i(t−1) 加上当前新树的预测 f t ( x i ) f_t(x_i) ft(xi)。因此,损失函数部分可以展开为:
-
第三行:化简正则化项
L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + Constant L^{(t)} = \sum_{i=1}^{n} l\left(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)\right) + \Omega(f_t) + \text{Constant} L(t)=i=1∑nl(yi,y^i(t−1)+ft(xi))+Ω(ft)+Constant- 在这一行中,我们注意到第 t t t 轮的目标函数实际上是将前 t − 1 t-1 t−1 轮次的正则化项视为常数,因为它们已经是固定的,不再对当前轮次的优化产生影响。因此,我们只需要关注当前树的正则化项 Ω ( f t ) \Omega(f_t) Ω(ft)。
- 常数项 Constant \text{Constant} Constant 包括了前 t − 1 t-1 t−1 轮次的正则化项 ∑ i = 1 t − 1 Ω ( f i ) \sum_{i=1}^{t-1} \Omega(f_i) ∑i=1t−1Ω(fi),它们对当前的优化过程不起作用,可以视为常数。
公式的核心思想
公式 (12-5) 表示的是 XGBoost 的逐步优化过程。在每一轮 t t t 中,XGBoost 通过选择一个新树 f t f_t ft 来最小化当前轮次的目标函数 L ( t ) L^{(t)} L(t),包括了当前轮次的损失和正则化项。这一过程有以下核心思想:
- 最小化损失:模型在每一轮中,都尝试找到一个新的树 f t f_t ft,以最小化当前轮次的损失。这使得模型在每一轮都能进一步减少预测误差,逐步逼近真实目标值。
- 控制复杂度:正则化项 Ω ( f t ) \Omega(f_t) Ω(ft) 限制了新树 f t f_t ft 的复杂度,防止模型过拟合。这一正则化项通常包含了树的叶子节点数和叶子节点权重的正则化(L1 或 L2 正则化),从而有效控制树的复杂度。
总结
公式 (12-5) 是 XGBoost 中每一轮迭代的目标函数,它包含了当前轮次的损失和新树的正则化项。通过最小化这个目标函数,XGBoost 能够在保证模型准确性的同时控制模型的复杂度,达到平衡的效果。这一公式为 XGBoost 的优化提供了基础,使得模型能够有效地提高预测精度并具备良好的泛化能力。