GBDT

GBDT是集成学习的一种方式,它使用决策树作为基分类器,通过线性加和的模式将各个及分类器组合起来,形成一个比较强的分类模型。

XGBoost

XGBoost在精度和性能方便都对GBDT做了改进。

  1. XGBoost将损失函数通过泰勒展开式展开,从而引入了二阶函数信息,能够加快模型的收敛,提高模型的精度。
  2. 在损失函数中加入了正则化,从而控制了模型的复杂度,减轻模型过拟合的风险。正则项中考虑到了树的叶子结点数量和叶子结点值的平方和,叶子结点的数量同时也限制了树的高度。引入正则项后,能够提高模型的泛化能力。
  3. XGBoost支持并行训练。需要注意的是,这里的并行并不是树层次的并行,因为提升算法本身来讲就是个串行结构,所以在树层次是无法做到并行的。这里的并行是指特征粒度的并行,在树节点分裂的过程中,需要针对多个特征进行验证,并选择信息增益最大的特征和分裂点进行分裂,所以并行是在这个方面上进行的。

LightGBM

GBDT和XGBoost在训练过程中每次迭代树模型时,都会多次遍历整个数据集,这个操作比较耗时,同时如果将数据集全部放入内存,又会占用过多的内存资源,特别是工业界的训练数据量。
所以基于以上的考虑,微软提出了LightGBM算法,算法原理方面和GBDT和XGBoost是一致的,都是对负梯度方向残差的拟合。

树的生长方式

XGBoost中树的生长采用了level-wise的方式,然而LightGBM使用的是带有深度 限制的leaf-wise的方式。

level-wise在分裂节点过程中,会一层一层的分裂叶子节点,同层的叶子节点不加区分地对待,所以某些叶子节点有可能对其分裂增益并不大,从而造成了一些资源和性能浪费。
leaf-wise在分裂节点过程中,会有有限选择增益比较大的叶子节点对其进行分裂,所以leaf-wise相比level-wise会有更高的精度。但同时相对level-wise,其过拟合风险也会更高,所以需要用树的深度加以限制。

分裂节点算法

XGBoost采用了pre-sort预排序算法,LightGBM采用了histogram直方图算法。

pre-sort算法会将每个特征的所有数值进行排序,然后对每个分裂点计算信息增益,最终找到信息增益最大的特征和对应的分裂点,进行分裂该叶子节点。
虽然这种做法能够获得比较精确的分裂点,但是,需要保存排序好的每个特征的数据,所以内存占用是原始数据的两倍。并且在计算时需要对每个分裂点计算信息增益,所以计算量也比较大。

histogram算法会将每个特征进行量化,使得连续相近的值落入不同的桶中,在分裂节点的时候,我们只需要针对每个桶中的离散值作为分裂节点计算信息增益,然后选择信息增益最大的特征和分裂点,进行分裂该叶子节点。
histogram算法只需要保存每个特征的离散值,不需要保存pre-sort的预排序结果,所以内存使用会减少很多。另一方面,其每个分裂点的选择从pre-sort的全体特征数据减少为桶的数量,因为桶的数量会远远少于特征数量,所以会大幅提升训练效率。最后使用桶量化的概念相当于正则化,所以会有更高的泛化准确率。
然后再说不足,histogram算法进行了数据量化,所以在每次分裂时,无法保证获取最准确的特征和相应分裂点。如果桶的数量比较少,有可能会造成欠拟合。


另外使用histogram算法,在对一个叶子节点统计完直方图后,可以父节点的直方图和该叶子节点直方图做差,获得兄弟节点的直方图。

GBDT,XGBoost和LightBoost对比相关推荐

  1. 机器学习时代的三大神器:GBDT,XGBOOST和LightGBM

    来源:https://blog.csdn.net/bbbeoy/article/details/79590981 本文主要简要的比较了常用的boosting算法的一些区别,从AdaBoost到Ligh ...

  2. 机器学习实战:GBDT Xgboost LightGBM对比

    Mnist数据集识别 使用Sklearn的GBDT GradientBoostingClassifier GradientBoostingRegressor import gzip import pi ...

  3. GBDT、Xgboost、LightGBM对比,异同点,并行策略

    阐述GBDT.xgboost.lightGBM的异同,xgb的优势,lgb的优势,二者的并行如何实现. 1 XGBoost 与 GBDT 异同 传统 GBDT 以 CART 作为基分类器,XGboos ...

  4. 【算法】GBDT XGBoost

    一.GBDT GDBT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终结果.它在被提出之初就和SVM一起被认 ...

  5. gbdt xgboost 贼难理解!

    https://www.zybuluo.com/yxd/note/611571 https://zhuanlan.zhihu.com/p/29765582 gbdt 在看统计学习方法的时候 理解很吃力 ...

  6. 【基础算法】 GBDT/XGBoost 常见问题

    原文作者:Jack Stack 原文:https://zhuanlan.zhihu.com/p/81368182 在非深度学习的机器学习模型中,基于GBDT算法的XGBoost.lightgbm等有着 ...

  7. GBDT/xgboost总结

    bagging和boosting bagging和boosting是模型集成的两种方式,可以将很多弱分类器融合成一个强分类器 bagging:采用有放回的均匀采样,基分类器之间不存在依赖关系,可以并行 ...

  8. GBDT+XGBoost算法详解(下):XGBoost

    4.XGBoost XGBoost,eXtreme Gradient Boosting,极端梯度提升.它用二阶泰勒展开式去近似损失函数,然后通过让损失函数最小化,来求出最优的树结构以及叶子节点的值. ...

  9. GBDT Xgboost LightGBM区别与联系

    https://www.cnblogs.com/mata123/p/7440774.html

最新文章

  1. stella forum v1.2 用例分析
  2. stl如果开o2_如何自己写一个STL(上)
  3. Oracle入门(十三C)之高级查询(下)
  4. 【WebRTC---进阶篇】(二)libevent实现高性能网络服务器
  5. 记一次 OOM 的原因和处理 出现大量 close_wait,项目无法访问 activeMq和 poi 出现的 OOM
  6. ComponentArt Web.UI控件的bug及解决办法
  7. jmeter访问网址
  8. 51单片机8位数码管时钟c语言,基于c51单片机8位数码管显示电子时钟程序
  9. kiosk 无效_开发Kiosk Web应用程序的10个技巧
  10. Lattice开发工具 diamond总结
  11. 零散专题32 生成PDF
  12. 《实践论》笔记及当下反思(一)
  13. murmurHash使用方法
  14. 怎样在shopify页面内使用GOOGLE字体
  15. 11. 合伙创业企业的股份计算解决办法
  16. python 几行代码生成动态表情包(生成gif动图)
  17. C盘各个文件夹的作用
  18. 开发者续费:没有足够信息以重设您的安全提示问题
  19. 系统清理工具的终结者——云端
  20. teleop_twist_keyboard安装

热门文章

  1. C++入门到精通(xcode IDE)
  2. RNA-seq流程学习笔记(10)-使用HTSeq-count软件对reads进行计数
  3. 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战
  4. 2019 年度个人深度总结
  5. 英语写作翻译-动词(一)
  6. [读书笔记] 图解HTTP
  7. ADI元器件封装下载及使用
  8. ElasticSearch之score打分机制原理
  9. MySQL学习:修改和删除数据表字段
  10. 为什么有些人赚钱那么容易,有些人却赚不到钱?