【XGBoost与GBDT的异同点】

XGB与GBDT的异同

  • GBDT:梯度提升决策树(Gradient Boosting Descision Tree)是集成学习Boosting中的一种常见算法,它是在经典提升算法AdaBoost上的一种改进,引入损失函数的一阶导数进行优化,整体采用串行的方式进行提升每一棵CART树,后一棵树会重点关注前一棵树分类错误的样本(加大该样本的权重)。
  • XGBoost:极端梯度提升树(Extreme Gradient Boosting)是在GBDT上进行改进的提升算法,其中引入损失函数的一阶导数以及二阶导数进行优化,支持并行化计算,同时也支持各种自定义损失函数(只要能一阶和二阶求导即可)。

两者的区别

  1. 基础树的选择:GBDT以CART树作为基础树,而XGB既可以选取CART树作为基础树,还支持线性分类器(gblinear)等其它分类器作为基础分类器;
  2. 损失函数相关:GBDT以对数损失函数(log loss)作为目标函数,同时考虑模型的复杂度,这里主要是对树的叶子节点个数进行正则化,防止过拟合;而XGB在选取los loss的同时考虑对叶子节点个数leaf num和叶子节点上的得分leaf score进行正则化,并且在优化目标函数是引入二阶泰勒展开式,考虑一阶和二阶导数信息,而GBDT只用到了一阶导数信息;并且XGB可以自定义损失函数,只要该函数能一二阶可导就行;
  3. 效率方面:XGB支持并行化处理,需要注意的是,这里的并行化并不是指基础树之间的并行(不然这就不是Boosting了),而是指在特征粒度上的并行,即xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行;
  4. Shrinkage(缩减):相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率);
  5. 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是XGB异于传统GBDT的一个特性;
  6. 缺失值的处理:对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向;
  7. 可并行的近似直方图算法:树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。

以上总结来源于多篇博客文章,主要用来记录自己对这方面的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值