xgb与gbdt的区别,与xgboost相比,gbdt的优点

一、Boosting算法

首先这三种算法都属于Boosting方法,且GBDT是机器学习算法,XGBoost和LightGBM是GBDT的算法实现。

Boosting方法训练基分类器时采用串行的方式,各个基分类器之间
有依赖。其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。这个过程是在不断地减小损失函数,使得模型偏差不断降低。但Boosting的过程并不会显著降低方差。这是因为Boosting的训练过程使得各弱分类器之间是强相关的,缺乏独立性,所以并不会对降低方差有作用。

二、XGBoost和GBDT的算法比较

1)GBDT是机器学习算法,XGBoost是该算法的工程实现。
2)在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
3)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶落后的大白展开,可以同时使用一阶和二阶导数。
4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
5)传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
6)传统的GBDT没有设计对缺失值进行处理,XGBoost可以自动学习出它的分裂方向。XGBoost对于确实值能预先学习一个默认的分裂方向。
7)Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得积极的大船点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)

三、LightGBM和XGBoost的算法比较

LightGBM是XGBoost的改进版,相比于前者,它添加了很多新的方法来改进模型,包括:并行方案、基于梯度的单边检测、排他性特征捆绑等。

1)XGBoost使用基于预排序的决策树算法,每遍历一个特征就需要计算一次特征的增益,时间复杂度为O(datafeature)。
而LightGBM使用基于直方图的决策树算法,直方图的优化算法只需要计算K次,时间复杂度为O(Kfeature)
2)XGBoost使用按层生长(level-wise)的决策树生长策略,LightGBM则采用带有深度限制的按叶子节点(leaf-wise)算法。在分裂次数相同的情况下,leaf-wise可以降低更多的误差,得到更好的精度。leaf-wise的缺点在于会产生较深的决策树,产生过拟合。
3)支持类别特征,不需要进行独热编码处理
4)优化了特征并行和数据并行算法,除此之外还添加了投票并行方案
5)采用基于梯度的单边采样来保持数据分布,减少模型因数据分布发生变化而造成的模型精度下降
6)特征捆绑转化为图着色问题,减少特征数量

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注