Category Boosting, 对GBDT的优化实现。

1. 核心思想

CatBoost的核心思想是在GBDT的基础上进行改进,主要通过以下几方面的优化:

  1. 类别特征的高效处理:CatBoost可以直接处理类别特征,不需要进行独热编码(One-Hot Encoding),通过统计信息和基于目标值的编码技术减少了过拟合和信息泄漏的风险。使用Ordered Target Encoding。具体来说,假设我们正在处理一个样本 \(i\),并希望对其类别特征 \(A\) 进行目标编码。CatBoost 计算的编码是基于样本 \(i\) 之前的样本的目标变量:

\[ \text{Encoded}(A_i) = \frac{\sum_{j=1}^{i-1} y_j | A_j = A_i}{\text{count}(A_j = A_i, j < i)} \]

  1. 避免梯度偏差:在传统GBDT中,梯度计算可能带有偏差,而CatBoost通过引入基于排序的梯度提升方法来减少这种偏差,提升模型的泛化能力。

  2. 对称树结构:CatBoost构建对称的决策树,这意味着每个树的左右分支在相同的深度上分裂相同的特征。这种结构可以提升预测速度,并使得模型对数据顺序不敏感。

  3. 顺序提升算法:CatBoost在训练时使用顺序提升方法,通过逐步引入数据点来减少目标编码和梯度提升中的信息泄漏。

2. 算法步骤

CatBoost的算法步骤与传统的GBDT相似,但增加了对类别特征和数据顺序的特殊处理:

  1. 初始化模型:选择初始预测值(通常是常数,如目标的均值)。

  2. 类别特征编码:对类别特征进行统计编码,使用平均目标值或基于排序的编码方法处理类别特征,确保没有信息泄漏。

  3. 构建对称树:基于顺序提升法和对称树结构构建决策树。在每次构建树时,CatBoost选择具有最大分裂增益的特征进行分裂。

  4. 计算梯度和更新模型:根据当前模型的预测误差,计算梯度并更新模型参数,构建新的树。

  5. 重复迭代:重复上述步骤,直到达到预设的树数或误差收敛。

3. 损失函数

CatBoost与GBDT类似,使用的损失函数取决于任务类型:

  • 回归任务:常用均方误差(MSE)或绝对误差(MAE)作为损失函数。

\[ L(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \]

  • 分类任务:常用交叉熵损失函数(Logloss)来衡量模型预测的概率分布与真实标签之间的差异。

\[ L(y, \hat{y}) = -\sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] \]

CatBoost的损失函数可以通过参数调整适用于不同的任务,如二分类、多分类、回归等。

4. 优势

CatBoost相较于其他GBDT实现有以下优势:

  1. 直接处理类别特征:无需进行独热编码,减少了内存占用和计算复杂度,同时通过顺序编码技术避免了信息泄漏。

  2. 减少梯度偏差:使用基于排序的梯度提升方法,减少了梯度估计中的偏差,提高了模型的泛化能力。

  3. 高效训练与预测:由于采用了对称树结构,CatBoost在训练和预测过程中都具有较高的速度,尤其在预测阶段,能够显著降低推理时间。

  4. 对数据顺序不敏感:CatBoost采用顺序提升法,减少了训练数据的顺序对模型性能的影响,适合处理时序数据或随机排序的数据。

  5. 支持GPU加速:CatBoost原生支持GPU加速,能够显著加快大规模数据集的训练速度。

5. 缺点

  • 对于类别特征的处理需要大量的内存和时间。
  • 不同随机数的设定对于模型预测结果有一定的影响。

参考资料:

https://cloud.tencent.com/developer/article/1546808

https://www.youtube.com/watch?v=3Bg2XRFOTzg