论文解读: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

相关文章

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一