LightGBM与XGBOOST算法概述
LightGBM: 用于排序,分类,回归等机器学习任务,支持高效率并行训练
XGBOOST:来源于GBDT
LightGBM与XGBOOST相关理论基础:
- Boosting
集成学习的一个分支,通过将弱分类器训练成强分类器,达到准确分类的效果 - Gradient boosting
Boosting分为Adaboost和Gradient Boosting,lightGBM属于gradient boosting
? 什么是gradient boosting,与adaboosting不同的地方
Gradient boosting: 一个迭代的过程,一次性迭代变量,但逐一增加子模型,并保证过程中损失函数不断减小
假设f(xi)为子模型,复合模型为
损失函数为
,在每次加入新的子模型后,使得
- 决策树
一种分类和回归的方法,大多用于分类,在每个叶子节点,根据某一判断条件,输出符合条件和不符合条件两类结果;换句话说,把决策树当做众多if-then规则的集合,也可当做定义在特定空间与类空间上的条件概率分布。
决策树包括3个主要步骤:特征选择,决策树的生成和决策树的修剪
决策树按叶子分裂方法分为两类:
叶子分裂的学习方法
- 在分裂过程中要不断寻找分裂后收益最大的节点,对其进行进一步的分裂,其他非收益最大化的节点将不再继续分裂
- 优点是算法更加快速有效,
- 缺点是会忽略掉被舍弃叶子上的信息,导致分裂结果不够细化
按层分类的学习方法 - 每一层的每个节点都进行分裂,即每次迭代都要遍历整个训练集的所有数据
- 优点是每层的叶子都可并行完成,具有天然的并行性
- 缺点是产生很多没必要的分裂,需要更多的计算成本,且占用较大的运行内存
-
GBDT
GBDT=gradient boosting+decision tree
即若gradient boosting的每个子模型都是一个decision tree,这样的模型就是GBDT
常用于点击率预测,搜索排序
只利用了一阶导数信息
? GBDT与决策森林有什么区别 -
XGBOOST
GBDT只利用了一阶的导数信息,而XGBOOST对损失函数进行了二阶的泰勒展开,求得模型最优解的效率更高
XGBOOST优点
- 正则化:能实现正则化提升,有利于减少过拟合现象
- 并行处理:XGBOOST相比Gradient Boosting速度有了较大提升,XGBOOST可实现并行处理,而boosting算法是顺序处理
- 高度灵活:XGBOOST允许用户定义自定义优化目标和评价标准,它对模型增加了一个全新的维度,故处理时不会受到任何限制
- 缺失值处理:XGBOOST内置处理缺失值的规则,在不同节点遇到缺失值时采用不同的处理方法,并会学习未来遇到缺失值时的处理方法
- 剪枝:当分裂时遇到一个负损失时,Gradient Boosting会停止分裂,但XGBOOST会一直分裂到指定的最大深度,然后回过头来剪枝,若某个节点不在有正值,它会去除这个分裂
- 内置交叉验证:XGBOOST允许在每一轮boosting中使用交叉验证,因此,可方便地获得最优boosting迭代次数,而gradient boosting使用网络搜索,只能检测有限个值
- 在已有的模型基础上继续训练:XGBOOST可在上一轮结果的基础上继续训练,该特性在某些特定应用上是个巨大优势
XGBOOST优化 - 选择较高的学习速率,并选择对应于该学习速率的最优决策树数量
- 对给定的学习速率和决策树数量,进行决策树特定参数的调优
- XGBOOST的正则化参数的调优,可降低算法复杂度,进而提高算法表现
- LightGBM
属于GBDT的一种,为解决GBDT在海量数据中的问题,让GBDT更好用于实践
采用叶子分裂方法分裂节点,故计算代价较小,因此需要控制树的深度和每个叶子节点的最小数据量,避免过拟合现象
选择了基于histogram的决策树算法,将特征值分为很多个小桶,在这些桶上寻找分裂,减小储存成本和计算成本
可分为3类:特征并行,数据并行和投票并行;特征并行运用于特征较多的场景,数据并行运用于数据量较大的场景,投票并行运用于特征和投票都较多的场景
LightGBM优点
- 更快的训练速度
- 更低的内存消耗
- 更好的模型精度
- 支持并行学习
- 可快速处理海量数据
LightGBM优化 - 加快运行速度
- 随机减少数据量
- 随机减少特征
- 若有类别特征,可直接输入类别特征
- 若一个训练文件训练多次,可将文件保存为二进制文件
- 使用并行训练方式
- 提高模型精度
- 减少学习率,增加学习次数
- 增大叶子节点数量
- 使用交叉验证的方法对比参数,选择更好的参数
- 增加训练数据
LightGBM与XGBOOST算法的比较: