lightgbm 保存模型 过大_机器学习之12—Lightgbm
Lightgbm模型和GBDT以及XGboost一样,都是基于决策树的boosting集成模型;
Lightgbm是一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。
关于GBDT和XGboost的介绍可以参考:
大饼:机器学习——提升算法(Adaboost、xgboost、GBDT)zhuanlan.zhihu.com
Lightgbm主要特点
Histogram Algorithm(直方图)
将连续浮点特征值离散化为k个整数,并构造bins=k的直方图,只管来说,就是将连续值得特征划分为k个离散值(区间),并将每个符合该离散值范围的连续值加入到相应的bin的直方图中,数据的离散化有着存储方便、运算更快、鲁棒性强以及模型稳定的特点(正则化);
- 内存占用小,不需要预排序(XGboost),只保存离散化后的值,内存可以降低至1/8;
- 计算代价小,预排序算法XGboost每遍历一个特征值就需要计算分裂增益,Lightgbm是计算k次的离散值即可,复杂度从O(#data#feature)降低至O(#k#feature),一般data>>k;
- bins替代原始数据,增加了正则化;
- 特征值离散化,意味着许多细节被抛弃,影响数据间的差异性以及模型的精度;
直方图做差加速
叶子直方图可以由其父节点直方图和兄弟节点直方图做差得到,速度可以提升一倍,实际构建树的过程中,可以先计算直方图小的叶子节点,然后利用直方图做差获得直方图大的兄弟节点,降低计算代价。
带深度限制的Leaf-wise算法
无论是决策树、GBDT、Adaboost还是XGBoost,其树的生长方式都是level-wise策略,即每一个节点都分裂成两个子节点,Xgboost因为采用了多线程优化,遍历一次数据可以分裂同一层的节点,但是实际上很多叶子的分裂增益很低,可以不用继续分裂下去,增加计算开销。
leaf-wise生长策略,每次从当前所有叶子中寻找分裂增益最大的叶子进行分裂,leaf-wise可以降低误差提高精度,并且避免很多不必要的计算开销,但是缺点就是容易长出比较深的决策树,产生过拟合,因此会配合最大深度限制,保持高效率的同时,减缓过拟合。
单边梯度采样(Goss)
Goss算法从减少样本的角度出发排除大部分小梯度的样本,仅用剩下的样本计算信息增益,是一种在减少数据量和保证精度上平衡的算法。
AdaBoost中,样本权重是数据重要性的指标。然而在GBDT中没有原始样本权重,不能应用权重采样。幸运的是,我们观察到GBDT中每个数据都有不同的梯度值,对采样十分有用。即梯度小的样本,训练误差也比较小,说明数据已经被模型学习得很好了,直接想法就是丢掉这部分梯度小的数据。然而这样做会改变数据的分布,将会影响训练模型的精确度,为了避免此问题,提出了GOSS算法。
- Goss首先将分裂的特征所有取值按照梯度绝对值大小降序排序(不用保存排序结果);
- 选取绝对值最大的
个数据;
- 剩余的
的较小梯度数据中随机选择个数据,并乘以一个常数,这样模型会更关注训练不足的样本,而不改变原数据集的分布;
- 最后用
个数据来计算信息增益。
互斥特征捆绑算法(EFB)
高维度的数据往往存在很大的稀疏性,数据通常都是几千万维的稀疏数据,对于不同维度的数据合并一起,可以使得稀疏矩阵变成一个稠密矩阵。
- 将特征按照非零值的个数进行排序;
- 计算不同特征的冲突比率;(两个特征完全互斥时,比率为0)
- 遍历每个特征并尝试合并特征,使冲突比率最小化;
支持类别特征
目前大部分的机器学习工具都无法有效的直接支持类别特征,一般需要将其转化为one-hot格式,Lightgbm优化了对于类别特征的支持,可以直接输入类别特征,不需要额外的0-1展开。
树模型遇到one-hot编码的类别特征时可能会遇到一些问题,比如切分方式只有是/否,很容易造成样本切分不均衡,切分增益小;另外这种不平衡的切分方式会使得一个叶节点只有极少数样本的情况出现,这对于决策树基于统计信息的学习会产生很大的影响。
Lightgbm处理分类特征主要是,在1个k维的类别特征中寻找最优切分。在枚举分割点之前,先把直方图按每个类别的均值进行排序,然后安装均值的结果依次枚举最优分割点。
- 统计该类别特征每种离散值出现次数,排序,为每一个特征值建立bin容器,对于出现次数很少的bin容器可以抛弃掉;
- 如果bin容器数里<4,可以使用One V Other的方法,逐个扫描每个bin,找出最佳分裂点,如果bins较多的话,先进行过滤,只让子集合较大的bin容器参加划分阈值计算,对每个符合条件的bin容器进行公式计算:当前bin容器所有样本一阶梯度之和/该bin容器下所有样本二阶梯度之和+正则项(cat_smooth)
支持高效并行
- 特征并行
不同的机器在不同的特征集合上分别寻找最优的分割点,并在机器中同步最优分割点,这种方式对数据进行垂直划分,每台机器所含数据不同,使用不同的机器找到不同特征最优分割点,划分结果需要通过通信告知每台机器,增加额外复杂度。
Lightgbm是在每台机器上保存全部的训练数据,在得到最佳划分方案后可在本地执行划分而减少不必要的通信。
2. 数据并行
Lightgbm数据并行中使用分散规约把直方图合并的任务分摊到不同的机器,降低通信计算代价,利用直方图做差,减少一半通信量。
3. 投票并行
使用投票并行的方式,只合并部分特征的直方图从而达到降低通信量的目的,得到非常好的加速效果。
- 本地找出Top k特征,并基于投票筛选出可能是最优分割点的特征;
- 合并时只合并每个机器选出来的特征;
cache命中率优化
XGBoost在预排序之后,特征对梯度的访问是一种随机访问,不同的特征访问顺序不一样,无法优化cache,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的cache miss。
Lightgbm:
- 所有特征采用相同的方式获得梯度(XGboost不同特征通过不同索引获得梯度),只需要对梯度进行排序可实现连续访问,提高缓存命中率。
- 不需要存储行索引到叶子索引的数组,降低内存消耗,不存在Cache Miss问题。
和XGBoost的比较
XGBoost的缺点
- 预排序空间消耗大,需保存数据特征值和排序结果(索引),需要训练集两倍的内存;
- cache miss问题;
- 遍历每个分割点都需要进行分裂增益计算,消耗代价大。
Lightgbm的优化
- 基于histogram的决策树算法;
- 单边梯度采样(Goss),减少大量小梯度数据,节省了很多时间和空间消耗;
- 互斥捆绑特征(EFB),降维,减少特征维度;
- 带深度限制的leaf-wise生长策略;
- 支持类别特征;
- 支持高效并行;
- cache命中率优化。
参考博客:
LightGBM算法详解(教你一文掌握LightGBM所有知识点)_GFDGFHSDS的博客-CSDN博客_lightgbm详解blog.csdn.net
LightGBM(lgb)详解_weixin_44023658的博客-CSDN博客_lgb介绍blog.csdn.net
LightGBM原理分析www.jianshu.com
参考论文:
LightGBM: A Highly Efficient Gradient Boosting Decision Treepapers.nips.cc
lightgbm 保存模型 过大_机器学习之12—Lightgbm相关推荐
- lightgbm 保存模型 过大_一个例子读懂LightGBM的模型文件
机器学习模型的可解释性是个让人头痛的问题.在使用LightGBM模型的肯定对生成的GBDT的结构是好奇的,我也好奇,所以就解析一个LightGBM的模型文件看看,通过这个解析,你可以看懂GBDT的结构 ...
- lightgbm 保存模型 过大_LightGBM如何进行在线学习工作中每天都会有数据更新以及增量数据,重新训练开销显然太大如何解决?...
lightGBM 和 xgboost 都是 gbdt 的实现,下面以 xgboost 为例说明算法原理和增量学习的利弊. 首先,xgboost 的标准实现是每一棵数的构建都对全量数据进行拟合,而增量学 ...
- lightgbm保存模型参数
20210205 params = {'task': 'train', # 执行的任务类型'boosting_type': 'gbrt', # 基学习器'objective': 'lambdarank ...
- python保存模型与参数_如何导出python中的模型参数
模型的保存和读取 1.tensorflow保存和读取模型:tf.train.Saver() .save()#保存模型需要用到save函数 save( sess, save_path, global_s ...
- 机器学习模型定点化_机器学习模型的超参数优化
引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模型的优化. 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数.超参数与一般 ...
- 机器学习模型 知乎_机器学习:模型评估之评估方法
机器学习已经成为了人工智能的核心研究领域之一,它的研究动机就是为了让计算机系统具有人的学习能力以便实现人工智能.目前,关于机器学习定义的说法比较多,而被广泛采用的定义是"利用经验来改善计算 ...
- 机器学习模型 知乎_机器学习-模型选择与评价
交叉验证 首先选择模型最简单的方法就是,利用每一种机器学习算法(逻辑回归.SVM.线性回归等)计算训练集的损失值,然后选择其中损失值最小的模型,但是这样是不合理的,因为当训练集不够.特征过多时容易过拟 ...
- kmeans及模型评估指标_机器学习模型评估指标总结
常用机器学习算法包括分类.回归.聚类等几大类型,以下针对不同模型总结其评估指标 一.分类模型 常见的分类模型包括:逻辑回归.决策树.朴素贝叶斯.SVM.神经网络等,模型评估指标包括以下几种: (1)二 ...
- python保存模型与参数_基于pytorch的保存和加载模型参数的方法
当我们花费大量的精力训练完网络,下次预测数据时不想再(有时也不必再)训练一次时,这时候torch.save(),torch.load()就要登场了. 保存和加载模型参数有两种方式: 方式一: torc ...
最新文章
- Java基础语法纯小白入门
- 有用过PHP SPL的吗,不知道这主要用来干嘛
- 为什么要用MyBatis-JDBC 连接数据库
- java hashmap实例,关于java中的HashMap的实例操作
- jq之mouseenter
- windows server 2003 IIS下配置PHP
- java socket 抓包_linux下用socket的抓包程序
- 用这款免费工具,即可解决 90% 的报表设计难题
- 磁带机故障灯解决方法
- cmd通过安装choco 安装 helm
- 蓝桥杯 分解质因数 C语言
- 网站js劫持了怎么处理和预防、js劫持了怎么办
- pytorch Kfold数据集划分
- 2022年语音合成(TTS)和语音识别(ASR)年度总结
- mysql: create routin表示的是什么?,关于mysql create routine 权限的一些说明
- 子集和问题 算法_LeetCode 题解 | 78.子集
- 7-5 判断输入的字符是哪种类型
- 跳一跳作弊器上榜!GitHub 2018年十大新开源项目揭晓
- 树莓派应用——每日天气预报邮件
- 通达信一根均线变色主图指标公式,实现均线向上向下变色
热门文章
- 上海市计算机一级客观题,2012年上海市高校计算机等级考试(一级)模拟卷客观题...
- android 最新 support,android support v7 下载-android support.v7包 官方最新版 - 河东下载站...
- python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)
- 项目管理最佳实践方法_项目管理最佳实践,企业如何进行有效的项目管理
- LaTeX:equation, aligned 书写公式换行,顶部对齐
- 安装python3.9
- 创造型模式——单例模式
- linux 调优系列(续)
- Dede 删除文档同时文章中的图片的方法
- 容器内应用日志收集方案