LightGBM 的完整解释 - 最快的梯度提升模型

news2024/12/23 21:03:30

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

目录

1. 基于梯度的单侧采样(GOSS)

2. 基于直方图的树节点分裂

3. 分类特征的最优分割

4. 独家功能捆绑

5. Leaf-wise 树生长策略

6. 并行优化

7.总结


LightGBM是微软于2016年开发的梯度提升决策树模型(GBDT),与其他GBDT模型相比,LightGBM的最大特点是训练效率更快、准确率更高。

        LightGBM 与一般的 Gradient Boosting Decision Tree 模型在结构上没有根本的区别,但通过以下特殊技术,LightGBM 使其训练速度更快。

  1. 基于梯度的一侧采样(GOSS)
  2. 树节点分裂中基于直方图的最佳值搜索
  3. 分类特征的最佳分割
  4. 独家功能捆绑
  5. 叶向树生长策略
  6. 并行优化

1. 基于梯度的单侧采样(GOSS)

        经典的基于树的梯度提升(GBDT)训练是一个重复过程,用于训练新树以适应所有训练集实例上先前树集的预测误差。(预测误差是所有训练集实例上的损失函数梯度)

因此,默认情况下,GBDT 使用所有训练集实例来训练其集合中的每棵树。

        针对这一点,LightGBM引入了GOSS,其中我们只需要使用部分训练集来训练每个集成树。GOSS 的直觉是

  1. 具有大梯度的训练实例意味着该实例具有较大的当前预测误差,并且应该是适合下一个集成树的主要目标
  2. 小梯度的训练实例意味着该实例当前的预测误差相对较小,不需要下一个集成树过多担心,因此我们可以以某种概率丢弃它。

            一般来说,GOSS的主要思想是,在训练下一个集成树之前,我们保留梯度较大的训练实例,并丢弃一些梯度较小的训练实例。

下图为GOSS算法。

所有训练实例均按梯度排序,a表示大梯度实例的采样百分比,b表示小梯度实例的采样百分比。

 

通过使用 GOSS,我们实际上减少了训练下一个集成树的训练集的大小,这将使训练新树的速度更快。

2. 基于直方图的树节点分裂

在寻找最佳特征值来分割树节点时,LightGBM使用特征值直方图,并尝试所有直方图bin值,而不是尝试所有可能的特征值,因此可以减少寻找最佳特征吐出值的时间和计算量。顺便说一下,LightGBM 的分割标准是减少从父级到子级的梯度方差。

例如,给定下面的年龄特征,将直方图离散特征值放入不同的范围箱中,因此我们可以使用像Age⩽30,Age⩽40,,,,Age⩽100这样的吐槽标准,而不是尝试像Age这样的所有可能的年龄值⩽31、年龄⩽32 等

                           

用bin来替换原始数据相当于增加正则化,bin的数量决定了正则化的程度。bin 越小,惩罚越严重,欠拟合的风险越高。

同样在树分裂场景中,对于给定的特征,直方图是可加的

父节点直方图 = 左子直方图 + 右子直方图

因此,在计算子直方图时,我们只需要计算一个子直方图(选择较小尺寸的子直方图),另一子直方图是父直方图减去计算得到的直方图。

3. 分类特征的最优分割

通常,在处理树节点分裂中的分类特征时,我们总是使用One Vs Rest作为节点分裂规则,例如分裂条件是“Weather = Sunny” vs “All other Weather (Rainy, Cloudy, Snowy etc)”。一般来说,这一“一对一”策略的问题是

  1. 它往往会在子节点中生成不平衡的数据点分配(例如左子节点比右子节点分配更多的数据点)并且需要增长得很深才能获得良好的准确性
  2. 由于需要生长很深的树,需要多次节点分裂,所以建树效率很低。

受这些问题的启发,LightGBM 采用了如下多对多策略。

对于给定的分类特征

  1. 对于特征的每个类别,计算平均值 Sum(y)/Count(y)
  2. 按平均值对所有类别进行排序(如下图所示)。
  3. 从最低平均值到最大平均值枚举分割值,以找到最佳分割值。分裂值将所有类别分为两部分(类别均值小于或大于分裂值),这就是节点分裂条件。

4. 独家功能捆绑

EFB旨在通过合并特征来减少特征,具体来说就是合并互斥的特征,这些特征很少同时取非零值。

LightGBM提供了以下两种算法来实现

  1. 从训练集中识别互斥的特征包
  2. 合并功能包并为该包分配一个值

下面是一个 EFB 示例,显示了特征合并的结果。

在该示例中,最大冲突计数K=2,表明根据EFB算法,原来的5个特征可以减少到3个特征。

5. Leaf-wise 树生长策略

LightGBM 放弃了大多数 GBDT 工具所使用的 level-wise 决策树生长策略,而使用了具有深度限制的 leaf-wise 算法。

Leaf-wise策略中,每次从所有叶子中,找到分裂增益最高的叶子,然后分裂并循环。

在上面的树生长过程中,绿叶节点是分裂增益最高的节点,因此对其进行分裂,然后重新评估以找到下一个绿叶节点。

leaf-wise的好处是,对于每一次节点分裂,我们总是能为树带来最高的增益,因此它比level-wise更有效地生长树。但我们需要添加树深度和一些其他限制以避免过度拟合。

6. 并行优化

为了处理超大型数据集,LightGBM引入了分布式过程来并行计算特征直方图和最佳分割特征值。

LightGBM支持两种并行策略——特征并行和数据并行

特征并行算法

训练数据被垂直(列或特征)分割并分配到不同的工作计算机,以计算分配的特征的局部直方图和局部最佳分割,然后从所有工作器输出中全局选择最佳分割。

数据并行算法

训练数据被水平(行)分割并分配到不同的工作计算机,根据分配的训练子集计算所有特征的局部直方图,然后合并来自所有工作计算机的局部直方图的所有特征直方图。

LightGBM还对数据并行算法进行了进一步的优化,其思想是每个worker在本地选择前K个最佳分割特征,然后在全局投票选出顶级特征。

一旦获得顶部特征,我们只需要从所有工人本地直方图中合并顶部特征直方图。

7.总结

上述所有 LightGBM 创新技术的目的都是为了使其训练速度更快,它们使 LightGBM 在以下方面表现出色:

  1. 训练效率快
  2. 内存使用率低
  3. 高精度
  4. 并行学习
  5. 处理大规模数据的能力

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

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

相关文章

磁盘管理(初始化,引导块,坏块管理,固态硬盘)

目录 1.磁盘初始化2.引导块3.坏块的管理1.坏块检查2.坏块链表3.扇区备用 4.固态硬盘(SSD)1.原理2.组成3.读写性能特性4.与机械硬盘相比5.磨损均衡技术 1.磁盘初始化 ①进行低级格式化(物理格式化),将磁盘的各个磁道划分…

Git基础 | 原理、配置、用法、分支 合并

目录 1 git初步了解 1.1 git的安装 1.2 git原理模型 1.3 git基础配置 1.4 git基础用法 1 将文件加入暂存区 2 查看当前的git仓库状态 3 删除文件 4 commit 将暂存区文件加入本地git版本仓库 5 查看提交历史 更改 2 分支 2.1 创建分支 2.2 查看分支 2.3 切换分支 …

vue+uniapp快餐店微信扫码点餐订餐系统 微信小程序

点餐是商家的核心,是必不可少的一个部分。在餐饮的整个服务行业中,顾客担负着最重要的角色。为满足如今日益复杂的管理需求,各类微信小程序也在不断改进。本课题所设计的快餐店微信扫码点餐小程序,使用微信开发者与java语言进行开…

省市区三级联动查询redis(通过python脚本导入数据)

最近工作有一个工作需求是实现省市区联动,点击省下拉框,选中一个省,然后再选市,最后选区,当然最重要的首先自然是数据了,没数据怎么测试接口,我数据是在 https://hxkj.vip/demo/echartsMap/ 这里…

大数据前置学习基础准备(非常详细!)

1.需要的环境 需要3台服务器,centos7 为集群,全部设置为nat模式 2.整个环境大体 1.设置三台Linux虚拟机的主机和固定ip 2.在Linux系统以及本机系统中配置了主机名映射 3.配置了三台服务器之间root用户的ssh免密互通 4.安装配置JDK环境 5.关闭防火墙和SEL…

宝塔安装mongodb插件失败的解决办法

安装时始终不成功。 进入控制台进行安装 /www/server/php/71# pecl install mongodb WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update pecl/mongodb requires PHP (version > 7.2.0, …

2317.操作后的最大异或和

非常好的一个位运算推公式题目 首先num[i]^x可以知道 这里可以变成任意一个数字 又有num[i]&上上面的数字 所以我们可以扣掉任意位的1把它变成0 答案让我们求异或和 所以只要这一位有1 答案的这一位就有1 我们发现这就是一个按位或运算 class Solution { public:int maxi…

C#__简单了解XML文档

/* XML(可扩展标记语言):用于传输和存储数据 XML文档:树结构;包含根元素 XML元素:从开始标签到结束标签的部分 XML语法规则: 1、所有XML元素都必须有结束标签 …

GAMP源码阅读(中)伪距单点定位 SPP

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、SPP 解算1、spp():单点定位主入口函数2、estpos()3、estpose_()4、valsol():GDOP和卡方检验结果有效性 二、卫星位置钟…

BraTS2021脑肿瘤分割实战

Brain Tumor Segmentation (BraTS) Challenge 2021 Homepage github项目地址 brats-unet: UNet for brain tumor segmentation BraTS是MICCAI所有比赛中历史最悠久的,到2021年已经连续举办了10年,参赛人数众多,是学习医学图像分割最前沿的…

【ChatGPT 01】ChatGPT基础科普

1. 从图灵测试到ChatGPT 1950年,艾伦•图灵(Alan Turing)发表论文**《计算机器与智能》( Computing Machinery and Intelligence),提出并尝试回答“机器能否思考”这一关键问题。在论文中,图灵提出了“模仿游戏”&…

2.2 消元法的概念

一、消元法介绍 消元法(elimination)是一个求解线性方程组的系统性方法。下面是使用消元法求解一个 2 2 2\times2 22 线性方程组的例子。消元之前,两个方程都有 x x x 和 y y y,消元后,第一个未知数 x x x 将从第…

Websocket传递JWT令牌

在访问带有[Authorize]的方法的时候,需要前端通过自定义报文头的形式将JWT令牌传递给后端进行验证,否则是不能访问带有[Authorize]的方法。 [Authorize]是用于限制对web应用程序中某些操作或控制器的访问。当[授权]属性应用于操作或控制器时,…

【Linux】多路IO复用技术①——select详解如何使用select在本地主机实现简易的一对多服务器(附图解与代码实现)

这一篇的篇幅可能有点长,但真心希望大家能够静下心来看完,相信一定会有不小的收获。那么话不多说,我们这就开始啦!!! 目录 一对一服务器中的BUG 如何实现简易的一对多服务器 实现简易一对多服务器的大体…

Python超入门(7)__迅速上手操作掌握Python

# 31.类 class Point:# 构造函数def __init__(self, x, y, z):self.x xself.y yself.z z# 自定义函数def move(self):print("move")def draw(self):print("draw")# 定义一个Point类的实例point1 # 注意:新建实例的参数要与构造函数一致 poi…

一天下来一个微信号能添加多少个微信好友?

在即时通讯领域,微信的用户量处于领先的地位。据了解微信及WeChat合并的月活跃账户数已超13亿。远远超越QQ的移动端5.71亿的月活跃用户数量。 那么,微信的用户数量这么多,一天可以加多少好友呢? 新号和不活跃的号 01 微信新号是…

【计算机网络】分层模型和应用协议

网络分层模型和应用协议 1. 分层模型 1.1 五层网络模型 网络要解决的问题是:两个程序之间如何交换数据。 四层?五层?七层? 2. 应用层协议 2.1 URL URL(uniform resource locator,统一资源定位符&#…

ZYNQ连载06-EasyLogger日志组件

ZYNQ连载06-EasyLogger日志组件 1. EasyLogger介绍 Easylogger仓库 2. EasyLogger移植 EasyLogger移植比较简单,在Vitis中移植时主要注意路径问题,然后适配下接口即可: void elog_port_output(const char *log, size_t size) {printf(&…

密码学基础

密码学总览 信息安全面临的危险与应对这些威胁的密码技术: 关于上图中的威胁,这里在简单的说明: 窃听:指的是需要保密的消息被第三方获取。篡改:指的是消息的内容被第三方修改,达到欺骗的效果。伪装&…

k8s命令式对象管理、命令式对象配置、声明式对象配置管理资源介绍

目录 一.kubernetes资源管理简介 二.三种资源管理方式优缺点比较 三.命令式对象管理介绍 1.kubectl命令语法格式 2.资源类型 (1)通过“kubectl api-resources”来查看所有的资源 (2)每列含义 (3)常…