论文解读:LightGBM——A Highly Efficient Gradient Boosting Decision Tree

本文主要是介绍论文解读:LightGBM——A Highly Efficient Gradient Boosting Decision Tree,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 摘要
  • 1. Introduction
  • 2. Preliminary
    • 2.1 GBDT and Its Complexity Analysis
    • 2.2 Related Work
  • 3. Gradient-based One-Side Sampling(单边梯度采样)
  • 4. Exclusive Feature Bundling
  • 5. 结论
  • 6. 参考算法

在这里插入图片描述

摘要

GBDT是个非常流行的机器学习算法,有几个非常有效的应用实现,例如XGBoost合pGBRT。尽管这些应用算法应用来了很多工程优化技术,但是当特征维度特别大,数据量特别多时,这些算法还是不够高效。一个主要原因是:对于每一个特征,他们需要遍历所有数据去估计所有分裂点的信息增益,这会非常耗时。为了解决这个问题,我们提出了两种技术:GOSS(单边梯度采样)和EFB(互斥特征绑定)。对于GOSS,我们留下梯度较大的数据样本,而对梯度较小的样本进行随机采样,并加上权重补偿损失。论文也证明梯度较大的样本对计算信息增益上贡献较大。GOSS可以在较小的数据样本上获得对信息增益比较精确的估计。对于EFB,论文将互斥的特征绑定在一起(他们很少同时接受非零值)。我们证明找到最优绑定是一个NP-hard问题,所以我们找到了一个贪心算法,它可以完成非常好的近似.

1. Introduction

为了解决GBDT面临的挑战,一些研究曾经根据样本的权重来采样数据,但是在GBDT种没有样本权重。所以本文提出两种新技术:

GOSS:注意到,关于数据的梯度对信息增益的影响,于是对保留梯度较大的数据样本,并对梯度较小的样本进行随机采样。为了补偿丢到小梯度样本带来的损失,我们为小梯度样本增加了一个补偿常量

EFB:通常在真实的应用中,尽管数据的维度特别高,但是他们都很稀疏,因此我们设计了一个算法将互斥特征绑定在了一起。关于最优绑定问题,它是一个NP-hard问题,我们设计了一种近似算法将NP-hard问题转化成了图上色的问题(顶点代表特征,为两个不互斥(conflics)的特征添加边)

2. Preliminary

2.1 GBDT and Its Complexity Analysis

在GBDT算法中,时间复杂度最高的部分是寻找最佳的分裂点。最流行的算法就是预排序(pre-ordered):就是枚举,显然这是非常低效的。还有一种算法是直方图算法(histogram-based algorithm):它将连续型浮点特征分为离散的桶(bins),然后用这些桶去构建直方图,累计统计量。本文将在直方图算法的基础上进行优化

2.2 Related Work

XGBoost既支持pre-ordered算法,也支持直方图算法。

使用pre-ordered算法的GBDT模型可以通过忽略值为0的特征来减少训练损失。然而使用直方图算法的GBDT并没有有效的对于稀疏数据的优化解决办法(这就是EFB算法引出的原因)。原因是直方图算法需要检索到桶中的所有特征,不论特征值是否是0或者非0。

3. Gradient-based One-Side Sampling(单边梯度采样)

使用方差增益指标来评估是否为好的分裂,使用单边梯度采样简化方差增益的计算。

公式推导:https://www.zhihu.com/question/386159856

在这里插入图片描述

4. Exclusive Feature Bundling

通过谨慎的构建一个特征扫描算法(feature scanning algorithm),我们可以从特征包中构建与单个特征相同的特征直方图,这样就可以把算法的时间复杂度在这里插入图片描述

这里有两个问题需要解决:

(1) 哪些特征应该绑在一起
找出最优的 bundle 组合数是一个 NP-hard 问题,LightGBM第一步将原问题转化为”图着色”问题,"图着色"问题也是一个NP-hard问题。所以第二步论文设计了一个贪心算法来用"图着色"问题解决互斥特征的绑定。另外,一些特征之间并不是100%的互斥,即有少量样本中不互斥,所以算法允许这些样本之间存在较小的冲突(conflicts)
在这里插入图片描述
通过上述讨论,论文设计了一个Greedy Bundling算法:
① 构建一个图,顶点表示特征,边表示特征之间的冲突
② 依据特征冲突的程度排序(降序)
③ 检查排序列表中的每个特征,考虑冲突阈值γ后将其特征放入一个已经存在的或者新建一个bundle
这个算法在特征数量不是特别多的时候时间复杂度可以被接受,为了更进一步提升效率,我们不构建图:通过特征非零值的数量进行排序(对应②),因为
如果一个特征它的零值比较多的话那么它更容易和其他特征产生冲突

(2) 如何去构建bundle
该过程主要是关键在于原始特征值可以从bundle中区分出来,即绑定几个特征在同一个bundle里需要保证绑定前的原始特征的值在bundle中能够被识别,考虑到直方图算法将连续的值保存为离散的bin,我们可以使得不同特征的值分到bundle中的不同bin中,这可以通过在特征值中加一个偏置常量来解决,比如,我们在bundle中绑定了两个特征A和B,A特征的原始取值为区间[0,10),B特征的原始取值为区间[0,20),我们可以在B特征的取值上加一个偏置常量10,将其取值范围变为[10,30),这样就可以放心的融合特征A和B了,因为在树模型中对于每一个特征都会计算分裂节点的,也就是通过将他们的取值范围限定在不同的bin中,在分裂时可以将不同特征很好的分裂到树的不同分支中去

5. 结论

LightGBM不论在时间复杂度还是内存消耗上都优于XGBoost

6. 参考算法

在这里插入图片描述
在这里插入图片描述

这篇关于论文解读:LightGBM——A Highly Efficient Gradient Boosting Decision Tree的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517872

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置