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

news2024/11/27 10:29:34

目录

  • 1、文章贡献
  • 2、直方图算法Histogram(减少分裂点)
  • 3、基于梯度的单边采样算法GOSS(减少样本量)
  • 4、互斥特征捆绑算法EFB(减少特征)

在这里插入图片描述

在上篇中提到,XGBoost算法的局限是它在寻找最优分裂点算法中需要预排序以及遍历数据集,比较消耗内存和时间,而这篇中的LightGBM则是基于该局限的一种改进。

不熟悉XGBoost的小伙伴可以看看这篇笔记 论文解读14——XGBoost:A Scalable Tree Boosting System

1、文章贡献

提出了一个轻量级的梯度提升算法LightGBM,是GBDT算法的另一个实现,针对XGBoost的局限,在保持精确度的情况下对内存和效率上进行了优化。

LightGBM改进点:

  • 采用直方图算法Histogram解决分裂点数过多的问题。
  • 采用基于梯度的单边采样算法GOSS解决样本量过多的问题。
  • 采用互斥特征捆绑算法EFB解决特征过多的问题。

总的来说:LightGBM = XGBoost + Histogram + EFB

2、直方图算法Histogram(减少分裂点)

对特征进行分桶操作,并计算每个桶中的特征数以及梯度求和,寻找最优分裂点。此时需要遍历的分裂点数等于桶数减1,相比分桶前遍历的点数少很多,减少了计算量,且占用更少的内存。
在这里插入图片描述

内存占用少:

  • 直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用 8位整型存储就足够了,内存消耗可以降低为原来的1/8。也就是说XGBoost需要用 32位的浮点数去存储特征值,并用 32 位的整形去存储索引,而 LightGBM只需要用 8 位去存储直方图,内存相当于减少为 1/8。

计算代价小:

  • 预排序算法XGBoost每遍历一个特征值就需要计算一次分裂的增益,而直方图算法LightGBM只需要计算 k 次,时间复杂度从O(#data * #feature)降低到O(k * #feature)

另一个优化是直方图作差加速

一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到,在速度上可以提升一倍。(在实际构建过程中,可以先计算直方图小的叶子节点,然后利用直方图做差来获得直方图大的叶子节点,以减少计算代价)
在这里插入图片描述

在叶子生长策略上

  • XGBoost采用 Level-wise按层生长策略,即不管这个叶子分裂后增益怎么样,每一层叶子都会分裂过去,带来很多没必要的计算开销。
    在这里插入图片描述
  • LightGBM采用Leaf-wise按叶子生长的策略,每次在当前待分裂的所有叶子中找到增益最大的进行分裂,可以避免增益较低的叶子不必要的分裂,且增加了最大深度的限制,在提高效率的同时防止过拟合。
    在这里插入图片描述

3、基于梯度的单边采样算法GOSS(减少样本量)

将样本梯度的绝对值按大小排序,对前 a% 梯度较大的样本以及后 (1-a)% 梯度较小的样本里随机选择的 b% 进行保留来有效计算增益,在减少数据量的同时保证了精度。

跟一般的随机下采样相比:

  • GOSS算法考虑了样本的梯度信息对计算增益的影响,减少了梯度小的样本,且没有改变原始分布。
    在这里插入图片描述
  • 实际的方差增益:
    在这里插入图片描述
  • GOSS得到的方差增益:
    在这里插入图片描述
    其中A表示前 a% 个梯度大的样本集,B表示后 **(1-a)%**中随机 b% 个梯度小的样本集。

4、互斥特征捆绑算法EFB(减少特征)

通过将两两互斥(不同时为非零值)的特征捆绑在一起来减少特征数,有效避免零特征值不必要的计算,提高计算效率。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AidLux AI应用案例悬赏选题 | 电路板表面瑕疵检测

AidLux AI 应用案例悬赏征集活动 AidLux AI 应用案例悬赏征集活动是AidLux推出的AI应用案例项目合作模式,悬赏选题将会持续更新。目前上新的选题涉及泛边缘、机器人、工业检测、车载等领域,内容涵盖智慧零售、智慧社区、智慧交通、智慧农业、智能家居等…

正点原子裸机开发之C语言点灯程序

一. 简介 本文针对 IMX6ULL 的裸机开发的(即不带Linux操作系统的开发)。 主要分两部分的工作: 1. 配置 C语言运行环境 2. C 语言编写及运行 二. 配置C语言运行环境 配置 C 语言运行环境的工作分 三部分。如下: 1. 设置…

Nginx配置实例-反向代理案例一

实现效果:使用nginx反向代理,访问 www.suke.com 直接跳转到本机地址127.0.0.1:8080 一、准备工作 Centos7 安装 Nginxhttps://liush.blog.csdn.net/article/details/125027693 1. 启动一个 tomcat Centos7安装JDK1.8https://liush.blog.csdn.net/arti…

YonBuilder 应用构建全新入门指南

用友开发者中心以 YonBuilder 低代码开发为核心,提供可视化 低代码 全代码的一站式开发能力,企业组织和个人开发者可实现业务应用的快速开发。YonBuilder 基于用友 BIP 强大的中台支撑能力,在元数据驱动和运行框架的统一模型架构下&#xf…

Ethercat学习-GD32以太网学习

文章目录1、GD32F4以太网简介2、以太网模框图简介3、以太网主要模块介绍SMI接口RMII接口与MII接口DMA控制器4、以太网配置流程5、其他1、GD32F4以太网简介 GD32F4系列以太网模块包含10/100Mbps以太网MAC,数据的收发都通过DMA进行操作,支持MII&#xff0…

一个C#开发的开源的快速启动工具

更多开源项目请查看:一个专注推荐.Net开源项目的榜单 平常计算机安装软件比较多、或者工作涉及的文件比较多,很多人都会直接放在桌面,一方面不安全,还不容易查找,这时候我们往往,都会放在其他硬盘内&#x…

springboot项目yml文件中${}的使用

作用 项目启动时可以灵活的通过修改环境变量来替换配置中的值,如果没有传该环境变量时,就是用默认值; 格式:${自定义参数名:默认值} 代码举例,已开启应用的端口号为例: server:port: ${SERVER_PORT:960…

AI+人类,实现高效网络安全

导语 聊天机器人和生成式人工智能(如 ChatGPT)突然成为主流让很多人感到担忧。很多人开始担忧,人工智能取代人的时代已经到来。 幸运的是,事实并非如此。 更有可能的情况是,人类将与 AI 合作创建工作角色的混合模型。…

Mercedes-Benz EDI需求分析

作为奔驰的仓储服务提供商,企业A需要借助EDI实现仓储流程的自动化。奔驰将车存放在企业A处,由企业A将货物提供给4S店。整体业务流程中将通过EDI系统来进行业务数据的传输,今天的文章主要从奔驰EDI需求概览以及EDI项目业务流程两方面展开介绍。…

646. 最长数对链——【Leetcode每日刷题】

646. 最长数对链 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i][lefti,righti]pairs[i] [left_i, right_i]pairs[i][lefti​,righti​] 且lefti<rightileft_i < right_ilefti​<righti​。 现在&#xff0c;我们定义一种 跟随 关系&#xff…

MySQL查询索引原则

文章目录 等值匹配原则最左前缀匹配原则范围查找规则等值匹配+范围查找Order By + limit 优化分组查询优化总结MySQL 是如何帮我们维护非主键索引的等值匹配原则 我们现在已经知道了如果是【主键索引】,在插入数据的时候是根据主键的顺序依次往后排列的,一个数据页不够就会分…

保姆级使用PyTorch训练与评估自己的MobileViT网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址&#xff1a;https://github.com/Fafa-DL/Awesome-Backbones 操作教程&#xff1a;https://www.bilibili.co…

2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建

去年公司由于不断发展&#xff0c;内部自研系统越来越多&#xff0c;所以后来搭建了一个日志收集平台&#xff0c;并将日志收集功能以二方包形式引入自研系统&#xff0c;避免每个自研系统都要建立一套自己的日志模块&#xff0c;节约了开发时间&#xff0c;管理起来也更加容易…

【UE4 RTS游戏】07-控件蓝图显示当前游戏时间

效果步骤新建一个文件夹&#xff0c;命名为“Interfaces”&#xff0c;在该文件夹内新建一个蓝图接口&#xff0c;命名为“I_HUD”打开“Interfaces”&#xff0c;默认的函数名改为“SetClock”&#xff0c;添加一个输入&#xff0c;命名为“Time”&#xff0c;整数数组类型。添…

一套Java语言的云HIS医院信息管理系统SaaS源码

这是一套优秀的云His医院管理系统&#xff0c;它区别于普通的HIS系统&#xff0c;它通过云端管理整个HIS业务 一、HIS使用技术框架&#xff1a;自主研发&#xff0c;系统完全开源。 1、前端&#xff1a;AngularNginx 2、后台&#xff1a;JavaSpring&#xff0c;SpringBoot&…

AidLux AI 应用案例悬赏选题|行车安全辅助

AidLux AI 应用案例悬赏征集活动 AidLux AI 应用案例悬赏征集活动是AidLux推出的AI应用案例项目合作模式&#xff0c;悬赏选题将会持续更新。目前上新的选题涉及泛边缘、机器人、工业检测、车载等领域&#xff0c;内容涵盖智慧零售、智慧社区、智慧交通、智慧农业、智能家居等…

YOLOv5中添加SE模块详解——原理+代码

目录一、SENet1. 设计原理2. SE Block2.1 Squeeze:Global Information Embedding2.2 Excitation:Adaptive Recalibration3. SE-Inception and SE-ResNet二、YOLOv5中添加SENet1.修改common.py2.修改yolo.py3.修改yolov5s.yaml参考文章一、SENet 论文地址&#xff1a;Squeeze-a…

UI设计 ,这7个网站,真的太好用了。

下面这几个UI设计网站&#xff0c;设计师们一定要收藏起来&#xff0c;每天坚持浏览这些网站&#xff0c;可以快速的提升你的UI设计水平。 1、菜鸟图库 https://www.sucai999.com/searchlist/UIsheji----all-0-0.html?vNTYxMjky 菜鸟图库提供了超多免费设计素材&#xff0c;在…

logistic回归的参数梯度更新方法的个人理解

logistic回归参数更新看了几篇博文&#xff0c;感觉理解不透彻&#xff0c;所以自己写一下&#xff0c;希望能有更深的理解。logistic回归输入是一个线性函数Wxb\boldsymbol{W}\boldsymbol{x}\boldsymbol{b}Wxb&#xff0c;为了简单理解&#xff0c;考虑batchsize为1的情况。这…

ChatGPT的影响力和未来发展

ChatGPT是一种基于深度学习的自然语言处理技术&#xff0c;它是由OpenAI开发的一种语言模型。ChatGPT作为一个大型语言模型&#xff0c;可以在很多方面对程序职业产生影响。值得注意的是&#xff0c;ChatGPT和其他语言模型一样&#xff0c;只是一种技术工具&#xff0c;它的应用…