一、现象
在工作中,在机器学习中,GBDT、LightGBM 跟 XGBoost是比较重要的知识点,所以整理一下
二、解决方案
GBDT(Gradient Boosting Decision Trees)、XGBoost 和 LightGBM 都是基于梯度提升的集成学习算法,用于构建决策树序列,每棵树都尝试修正前一棵树的错误。下面是这三种算法的主要区别:
-
GBDT:
- 是一种经典的梯度提升算法,通过逐步添加决策树来减少残差。
- 通常使用CART(分类和回归树)作为基学习器。
- 在每一层增长新的决策树时,可能会考虑所有可能的分裂来找到最佳分裂点,这在数据量大时会导致计算效率较低 。
- GBDT在优化的时候只用到一阶导数信息,XGBoost则对损失函数进行了二阶泰勒展开,得到一阶和二阶导数
-
XGBoost(eXtreme Gradient Boosting):
- 是GBDT的一个优化实现,引入了正则化项来控制模型复杂度,有助于防止过拟合。
- xgboost采用的是level-wise的分裂策略,对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了不必要的开销
- 支持缺失值处理,并且可以指定稀疏数据的特征。
- 支持并行处理,拥有高效的计算性能。
- 使用了近似算法和缓存优化,提高了计算效率 。
-
LightGBM:
- 基于梯度提升框架,使用基于直方图的决策树算法,显著提升了训练速度和降低了内存占用。
- 采用叶子生长策略(leaf-wise growth),每次选择分裂增益最大的叶子节点进行分裂。
- 支持类别特征和高维数据的处理。
- 支持特征并行和数据并行,适合分布式计算 。
区别:
- 训练速度:LightGBM 通常比 XGBoost 和 GBDT 快,尤其是在大数据集上。
- 内存使用:LightGBM 通常比 XGBoost 和 GBDT 使用更少的内存。
- 处理大数据集:LightGBM 和 XGBoost 都非常适合处理大规模数据集,但LightGBM可能在速度上有优势。
- 类别特征处理:XGBoost 和 LightGBM 都支持类别特征,但 LightGBM 的处理可能更高效。
- 防止过拟合:XGBoost 通过正则化项更好地防止过拟合,而 LightGBM 通过调整参数如最大深度和最小数据分裂来控制。
总的来说,XGBoost 是一个非常强大的梯度提升库,适用于各种规模的数据集,而 LightGBM 在处理大数据集时表现更好,速度更快,内存使用更少。GBDT 作为基础算法,提供了算法的原型,但在实际应用中可能会因为效率问题而选择其优化版本 XGBoost 或 LightGBM。