不同的GBDT有什么不一样?
Catboost, LGBM 和 XGBoost 谁是最佳算法?
前言
本文属于参考搬运内容感谢:Kay Jan Wong 撰写的内容,博主对其经行一定程度的补充修改。
CatBoost(分类提升算法)、LightGBM(轻量级梯度提升机)和 XGBoost(极限梯度提升)都是梯度提升算法。在探讨它们在特性和性能上的相似性和差异之前,我们需要了解集成学习的概念,以及它与梯度提升的关系。
集成学习
集成学习是一种通过结合多个模型的预测来获得更加稳定且泛化能力更强预测结果的技术。这种方法通过平均各个模型的错误来降低过拟合的风险,同时保持较强的预测性能。
- 在回归问题中,整体预测通常是各个树预测值的平均值。
- 在分类问题中,整体预测基于加权投票,概率值在所有树中平均,概率最高的类别为最终预测类别。
集成学习方法主要分为两类:Bagging(装袋法) 和 Boosting(提升法),但机器学习算法也可能是这两种方法的结合。
- Bagging 方法在使用随机数据子集(有放回抽样)时,构建多个并行模型并聚合所有模型的预测结果。
- Boosting 方法则使用整个数据集按序列方式构建模型,每个模型旨在改进前一个模型的误差。
CatBoost、LightGBM 和 XGBoost 都是梯度提升算法的变体。理解了 Bagging 和 Boosting 的区别后,我们可以进一步探讨这些算法在实现梯度提升方面的差异。
CatBoost vs. LightGBM vs. XGBoost 特性
以下表格总结了三种算法的差异,并将对这些特性进行详细说明。

树结构对称性
在 CatBoost 中,对称树或平衡树指的是同一深度的所有节点具有一致的分裂条件。而 LightGBM 和 XGBoost 则生成非对称树,即同一深度的各节点可以有不同的分裂条件。
对称树要求分裂条件使同一深度的所有节点的损失值最低。平衡树结构的优点包括更快的计算速度和评估性能,以及更好地控制过拟合。
尽管 LightGBM 和 XGBoost 都是非对称树,但它们的树增长方式不同:

非对称树的作用方式与原理
在决策树中,“非对称树”是指每层树的分裂结构可以不同,即每个节点根据不同的特征或条件进行分裂。这与“对称树”形成对比,后者要求同一层的所有节点按照相同的分裂条件进行分裂。
非对称树的工作原理:
- 自适应分裂: 非对称树在每次分裂时,都会根据当前节点的具体数据特点选择最佳的分裂条件。
- 不平衡深度: 某些分支可能比其他分支更深,因为这些分支可能需要更多分裂来更精确地表示复杂模式。
- 灵活性: 非对称树能更高效地适配数据分布的不均衡性。例如,如果某些类别或区域的数据更加复杂,需要更深的树结构来拟合,这种方式可以灵活调整,而不需要强制让所有分支都一样深。
优点:
- 非对称树能更精确地捕获复杂的数据模式,尤其是在数据分布不均衡的情况下。
- 节约计算资源,因为只在必要的分支扩展深度,而不是强制性地扩展所有分支。
缺点:
- 如果过度生长,可能导致过拟合(即模型太复杂,失去了泛化能力)。
- 需要更复杂的控制参数来防止树过深或过于复杂。
增长方式
- LightGBM 采用按叶子增长的方法,选择性地扩展树,从而生成较小且更快的模型。
- XGBoost 采用按层增长的方法,逐层扩展树。

Depth-wise 和 Leaf-wise 的树增长方式
Depth-wise(按层增长):
- 定义: Depth-wise 是指按照深度依次扩展整棵树的一层。
原理:
- 首先构建根节点,然后扩展深度为1的所有节点。
- 接着同时扩展深度为2的所有节点,依次类推。
- 每个节点的分裂基于信息增益或损失降低的标准。
Leaf-wise(按叶子增长):
- 定义: Leaf-wise 是指每次扩展当前损失最大的叶子节点,而不是整个一层。
原理:
- 每次找到当前所有叶子节点中增益最高的那个节点,进行分裂。
- 其他叶子节点保持不变。
- 继续重复这个过程,直到达到设定的叶子节点最大数量(
num_leaves参数)或其他停止条件。
对比表格:
| 特性 | Depth-wise | Leaf-wise |
|---|---|---|
| 生长方式 | 按整层扩展 | 按叶子选择最优分裂 |
| 灵活性 | 固定规则,结构对称 | 灵活,不对称 |
| 效率 | 通常比 Leaf-wise 慢 | 通常更快,尤其是大数据集 |
| 模型复杂性 | 更简单,易于控制 | 更复杂,容易过拟合 |
| 正则化需求 | 较少的正则化需求 | 需要更强的正则化手段 |
| 典型应用 | XGBoost | LightGBM |
分裂方法
分裂方法指的是如何确定分裂条件。
- CatBoost:采用贪婪方法,为叶子节点分配特征-分裂对的候选列表,并选择惩罚值最小的分裂。
- LightGBM:使用**基于梯度的单侧采样(GOSS)**方法,保留具有大梯度的所有数据实例,并对小梯度的数据实例随机采样。梯度指的是损失函数切线的斜率,梯度大的数据点误差较大,对寻找最优分裂点更为重要;梯度小的数据点误差较小,对保持模型精度也很重要。这种采样技术减少了训练数据实例数量,因此提高了训练速度。
- XGBoost:提供两种算法:
提升类型:
训练数据的选择方式也存在差异:
- CatBoost:采用有序提升,即每个模型使用部分数据进行训练,并用另一部分数据进行评估,从而提高对未见数据的鲁棒性。
- LightGBM 和 XGBoost:采用传统的梯度提升方式。
对类别型特征的支持:
不同算法对类别型特征的处理参数如下:
- CatBoost:
cat_features,one_hot_max_size
- LightGBM:
categorical_feature
- XGBoost:不支持直接处理类别特征
提升准确性、速度和控制过拟合
在集成学习中,通过不同模型预测结果的平均可以帮助缓解过拟合。然而,和其他基于树的算法一样,仍然可能发生过拟合。应对过拟合的方法包括将数据集划分为训练集、验证集和测试集,启用交叉验证、早停或树修剪功能。为了比较不同的算法,我们主要关注通过模型参数来控制过拟合的方法。
需要注意的是,为了控制模型的复杂性:
- XGBoost 使用参数
max_depth,因为它是按层增长的。
- LightGBM 使用参数
num_leaves,因为它是按叶子增长的。
表格 2:用于提升准确性、速度和控制过拟合的参数 —— 作者提供的图像

性能比较
针对不同数据集,有许多关于准确性和速度的基准测试。仅仅基于少量数据集来概括算法的性能可能过于草率,尤其是在没有充分考虑过拟合以及数值/类别型变量的情况下。
然而,总体来说,从相关文献可以看出:
- XGBoost 和 LightGBM 在性能上通常相近。
- CatBoost 和 LightGBM 的训练速度通常比 XGBoost 快,特别是在处理大型数据集时。
希望通过这篇文章,您对这三种最流行的机器学习提升算法(CatBoost、LightGBM 和 XGBoost)有了更深入的理解。它们主要在结构上有所不同。在实践中,数据科学家通常会针对具体数据尝试不同类型的机器学习算法——所以,不要轻易排除任何一种算法!
除了理解性、性能和训练时间等因素外,选择算法时还需要通过超参数调优进一步优化模型,并通过管道架构或超参数来控制过拟合。
相关文献
CatBoost
- Documentation: https://catboost.ai/en/docs/
- Official GitHub: https://github.com/catboost/catboost
- Paper: http://learningsys.org/nips17/assets/papers/paper_11.pdf
LightGBM
- Documentation: https://lightgbm.readthedocs.io/
- Official GitHub: https://github.com/microsoft/LightGBM
- Paper: https://proceedings.neurips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf
XGBoost
- Documentation: https://xgboost.readthedocs.io/
- Official GitHub: https://github.com/dmlc/xgboost
- Paper: https://arxiv.org/pdf/1603.02754.pdf