GBDT、XGBOOST、LightGBM对比学习及调参

 



一、概述。

 因为工作原因,LightGBM  、 XGBOOST  、GBDT  是不可避免要接触的。这里仅仅记录个人的学习经验。

 总的认识: LightGBM  > XGBOOST  > GBDT (效果及易用性) 都是调参数比较麻烦。(个人感觉LightGBM和XGBOOST的默认参数已经很强大了。)

 

二、各自优缺点介绍

 

2.1 GBDT

 

              GBDT 详解 https://blog.csdn.net/qq_26598445/article/details/80853873

优点:

  • 预测精度高
  • 适合低维数据
  • 能处理非线性数据,该版本GBDT几乎可用于所有回归问题(线性/非线性),相对logistic regression仅能用于线性回归,GBDT的适用面非常广。
  • 可以灵活处理各种类型的数据,包括连续值和离散值。
  • 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
  • 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
  • 亦可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)。

缺点:

  • 并行麻烦(因为上下两棵树有联系)
  • 如果数据维度较高时会加大算法的计算复杂度
  • 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

 

 2.2 XGBoost 是对 GBDT 的实现

主要引入了 1. 不限于cart分类器 2.加入正则项 3.优化时用了二阶泰勒展开 4.优化贪心算法 5.可选特征随机抽样  6. 优化了计算过程,分布式,并行和数据压缩,。

 

优点:

相对gbdt速度快,性能好。
同样是梯度提升,同样是集成学习,那么XGBoost比GBDT要好在哪里呢?

- GBDT是以CART为基分类器,但XGBoost在此基础上还支持线性分类器,此时XGBoost相当于带L_1和L_2正则化项的Logistics回归(分类问题)或者线性回归(回归问题)
- XGBoost在目标函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数和每棵树叶子节点上面输出分数的L_2模平方。从偏差方差权衡的角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合
- 传统的GBDT在优化时只用到一阶导数,XGBoost则对目标函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。(顺便提一下,XGBoost工具支持自定义代价函数,只要函数可一阶和二阶求导)
- 树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以XGBoost采用了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点
- Shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(当然普通的GBDT实现也有学习速率)
- 特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行
- 列抽样(column subsampling):XGBoost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是XGBoost异于传统GBDT的一个特性
- 除此之外,XGBoost还考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能的提高算法效率

xgboost缺点:

调参困难,

相对lightgbm 速度慢,耗资源。

 2.3 lightgbm 

待补充     |Python3机器学习实践:集成学习之LightGBM 【本文为官方文档翻译,点击查看英文原版。】

RF、GBDT、XGBoost面试级整理

GBDT和XGboost介绍

LightGBM介绍及参数调优

三、调参

 

GBDT分类的最佳调参数的讲解:

Gradient Boosting Machine(GBM)调参方法详解

 其次 scikit-learn 梯度提升树(GBDT)调参小结

  

LightGBM学习资料:

LightGBM——提升机器算法(图解+理论+安装方法+python代码)

比xgboost强大的LightGBM:调参指南(带贝叶斯优化代码)

LightGBM 调参方法(具体操作)

sklearn与LightGBM配合使用

拍拍贷"魔镜杯"风控算法大赛-LightGBM优秀代码

 

scikit-learn随机森林调参小结 (非常优秀的说明解答)

 

 

应对机器学习中类不平衡的10种技巧

摘要:

让我们使用Python库 imbalanced-learn 应用其中一些重采样技术。它与scikit-learn兼容,并且是scikit-learn-contrib项目的一部分。

import imblearn

 

刘建平Pinard的博客配套代码

 






 

posted on 2019-02-27 11:03  andy_1  阅读(1371)  评论(0编辑  收藏  举报

导航