前面给大家介绍过kaggle竞赛的大杀器XGBoost算法,不记得的朋友可以回顾原文 集成学习经典算法之XGBoost。今天给大家介绍基于XGBoost算法的另外两个改进算法,LightGBM与CatBoost。下面是三种算法提出的具体时间轴。
既然是改进,说明XGBoost、LightGBM与CatBoost这三种算法的原理基本是相同的,只是在某些细节上做了改进。那接下来我们就具体看看这三种算法到底有什么不同。
一、结构差异
LightGBM在过滤数据样例寻找分隔点采用的是基于梯度的单边采样技术(GOSS)。而 XGBoost 则是通过预分类算法和直方图算法来确定最优分割。虽然我们前面说过,XGBoost算法在自动寻找分隔点时可以并行处理,处理效率极高,但是跟GOSS相比,仍然显得较慢。
为什么说GOSS方法更高效?
虽然样本权重是很好的表征样本重要性的指标,但在梯度提升算法中,由于没有天然的样本权重指标,因此我们需要换一种思路来表征样本的重要性。这个时候自然而然能想到的就是样本梯度。
因为梯度表征损失函数切线的倾斜程度,也就是说,如果在某些样本点上的梯度非常大,那么这些样本对于求解最优分割点而言就非常重要,因为算其损失更高。
而GOSS就是基于梯度的单边采样技术,它保留了所有大梯度样例,并在小梯度样例上采取随机抽样。例如,假设现有10万个数据样本,其中 1 万行数据的梯度较大,那么算法就会选择这 1万行梯度最大的样本+x% 从剩余 9 万行中随机抽取的结果。假设 x 取 5%,那么最后选取的结果就是从 10 万行中抽取的 1.45万行的数据样本确定最终的分隔点结果。
二、分类变量处理
我们知道,XGBoost算法在进行模型训练时要先对分类变量进行数值化预处理,通常是用 LabelEncoding 或 OneHotEncoding方法。但CatBoost不需要对这些分类变量进行预处理,而将这些分类变量直接喂给模型,这样可以大大提高模型的整体训练速度。
因此,我们可以简单总结得到LightGBM、CatBoost与XGBoost对比差异:
LightBoost与XGBoost
1、拥有更高的训练效率和精度;
2、防止过拟合。由于LightGBM采用的是梯度单边采样技术,因此比XGBoost拥有更高的训练效率和防止过拟合能力。
CatBoost与XGBoost
1、训练时间更短,不需要对分类变量进行预处理。
2、通过执行有序地增强操作,可以更好地处理过度拟合,尤其体现在小数据集上。
通过Fashion MNIST图像分类(分类)、预测纽约出租车的票价(回归)训练结果表明:从训练时间和结果准确度上,三者排名:LightGBM>CatBoost>XGBoost
以上就是关于LightGBM、CatBoost、XGBoost三种算法的对比介绍,如果大家对这三种boost算法有兴趣也可以研究对应的论文,感谢大家的支持!
参考
https://www.kaggle.com/lavanyashukla01/battle-of-the-boosting-algos-lgb-xgb-catboost