本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。
好的,公式(12-2)表示的是 XGBoost 在第 t t t 轮迭代中对样本 i i i 的预测值。它说明了在第 t t t 轮迭代中,模型的预测是通过累加之前所有树的输出值,再加上当前新树的输出得到的。这是 XGBoost 的梯度提升过程的核心之一。让我们一步步解析这个公式的含义和其背后的思想。
公式的结构
y ^ i ( t ) = ∑ k = 1 t − 1 f k ( x i ) + f t ( x i ) (12-2) \hat{y}_i^{(t)} = \sum_{k=1}^{t-1} f_k(x_i) + f_t(x_i) \tag{12-2} y^i(t)=k=1∑t−1fk(xi)+ft(xi)(12-2)
公式中的符号和含义
-
y ^ i ( t ) \hat{y}_i^{(t)} y^i(t):
- 表示第 t t t 轮迭代时,模型对第 i i i 个样本的预测值。
- 这是当前模型对样本 i i i 的最新预测,经过前 t t t 轮迭代的累加优化。
-
∑ k = 1 t − 1 f k ( x i ) \sum_{k=1}^{t-1} f_k(x_i) ∑k=1t−1fk(xi):
- 这是前 t − 1 t-1 t−1 轮的累加预测结果。
- 每一轮 k k k 中生成的树 f k f_k fk 都是一个弱学习器,专注于减少前几轮的预测误差。前 t − 1 t-1 t−1 轮中所有树的预测值的累加,就代表了在第 t − 1 t-1 t−1 轮迭代完成后,模型对样本 i i i 的总预测值。
- 可以把 ∑ k = 1 t − 1 f k ( x i ) \sum_{k=1}^{t-1} f_k(x_i) ∑k=1t−1fk(xi) 看作是第 t − 1 t-1 t−1 轮的预测结果,即 y ^ i ( t − 1 ) \hat{y}_i^{(t-1)} y^i(t−1)。
-
f t ( x i ) f_t(x_i) ft(xi):
- 表示第 t t t 轮新生成的树对样本 i i i 的预测值。
- 这一轮生成的新树 f t f_t ft 是基于前 t − 1 t-1 t−1 轮的残差(预测误差)训练得到的,旨在修正当前模型的预测误差,使得预测结果更接近真实目标值。
公式的意义
- 公式 y ^ i ( t ) = ∑ k = 1 t − 1 f k ( x i ) + f t ( x i ) \hat{y}_i^{(t)} = \sum_{k=1}^{t-1} f_k(x_i) + f_t(x_i) y^i(t)=∑k=1t−1fk(xi)+ft(xi) 体现了梯度提升的思想,即通过逐步迭代来优化模型的预测能力。
- 在每一轮迭代中,XGBoost 会添加一棵新的树 f t f_t ft,这棵树的目标是尽量拟合前一轮的残差。换句话说,新的树 f t f_t ft 是根据前一轮的误差训练的,目的是修正当前模型对样本 i i i 的预测,使得模型逐渐逼近真实目标值 y i y_i yi。
- 随着迭代轮数 t t t 的增加,累加的预测值会越来越接近真实的 y i y_i yi,从而提高模型的整体预测精度。
等价于递推公式
这个公式实际上与递推公式是等价的。我们可以这样写递推公式:
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)
在这里:
- y ^ i ( t − 1 ) = ∑ k = 1 t − 1 f k ( x i ) \hat{y}_i^{(t-1)} = \sum_{k=1}^{t-1} f_k(x_i) y^i(t−1)=∑k=1t−1fk(xi),表示前 t − 1 t-1 t−1 轮的累加预测结果。
- 因此, y ^ i ( t ) = ∑ k = 1 t − 1 f k ( x i ) + f t ( x i ) \hat{y}_i^{(t)} = \sum_{k=1}^{t-1} f_k(x_i) + f_t(x_i) y^i(t)=∑k=1t−1fk(xi)+ft(xi) 是一种更展开的写法。
为什么这样逐步累加是有效的
-
残差修正:
- 在每一轮中,XGBoost 都会根据之前的残差训练一棵新的树 f t f_t ft,这棵树的输出会帮助减少当前的误差,使得模型的预测越来越接近真实值。
-
逐步逼近:
- 每次添加的新树只需处理当前的剩余误差,不需要完全重新拟合整个模型。这种逐步修正的方式使得模型能够更精确地捕捉数据的细节,而不会因为一次性拟合复杂模式而导致过拟合。
-
控制复杂度:
- 这种累加结构也方便了对模型复杂度的控制。因为每次只增加一个新树,XGBoost 可以通过设置最大树数、树的深度等超参数来控制模型的复杂度,从而防止过拟合。
总结
公式(12-2)表示了 XGBoost 在第 t t t 轮迭代中的预测更新。它说明了模型的预测值是所有之前轮次的树的预测结果之和,加上当前轮次新树的输出。这种逐步累加的方式使得 XGBoost 能够有效地修正误差,逐步逼近真实目标值,从而提升模型的预测精度。