XGBoost,LightGBM

这篇具有很好参考价值的文章主要介绍了XGBoost,LightGBM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

XGBoost

LightGBM


Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM。

送上完整的思维导图:

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

XGBoost

XGBoost 是大规模并行 boosting tree 的工具,它是目前最快最好的开源 boosting tree 工具包,比常见的工具包快 10 倍以上。Xgboost 和 GBDT 两者都是 boosting 方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义。

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

 

LightGBM

LightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中。

从 LightGBM 名字我们可以看出其是轻量级(Light)的梯度提升机(GBM),其相对 XGBoost 具有训练速度快、内存占用低的特点。下图分别显示了 XGBoost、XGBoost_hist(利用梯度直方图的 XGBoost) 和 LightGBM 三者之间针对不同数据集情况下的内存和训练时间的对比:

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

那么 LightGBM 到底如何做到更快的训练速度和更低的内存使用的呢?

我们刚刚分析了 XGBoost 的缺点,LightGBM 为了解决这些问题提出了以下几点解决方案:

  1. 单边梯度抽样算法;

  2. 直方图算法;

  3. 互斥特征捆绑算法;

  4. 基于最大深度的 Leaf-wise 的垂直生长算法;

  5. 类别特征最优分割;

  6. 特征并行和数据并行;

  7. 缓存优化。

2.1 数学原理

2.1.1 单边梯度抽样算法

GBDT 算法的梯度大小可以反应样本的权重,梯度越小说明模型拟合的越好,单边梯度抽样算法(Gradient-based One-Side Sampling, GOSS)利用这一信息对样本进行抽样,减少了大量梯度小的样本,在接下来的计算锅中只需关注梯度高的样本,极大的减少了计算量。

GOSS 算法保留了梯度大的样本,并对梯度小的样本进行随机抽样,为了不改变样本的数据分布,在计算增益时为梯度小的样本引入一个常数进行平衡。具体算法如下所示:

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

我们可以看到 GOSS 事先基于梯度的绝对值对样本进行排序(无需保存排序后结果),然后拿到前 a% 的梯度大的样本,和剩下样本的 b%,在计算增益时,通过乘上 \frac{1-a}{b} 来放大梯度小的样本的权重。一方面算法将更多的注意力放在训练不足的样本上,另一方面通过乘上权重来防止采样对原始数据分布造成太大的影响。

2.1.2 直方图算法

  1. 直方图算法

直方图算法的基本思想是将连续的特征离散化为 k 个离散特征,同时构造一个宽度为 k 的直方图用于统计信息(含有 k 个 bin)。利用直方图算法我们无需遍历数据,只需要遍历 k 个 bin 即可找到最佳分裂点。

我们知道特征离散化的具有很多优点,如存储方便、运算更快、鲁棒性强、模型更加稳定等等。对于直方图算法来说最直接的有以下两个优点(以 k=256 为例):

  • 内存占用更小:XGBoost 需要用 32 位的浮点数去存储特征值,并用 32 位的整形去存储索引,而 LightGBM 只需要用 8 位去存储直方图,相当于减少了 1/8;

  • 计算代价更小:计算特征分裂增益时,XGBoost 需要遍历一次数据找到最佳分裂点,而 LightGBM 只需要遍历一次 k 次,直接将时间复杂度从 O(#data  * #feature) 降低到 O(k  * #feature)  ,而我们知道 #data >> k 。

虽然将特征离散化后无法找到精确的分割点,可能会对模型的精度产生一定的影响,但较粗的分割也起到了正则化的效果,一定程度上降低了模型的方差。

  1. 直方图加速

在构建叶节点的直方图时,我们还可以通过父节点的直方图与相邻叶节点的直方图相减的方式构建,从而减少了一半的计算量。在实际操作过程中,我们还可以先计算直方图小的叶子节点,然后利用直方图作差来获得直方图大的叶子节点。

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

  1. 稀疏特征优化

XGBoost 在进行预排序时只考虑非零值进行加速,而 LightGBM 也采用类似策略:只用非零特征构建直方图。

2.1.3 互斥特征捆绑算法

高维特征往往是稀疏的,而且特征间可能是相互排斥的(如两个特征不同时取非零值),如果两个特征并不完全互斥(如只有一部分情况下是不同时取非零值),可以用互斥率表示互斥程度。互斥特征捆绑算法(Exclusive Feature Bundling, EFB)指出如果将一些特征进行融合绑定,则可以降低特征数量。

针对这种想法,我们会遇到两个问题:

  1. 哪些特征可以一起绑定?

  2. 特征绑定后,特征值如何确定?

对于问题一:EFB 算法利用特征和特征间的关系构造一个加权无向图,并将其转换为图着色算法。我们知道图着色是个 NP-Hard 问题,故采用贪婪算法得到近似解,具体步骤如下:

  1. 构造一个加权无向图,顶点是特征,边是两个特征间互斥程度;

  2. 根据节点的度进行降序排序,度越大,与其他特征的冲突越大;

  3. 遍历每个特征,将它分配给现有特征包,或者新建一个特征包,是的总体冲突最小。

算法允许两两特征并不完全互斥来增加特征捆绑的数量,通过设置最大互斥率  来平衡算法的精度和效率。EFB 算法的伪代码如下所示:

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

我们看到时间复杂度为 O(#feature^2) ,在特征不多的情况下可以应付,但如果特征维度达到百万级别,计算量则会非常大,为了改善效率,我们提出了一个更快的解决方案:将 EFB 算法中通过构建图,根据节点度来排序的策略改成了根据非零值的技术排序,因为非零值越多,互斥的概率会越大。

对于问题二:论文给出特征合并算法,其关键在于原始特征能从合并的特征中分离出来。假设 Bundle 中有两个特征值,A 取值为 [0, 10]、B 取值为 [0, 20],为了保证特征 A、B 的互斥性,我们可以给特征 B 添加一个偏移量转换为 [10, 30],Bundle 后的特征其取值为 [0, 30],这样便实现了特征合并。具体算法如下所示:

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

2.1.4 带深度限制的 Leaf-wise 算法

在建树的过程中有两种策略:

  • Level-wise:基于层进行生长,直到达到停止条件;

  • Leaf-wise:每次分裂增益最大的叶子节点,直到达到停止条件。

XGBoost 采用 Level-wise 的增长策略,方便并行计算每一层的分裂节点,提高了训练速度,但同时也因为节点增益过小增加了很多不必要的分裂,降低了计算量;LightGBM 采用 Leaf-wise 的增长策略减少了计算量,配合最大深度的限制防止过拟合,由于每次都需要计算增益最大的节点,所以无法并行分裂。

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

2.1.5 类别特征最优分割

大部分的机器学习算法都不能直接支持类别特征,一般都会对类别特征进行编码,然后再输入到模型中。常见的处理类别特征的方法为 one-hot 编码,但我们知道对于决策树来说并不推荐使用 one-hot 编码:

  1. 会产生样本切分不平衡问题,切分增益会非常小。如,国籍切分后,会产生是否中国,是否美国等一系列特征,这一系列特征上只有少量样本为 1,大量样本为 0。这种划分的增益非常小:较小的那个拆分样本集,它占总样本的比例太小。无论增益多大,乘以该比例之后几乎可以忽略;较大的那个拆分样本集,它几乎就是原始的样本集,增益几乎为零;

  2. 影响决策树学习:决策树依赖的是数据的统计信息,而独热码编码会把数据切分到零散的小空间上。在这些零散的小空间上统计信息不准确的,学习效果变差。本质是因为独热码编码之后的特征的表达能力较差的,特征的预测能力被人为的拆分成多份,每一份与其他特征竞争最优划分点都失败,最终该特征得到的重要性会比实际值低。

LightGBM 原生支持类别特征,采用 many-vs-many 的切分方式将类别特征分为两个子集,实现类别特征的最优切分。假设有某维特征有 k 个类别,则有 2^{(k-1)} - 1 中可能,时间复杂度为 O(2^k) ,LightGBM 基于 Fisher 大佬的 《On Grouping For Maximum Homogeneity》实现了 O(klog_2k) 的时间复杂度。

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

上图为左边为基于 one-hot 编码进行分裂,后图为 LightGBM 基于 many-vs-many 进行分裂,在给定深度情况下,后者能学出更好的模型。

其基本思想在于每次分组时都会根据训练目标对类别特征进行分类,根据其累积值 \frac{\sum gradient }{\sum hessian} 对直方图进行排序,然后在排序的直方图上找到最佳分割。此外,LightGBM 还加了约束条件正则化,防止过拟合。

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

我们可以看到这种处理类别特征的方式使得 AUC 提高了 1.5 个点,且时间仅仅多了 20%。

2.2 工程实现

2.2.1 特征并行

传统的特征并行算法在于对数据进行垂直划分,然后使用不同机器找到不同特征的最优分裂点,基于通信整合得到最佳划分点,然后基于通信告知其他机器划分结果。

传统的特征并行方法有个很大的缺点:需要告知每台机器最终划分结果,增加了额外的复杂度(因为对数据进行垂直划分,每台机器所含数据不同,划分结果需要通过通信告知)。

LightGBM 则不进行数据垂直划分,每台机器都有训练集完整数据,在得到最佳划分方案后可在本地执行划分而减少了不必要的通信。

2.2.2 数据并行

传统的数据并行策略主要为水平划分数据,然后本地构建直方图并整合成全局直方图,最后在全局直方图中找出最佳划分点。

这种数据划分有一个很大的缺点:通讯开销过大。如果使用点对点通信,一台机器的通讯开销大约为 O(#machine * #feature *#bin ) ;如果使用集成的通信,则通讯开销为 O(2 * #feature *#bin ) ,

LightGBM 采用分散规约(Reduce scatter)的方式将直方图整合的任务分摊到不同机器上,从而降低通信代价,并通过直方图做差进一步降低不同机器间的通信。

2.2.3 投票并行

针对数据量特别大特征也特别多的情况下,可以采用投票并行。投票并行主要针对数据并行时数据合并的通信代价比较大的瓶颈进行优化,其通过投票的方式只合并部分特征的直方图从而达到降低通信量的目的。

大致步骤为两步:

  1. 本地找出 Top K 特征,并基于投票筛选出可能是最优分割点的特征;

  2. 合并时只合并每个机器选出来的特征。

2.2.4 缓存优化

上边说到 XGBoost 的预排序后的特征是通过索引给出的样本梯度的统计值,因其索引访问的结果并不连续,XGBoost 提出缓存访问优化算法进行改进。

而 LightGBM 所使用直方图算法对 Cache 天生友好:

  1. 首先,所有的特征都采用相同的方法获得梯度(区别于不同特征通过不同的索引获得梯度),只需要对梯度进行排序并可实现连续访问,大大提高了缓存命中;

  2. 其次,因为不需要存储特征到样本的索引,降低了存储消耗,而且也不存在 Cache Miss的问题。

XGBoost,LightGBM,2023 AI,人工智能,机器学习,深度学习

2.3 与 XGBoost 的对比

本节主要总结下 LightGBM 相对于 XGBoost 的优点,从内存和速度两方面进行介绍。

2.3.1 内存更小

  1. XGBoost 使用预排序后需要记录特征值及其对应样本的统计值的索引,而 LightGBM 使用了直方图算法将特征值转变为 bin 值,且不需要记录特征到样本的索引,将空间复杂度从 O(2*#data) 降低为 O(#bin) ,极大的减少了内存消耗;

  2. LightGBM 采用了直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗;

  3. LightGBM 在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。

2.3.2 速度更快

  1. LightGBM 采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度;

  2. LightGBM 在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;

  3. LightGBM 采用了基于 Leaf-wise 算法的增长策略构建树,减少了很多不必要的计算量;

  4. LightGBM 采用优化后的特征并行、数据并行方法加速计算,当数据量非常大的时候还可以采用投票并行的策略;

  5. LightGBM 对缓存也进行了优化,增加了 Cache hit 的命中率。文章来源地址https://www.toymoban.com/news/detail-673550.html

到了这里,关于XGBoost,LightGBM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能】Embodied AI 技术解释:具身人工智能

    目录 【人工智能】Embodied AI 技术解释:具身人工智能 What embodied AI is ? How embodied AI works?

    2024年02月08日
    浏览(62)
  • 《2023人工智能发展白皮书》发布(118页)

    导读 nbsp; 本白皮书由七大部分组成。第一章人工智能产业链分析,描绘人工智能产业链全景图,并对产业链各环节进行深入分析;第二章人工智能行业环境,明确中国人工智能行业生命周期和竞争结构;第三章人工智能发展概况,阐述国内外人工智能行业发展现状;第四章人工智

    2024年02月09日
    浏览(52)
  • 2000-2023年省市县人工智能企业数量数据

    2000-2023年省市县人工智能企业数量数据 1、时间:2000-2023年7月 2、指标:所属年度、所属省份、所属城市、所属区县、人工智能企业数量(省人工智能企业数量、地级市人工智能企业数量、区县人工智能企业数量) 3、来源:整理自天眼查(特定搜索人工智能企业,并保留存续

    2024年02月07日
    浏览(51)
  • 2023 年 VSCode 的 5 大人工智能扩展

    在快节奏的软件开发世界中,一项创新脱颖而出,成为真正的游戏规则改变者:人工智能(AI)。凭借其卓越的功能,人工智能彻底改变了开发人员与代码交互的方式,重塑了现代编程的格局。 由于软件开发行业中新的生成AI技术的出现,Visual Studio Code Marketplace中已经有400多

    2024年02月09日
    浏览(56)
  • 2023什么电脑配置适合机器学习和人工智能

    机器学习和人工智能应用有多种类型——从传统的回归模型、非神经网络分类器和以 Python SciKitLearn 和 R 语言的功能为代表的统计模型,到使用 PyTorch 和 TensorFlow 等框架的深度学习模型. 在这些不同类型的 ML/AI 模型中,也可能存在显着差异。“最佳”硬件将遵循一些标准模式

    2023年04月24日
    浏览(98)
  • AI人工智能开发的5种最佳人工智能编程语言

    今天的AI程序员应该掌握多种语言,因为他们在跨学科的环境中工作,而不是在孤岛中工作。 虽然当前这一代人更喜欢Python,R,Java,Lisp,Prolog,Julia等 ,但前端开发人员必须了解JavaScript,Python和R的机器学习应用程序。一家知名组织的流程自动化首席开发人员了解R,Java,

    2023年04月16日
    浏览(51)
  • 【人工智能】AI 人工智能技术近十年演变发展历程

    过去十年对于人工智能(AI)领域来说是一段激动人心的多事之秋。对深度学习潜力的适度探索变成了一个领域的爆炸性扩散,现在包括从电子商务中的推荐系统到自动驾驶汽车的对象检测以及可以创建从逼真的图像到连贯文本的所有内容的生成模型。 在本文中,我们将沿着

    2024年02月09日
    浏览(64)
  • 【人工智能】Responsible AI 负责任的人工智能:人工智能安全和隐私的未来 The Future of AI Security and Privacy

      While AI development was mostly in the realm of research, practices such as sharing open datasets, publishing models publicly, and using any compute resources available all helped drive forward the state of the art. AI is now increasingly deployed in production environments in the commercial, healthcare, government, and defense sectors and Intel provides

    2023年04月09日
    浏览(48)
  • 人工智能ai写作系统,ai智能写作机器人

     人工智能AI大数据深度:基于伪原创算法,采用神经网络算法,在超过1535000篇文章中进行自动学习、聚合算法进行人工智能的创建,内容语义不变,媒体阿里、腾讯、百度均于日前在百家号内容创作者盛典上推出人工智能创作支撑平台创作大脑。 智能助手可以为人类创作者

    2024年02月10日
    浏览(67)
  • 【AI人工智能】从技术角度看,我们离超级人工智能还有多远?

    目录 前言 超级人工智能是什么? 一、计算能力 二、算法支持 三

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包