LightGBM详细
目录
LightGBM
XGB的优缺点:
LightGBM原理
1.1 GBDT和 LightGBM对比
1.2 LightGBM 的动机
1.3 Xgboost 原理
1.4 LightGBM 优化
LightGBM算法原理:
直方图算法(Histgram)
带深度限制的Leaf-wise算法
单边梯度采样算法
互斥特征捆绑算法
LightGBM的优缺点:
速度:
内存:
LightGBM
GBDT是一个长久不衰的模型,他的思想是什么?
它的思想就是将多个弱分类器迭代训练得到最优的模型,训练效果好,不易过拟合等等的有点,那么XGB就是典型的一个GBDT的实现。
首先回顾一下XGB,它的核心思想就是说,是属于GBDT的一个延申,因此它的模型也是加法模型,由多个弱分类器相加的结果,那么在构成弱分类器的时候,首先需要对特征值进行预排序,然后便利所有的切分点,然后计算每个切分点的一个增益,最后找到最优的分裂点进行数据分裂成左右子树。
XGB的优缺点:
优点:
能够最精确的找到切分点,因为把所有的样本看一遍,都计算了一遍,肯定能找到最优的点。
缺点:
时间消耗比较大
- 算法中需要保存特征和特征值,还需要保存排序的结果。
- 在遍历每个划分点的时候,都需要进行增益的计算,因此消耗会比较大。
LightGBM原理
1.1 GBDT和 LightGBM对比
GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT 在工业界应用广泛,通常被用于点击率预测,搜索排序等任务。GBDT 也是各种数据挖掘竞赛的致命武器,据统计 Kaggle 上的比赛有一半以上的冠军方案都是基于 GBDT。
LightGBM (Light Gradient Boosting Machine)是一个实现 GBDT 算法的框架,支持高效率的并行训练,并且具有以下优点:
更快的训练速度
更低的内存消耗
更好的准确率
分布式支持,可以快速处理海量数据
如下图,在 Higgs 数据集上 LightGBM 比 XGBoost 快将近 10 倍,内存占用率大约为 XGBoost 的1/6,并且准确率也有提升。
1.2 LightGBM 的动机
常用的机器学习算法,例如神经网络等算法,都可以以 mini-batch 的方式训练,训练数据的大小不会受到内存限制。
而 GBDT 在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的 GBDT 算法是不能满足其需求的。
LightGBM 提出的主要原因就是为了解决 GBDT 在海量数据遇到的问题,让 GBDT 可以更好更快地用于工业实践。
1.3 Xgboost 原理
目前已有的 GBDT 工具基本都是基于预排序的方法(pre-sorted)的决策树算法(如 xgboost)。这种构建决策树的算法基本思想是:
首先,对所有特征都按照特征的数值进行预排序。
其次,在遍历分割点的时候用O(#data)的代价找到一个特征上的最好分割点。
最后,找到一个特征的分割点后,将数据分裂成左右子节点。
这样的预排序算法的优点是:能精确地找到分割点。
缺点也很明显:
首先,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这里需要消耗训练数据两倍的内存。
其次,时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。
最后,对 cache 优化不友好。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对 cache 进行优化。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的 cache miss。
1.4 LightGBM 优化
LightGBM 优化部分包含以下:
基于 Histogram 的决策树算法
带深度限制的 Leaf-wise 的叶子生长策略
直方图做差加速
直接支持类别特征(Categorical Feature)
Cache 命中率优化
基于直方图的稀疏特征优化
多线程优化。
下面主要介绍 Histogram 算法、带深度限制的 Leaf-wise 的叶子生长策略和直方图做差加速。
其实LightGBM也是一个实现GBDT算法的框架,
那么LightGBM的特点?
它支持高效的并行训练,有着更快的训练速度,更低的内存消耗,更好的准确率,支持分布式,可以快速的处理海量的数据。
LightGBM算法原理:
直方图算法(Histgram)
思想:把连续的特征值离散化成K个整数,比如说0~1我们叫做1,1~2我们叫做3,。。。。。。等等,这样然后在对特征值里边的数据进行一个统计,这样是不是就得到了一个直方图,然后我们用直方图所对应的值来进行增益的分裂,将大规模的数据更新为箱子的值。
那么这样做的目的是什么?
- 我们知道离散值的特点有:储存方便,运算更快,鲁棒性更强,模型更加的稳定
对于直方图来说最直接优点是什么?
内存占用小,因为不需要保存原来的特征了,只需要保存直方图统计后的值,这个值一般情况下用8位的整型去储存就够了,但是在XGB中需要使用32位的浮点型储存。
计算代价小,在XGB中计算分裂增益的时候需要遍历每一个特征值然后计算一个增益,而在直方图的算法中只需要计算K次,时间复杂度直接由原来的feature变成了现在的k而我们知道data>>k
当然我们说这种方法值最好的嘛?他有什么样的缺点呢?
Histogram算法并不完美,由于特征被离散化后,找到的并不是一个准确的切分点,所以对结果会产生影响,但是我们发现到形成的最终的这个强学习器并不会差,有时候甚至更好,原因是什么?
原因就是说里边的每个模型本来就是弱学习器,分割点不精确并不是特别的重要,比较粗糙的分割点真好还能起到正则化的作用,可以有效的防止过拟合,虽然每棵树上的训练误差稍大,但是在总体的框架下并没有什么太大的影响。
怎么做的差?
假如说我有x个数据,然后我是可是可以构建出来一个k个桶的直方图,然后,我的左子节点上的数据由x1个数据,同样是不是也可以得到一个k个桶的直方图,那么我右子节点上是不是就有(x-x1)个样本数据,是不是就可以通过x的直方图减去x1的直方图。
带深度限制的Leaf-wise算法
XGB使用的是level-wise按层生长的策略,这种策略容易进行并行化处理,也好控制模型的复杂度,同时也可以防止过拟合,但是这种方式其实是很低效的,因为这种按层去分的话,每次构建其中的一层,但是实际上呢,速度是比较慢的,因为有的叶子节点的增益下降是比较慢的,也就是说在这一步没有必要将这个节点继续的进行划分,但是却以同样的权重去关注同一层的每个叶子节点显然是不合适的。去划分它显然是不合适的。
而LightGBM采用的是Leaf-wise的增长策略,就是说,每次都从所有的叶子节点中找出,增益最大的叶子节点去进行划分,这样的话是不是每次都可以下降最多的误差,得到更好的精度,但是缺点呢就是,可能会长出一颗比较深的树,然后导致了过拟合,但是LightGBM在Leaf-wise的基础上加上了一个最大深度的限制,在保证高效的同时还防止了过拟合。
单边梯度采样算法
GOSS算法,这个算法的思想就是,从减少样本的角度出发,排除大部分的小梯度的样本,仅仅用剩下的样本计算目标函数增益,它是一种在减少数据和保证精度上平衡的算法。
在GBDT中发现每个样本都有相应的梯度值,梯度小的样本,训练误差也小,说明该样本已经很好的被模型给学习到了,直接想法就是丢掉这一部分数据,但是直接丢掉的话,就会影响到数据的分布,从而导致影响模型的精度,因此为了解决这个问题,提出了GOSS算法。GOSS是一个采样的算法,目的是为了丢弃一些对计算信息增益没有用的样本,留下对计算有用的欧阳本,也说到了,梯度大的对计算增益是有帮助的,梯度小的样本是没有帮助的,但是在其中又不能直接的丢弃,那他是怎么做的?
首先它对于样本的梯度进行一个排序,比如说我设定一个阈值0.5那么梯度大于0.5的样本我全部留下,梯度小于0.5的我按照一定的比例去随机的采样,比如说我从里边抽取了1/3的样本。然后使用这样的数据进行训练。
互斥特征捆绑算法
数据通常都是高纬稀疏的数据,并且通常数据呢都是稀疏的,什么意思?比如说one-hot类型的数据,每一列都是0只有一个值是1,如果数据的维度太高的话会出现什么情况,模型复杂,计算繁琐,时间复杂度高,如果将数据的维度进行压缩一下,那么速度是不是也会由很大的提升,那么怎么去通过一种无损的压缩来很好的减少特征的数量呢?我们发现,数据一般都是互斥的,什么是互斥的,就像one-hot中很多特征全是0,只有一个是1,那么也就是说只要我任意的两个特征不同时为非0值,那么这两个特征都是互斥的,我们就可以把特们绑到一起去组合成一个新的特征,但是实际中不存在完全互斥的数据吧,那么怎么办,仍然是采用近似互斥的方法,也就是说,我们允许一些非互斥的存在,那么我们去衡量这个不互斥的情况就称作为冲突比率,当这个比率比较小是,就可以将两个特征进行捆绑,而不影响精度,那么怎么去衡量两个特征之间能不能捆绑呢?
它有这个衡量公式,r是每个绑定中的最大冲突比率,当r相对较小是,完成它们速度和精度之间的一个平衡。
LightGBM的优缺点:
优点:
从内存和速度两方面去考虑
速度:
LightGBM采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间的复杂度;
LightGBM在训练的过程当中采用了单边梯度算法过滤掉了梯度比较小的样本,减小了计算量
LightGBM采用了Leaf-wise算法的增长策略构建树,减小了很多不必要的计算量
LightGBM采用了特征并行,数据并行的方法加速计算,当数据量非常大的时候还可以采用投票并行的策略
LightGBM对缓存也进行了优化,增加了缓存命中率
内存:
通过直方图算法将原本的储存特征值,转变为了储存箱子的值,降低了内存的消耗
在训练过程当中,采用互斥特征捆绑算法,减少了特征数量,降低了内存的消耗
Lightgbm = xgboost + 直方图(减小了内存储存的消耗) + leaf wise(构建树提升速度) + 单边梯度下降(从减少数据量) + 互斥特征捆绑(从减少特征)
LightGBM详细相关推荐
- Python机器学习15——XGboost和 LightGBM详细用法(交叉验证,网格搜参,变量筛选)
本系列基本不讲数学原理,只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法. 集成模型发展到现在的XGboost,LightGBM,都是目前竞赛项目会采用的主流算法.是真正的具有做项目 ...
- 【超详细】LightGBM介绍与应用
目录 1. LightGBM简介 2. LightGBM详细介绍 2.1 单边梯度抽样算法 2.2 直方图算法 2.3 互斥特征捆绑算法</
- Py之lightgbm:lightgbm的简介、安装、使用方法之详细攻略
Py之lightgbm:lightgbm的简介.安装.使用方法之详细攻略 目录 lightgbm的简介 lightgbm的安装 lightgbm的使用方法 1.class lightgbm.Datas ...
- XGBoost、LightGBM的详细对比介绍
https://www.cnblogs.com/infaraway/p/7890558.html
- 大战三回合:XGBoost、LightGBM和Catboost一决高低 | 程序员硬核算法评测
作者 | LAVANYA 译者 | 陆离 责编 | Jane 出品 | AI科技大本营(ID: rgznai100) [导读]XGBoost.LightGBM 和 Catboost 是三个基于 GBD ...
- Kaggle神器LightGBM最全解读!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 来源:Microstrong,编辑:AI有道 本文主要内容概览: 1. ...
- 并肩XGBoost、LightGBM,一文理解CatBoost!
本文主要内容概览: 1. CatBoost简介 CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种.CatBoost和XGBoost.Light ...
- gbdt 回归 特征重要性 排序_RandomForest、GBDT、XGBoost、lightGBM 原理与区别
RF,GBDT,XGBoost,lightGBM都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善基本学习器的泛化能力和鲁棒性. 根据基本学习器 ...
- Python之nyoka:nyoka库函数的简介、安装、使用方法之详细攻略
Python之nyoka:nyoka库函数的简介.安装.使用方法之详细攻略 目录 nyoka库函数的简介 1.Nyoka的核心模块 2.模型 (1).基础模型 (2).LightGBM: (3).XG ...
最新文章
- openfiler 工具栏和快捷方式
- iOS UI-IOS开发中Xcode的一些使用技巧
- 2021年《环球科学》十大科学新闻:“天宫”空间站、火星探索位列前二
- 【HDU - 1026 】Ignatius and the Princess I (bfs + 记录路径)
- 2021年Q1移动互联网行业数据研究报告
- C#中释放数据库连接资源
- canal DevGuide
- java gc error_java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案
- C++_二维数组_定义方式_数组名称的作用_案例考试成绩统计---C++语言工作笔记021
- SYS_数据访问权限Operation Unit和Ledger的访问设定(案例)
- PHP数组的使用方法小结
- PAT (Basic Level) Practice1019 数字黑洞
- 人生苦短 我学python之OldBoy21天入门_day01·Python基础语法
- Google Earth Engine(GEE)计算湿度(WET)
- 广义S变换的地震高分辨率处理中的应用
- tex 表格内容换行_LaTex表格内单元格内容强制换行
- 北京大学自然辩证法概论知识点总结(2021)
- 上云避坑指南100篇|ERP上云一时爽,遇坑泪两行
- Centos 7.4 防火墙关闭命令
- 批量ping检测主机
热门文章
- Actionbar 溢出菜单背景色设置
- linux spec文档解析
- [前端] 前端bootstrap col-xs-6 col-md-3的布局意思
- PageHelper 插件踩过的坑
- 作为学科的计算机科学(COMPUTING AS A DISCIPLINE)
- HBuilderX wifi无线真机调试
- gr-osmosdr支持GNURadio的扩展
- 直播 | 企业级应用Service Management Automation X(SMAX)的微服务之路
- 什么是TOR 官方文档
- 正点原子潘多拉上STlinkV2.1固件遇到的坑