| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> LightGBM学习笔记 -> 正文阅读 |
|
|
[数据结构与算法]LightGBM学习笔记 |
LightGBM简介LightGBM是GBDT算法地实现框架之一,设计的初衷是并行、高效。特点是训练速度快、内存消耗小、可并行运算、支持类别变量。 LightGBM优化点直方图算法不同于XGBoost的预排序,LightGBM将区间离散化,划分为桶(bin),确定每个样本属于哪个桶。在遍历数据找最优划分点时,只需要遍历每个桶即可。
XGBoost预排序算法每遍历一个特征值就需要计算一次分裂的增益,而直方图算法只需要计算
k
k
k次(
k
k
k可以认为是常数),时间复杂度从
O
(
#
d
a
t
a
?
#
f
e
a
t
u
r
e
)
O(\#data * \#feature)
O(#data?#feature) 优化到
O
(
k
?
#
f
e
a
t
u
r
e
s
)
O(k* \#features)
O(k?#features)。在内存消耗上,预排序储存排序索引和特征值,而直方图算法只需储存bin的索引,减少了内存的消耗。 当然,Histogram算法并不是完美的。由于特征被离散化后,找到的并不是很精确的分割点,所以会对结果产生影响。但在不同的数据集上的结果表明,离散化的分割点对最终的精度影响并不是很大,甚至有时候会更好一点。原因是决策树本来就是弱模型,分割点是不是精确并不是太重要;较粗的分割点也有正则化的效果,可以有效地防止过拟合;即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升(Gradient Boosting)的框架下没有太大的影响。 直方图作差优化一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。通常构造直方图,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的k个桶。利用这个方法,LightGBM可以在构造一个叶子的直方图后(父节点在上一轮就已经计算出来了),可以用非常微小的代价得到它兄弟叶子的直方图,在速度上可以提升一倍。 leaf-wise算法LightGBM采用leaf-wise算法。当叶子数量相同时,leaf-wise算法精度更高。为了避免生成较深的树,设置了max_depth的限制。 单边梯度采样法(GOSS)单边梯度采样法,又称为Gradient-based one-side sampling。GBDT每个样本都有不同的梯度值,将其作为采样的依据。梯度较小的样本,说明其拟合得已经比较好了,于是可以考虑减少它的权重。具体操作如下 首先将要进行分裂的特征的所有梯度值按照绝对值大小降序排序(XGBoost一样也进行了排序,但是LightGBM不用保存排序后的结果),选取绝对值最大的前 a % a\% a%个数据。然后在剩下的较小梯度数据中随机选择 b % b\% b%个数据。为避免改变数据得分布,在计算增益时将小梯度数据扩大 1 ? a b \frac{1-a}{b} b1?a?。通过这种方法,可以既减少数据量,又保证精度。 直接支持类别特征实际上大多数机器学习工具都无法直接支持类别特征,一般需要把类别特征,通过 one-hot编码,转化到多维的0/1特征,降低了空间和时间的效率。但我们知道对于决策树来说并不推荐使用 one-hot 编码,尤其当类别特征中类别个数很多的情况下,会增加维度。LightGBM支持直接输入类别变量
支持并行运算特征并行在不同机器、在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。 数据并行让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。合并直方图时通信代价比较大。
基于投票的数据并行从本地找最优特征,再投票找到可能是最优的特征,只合并这些特征的直方图。 参数调整防止过拟合:
算法比较LightGBM优化点
参考文献https://zhuanlan.zhihu.com/p/99069186 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/3 18:33:39- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |