机器学习——LightGBM

news2025/3/31 23:31:54

LightGBM(light gradient boosting machine,轻量梯度提升机)是对XGBoost进行改进的模型版本,其三者之间的演变关系为:GBDT-》XGBoost-》LightGBM依次对性能进行优化,尽管XGBoost已经很高效了,但是仍然有缺陷,故此时就得到一个更为高效的模型版本LightGBM

由于XGBoost的复杂度是由于对每个特征值进行预排序,遍历所有可能的分裂点计算增益,其排序算法的复杂度=特征数×特征分裂点的数量×样本数。对XGBoost优化主要就从特征数、特征分裂点、样本数三个方面进行优化

 其涉及的优化方面涉及算法和策略(机器学习的三要素:模型、策略和算法),以下是LightGBM采样的四个优化方法:

①直方图算法(Histogram-based Split,从特征分裂点的优化)

由于XGBoost通过对每个特征值进行排序,遍历所有可能的分裂点计算增益,其计算复杂度高(特征数×特征分裂点数×样本量),内存消耗较大。其优化的方式是将连续特征离散化转化为直方图的bins,仅需遍历所有的bins而非所有的样本来寻找最优特分裂点。使得其复杂度降低到O(特征数×bins数×样本量),同时还可以通过直方图差加速(父结点直方图剪去子结点直方图得到另外一个子结点的直方图),其速度提升十倍,内存消耗降低到1/10

知识补充:

在机器学习中,bins(即分箱或者区间)指的是将连续型特征(年龄、收入、温度等)的数值范围离散化为多个区间,对每个区间进行整数编号即划分区间

②单边梯度抽样(Gradient-based One-Side Sampling,从对应样本量的优化)

这个单边梯度抽样是分为对高梯度样本和低梯度样本进行分别抽样,使得在减少30%~50%的数据量时,几乎不损失精度。这种方法避免了传统随机采样过程中可能丢失重要样本信息

核心思想分为三个 :

A.保留高梯度样本:选取梯度绝对值最大的前a%样本,

B.随机抽样低梯度样本:从剩余样本中随机抽取b%,并为其梯度乘以(1-a)/b作为补偿分布偏移。一般a和b的默认取值为0.2和0.1

C.仅用抽样数据计算分裂增益值,降低原本使用全部样本进行增益计算的计算复杂度。

其分裂增益计算的数学表达式:

知识补充:

梯度在GBDT中代表样本的预测难度,即梯度的绝对值越大,样本越难拟合

③互斥特征捆绑算法(Exclusive Feature Bunding,从特征数上优化)

高维特征中,许多特征是互斥的(如“用户性别”和“怀孕次数”不会同时为非零值),对于这种互斥或者冲突最少的特征进行捆绑,将捆绑的特征映射到同一个bin范围(如原特征A的bin范围是0-10,特征B的bin范围为11-20);那么怎么识别这种互斥或者冲突最少的特征呢?可以选择使用贪心算法和图着色算法获取冲突最少特征。那么如何定义冲突最少呢?此时可以定义一个捆绑特征冲突率,当该冲突率低于阈值(max_conflict_rate)时,即可对其特征进行捆绑。

知识补充1:

(如“用户性别”和“怀孕次数”不会同时为非零值)这一内容怎么理解?

对于性别为男性的用户,怀孕次数几乎总是 0(除非特殊场景)。

对于性别为女性的用户,怀孕次数可能为 0、1、2 等。如果在一些场景为>0的样本

结论:在同一行数据中,这两个特征不会同时为非零值(男性怀孕次数为0,女性怀孕次数可能为非零)。因此它们是互斥特征(如果其为男性,那么其怀孕次数自动为0;而怀孕次数不为0,一定是女性,在这种场景下两个特征就可以视为单一特征)

知识补充2:

捆绑特征选择算法(图着色算法):将所有特征视为图的各个顶点,用一条边连接两个不互相独立的特征,边的权重则表示两个相连接的特征的冲突比率(max_conflict_rate),通过阈值比较判定两点之间是否需要被涂上同一个颜色。但是这样会存在一个问题,特征捆绑后怎么进行取值的问题?比如一个特征A的取值范围是[20,40),另外一个特征B的取值范围为[30,60),此时特征捆绑后不做什么特殊处理后,就会得到取值范围为[20,60],那么我现在有一个值为30的特征值,我该放进A特征中,还是放进B特征中呢?故需要对不互相独立的特征进行一个偏置处理,即比如对特征B的取值范围加上一个10的偏置值,使得B特征的取值范围变成[40,70],此时就可以对里面的特征进行很好的区分了

④leaf-wise生长策略(带有深度限制叶子结点生长,即有max_depth作为叶子结点生长限制条件,为了避免出现XGBoost的过拟合的问题)

XGBoost的Level_wise策略:逐层分裂所有叶子结点,避免过拟合但产生冗余分裂(出现某些增益低的结点无需分裂),故其产生的是一个对称树。

LightGBM的leaf_wise策略:只分裂增益最大的叶子,生成不对称树,并通过设置max_depth来防止过拟合。故其产生的是一个不对称树

综上,LightGBM较XGBoost更适合处理大规模(百万级别以上的样本)、高维特征、实时性高的数据样本;而对于小规模本地上运行的样本、样本需要精细调制的、需要强解释的模型,建议使用XGBoost框架。

幸运的是,LightGBM作为工业级的框架,其已经封装成库,直接可以在pycharm中通过pip install lightgbm的指令进行安装。Lightgbm库提供了分类和回归两大类接口,以及可以绘制模型特征重要性图

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

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

相关文章

故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码

基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中,机械设备的稳定运行…

[已解决]服务器CPU突然飙高98%----Java程序OOM问题 (2024.9.5)

目录 问题描述问题排查问题解决参考资料 问题描述 业主单位服务器自8月29日晚上21:00起CPU突然飙高至98%,内存爆满,一直到9月5日: 问题排查 ①执行 top 命令查看Java进程PID top②执行top -Hp PID 命令查看具体的线程情况 top -Hp 3058输入上…

Ai工作流工具有那些如Dify、coze扣子等以及他们是否开源

Dify (https://difycloud.com/) 核心定位:专业级 LLM 应用开发平台,支持复杂 AI 工作流构建与企业级管理。典型场景:企业智能客服、数据分析系统、复杂自动化流程构建等。适合需要深度定制、企业级管理和复杂 AI 逻辑…

Yolo_v8的安装测试

前言 如何安装Python版本的Yolo,有一段时间不用了,Yolo的版本也在不断地发展,所以重新安装了运行了一下,记录了下来,供参考。 一、搭建环境 1.1、创建Pycharm工程 首先创建好一个空白的工程,如下图&…

软件兼容性测试的矩阵爆炸问题有哪些解决方案

解决软件兼容性测试中的矩阵爆炸问题主要有优先级划分、组合测试方法、自动化测试技术等方案。其中,组合测试方法尤其有效。组合测试通过科学的组合算法,能够显著降低测试用例的数量,同时保持较高的测试覆盖率,例如正交实验设计&a…

嵌入式学习(32)-TTS语音模块SYN6288

一、概述 SYN6288 中文语音合成芯片是北京宇音天下科技有限公司于 2010年初推出的一款性/价比更高,效果更自然的一款中高端语音合成芯片。SYN6288 通过异步串口(UART)通讯方式,接收待合成的文本数据,实现文本到语音(或 TTS 语音)的转换。宇音天下于 2002…

从零到一:打造顶尖生成式AI应用的全流程实战

简介 生成式AI正以前所未有的速度改变我们的世界,从内容创作到智能客服,再到医疗诊断,它正在成为各行各业的核心驱动力。然而,构建一个高效、安全且负责任的生成式AI系统并非易事。本文将带你从零开始,逐步完成一个完整…

Windows 10更新失败解决方法

在我们使用 Windows 时的时候,很多时候遇到系统更新 重启之后却一直提示“我们无法完成更新,正在撤销更改” 这种情况非常烦人,但其实可以通过修改文件的方法解决,并且正常更新到最新版操作系统 01修改注册表 管理员身份运行注…

ubuntu24.04.2 NVIDIA GeForce RTX 4060笔记本安装驱动

https://www.nvidia.cn/drivers/details/242281/ 上面是下载地址 sudo chmod x NVIDIA-Linux-x86_64-570.133.07.run # 赋予执行权限把下载的驱动复制到家目录下,基本工具准备,如下 sudo apt update sudo apt install build-essential libglvnd-dev …

如何快速下载并安装 Postman?

从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作,帮助初学者快速上手。 Postman 下载及安装教程(2025最新)

1.1 计算机网络的概念

首先来看什么是计算机网络,关于计算机网络的定义并没有一个统一的标准,不同的教材有 不同的说法(这是王道书对于计算机网络的定义),我们可以结合自己的生活经验去体会这个 定义。 可以用不同类型的设备去连接计算机网络…

Blender绘图——旋转曲线(以LCP与RCP为例)

最近在做左旋圆偏振光(LCP)与右旋圆偏振光(RCP)的研究,因此需要画出他们的图,接下来我就介绍一下用Blender怎么去画LCP与RCP。 首先你需要下载Blender软件,网上直接能搜到,图标如下…

Spring与Mybatis整合

持久层整合 1.Spring框架为什么要与持久层技术进行整合 JavaEE开发需要持久层进行数据库的访问操作 JDBC Hibernate Mybatis进行持久层开发存在大量的代码冗余 Spring基于模板设计模式对于上述的持久层技术进行了封装 2.Mybatis整合 SqlSessionFactoryBean MapperScannerConfi…

JDBC FetchSize不生效,批量变全量致OOM问题分析

背景 一个简单的基于 JDBC 采集数据库表的功能,当采集 Postgre SQL 某表,其数据量达到 500万左右的时候,程序一启动就将 JVM 堆内存「6G」干满了。 问题是程序中使用了游标的只前进配置,且设置了 fetchSize 属性: q…

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗 docker - compose up - d 是一个用于管理 Docker 容器的命令,具体含义如下: 命令含义: up:用于创建、启动并运行容器,会根据 docker - compose.yml 文件中定义的服务配置来操作。-d:表示以“分离模式”(det…

A2 最佳学习方法

记录自己想法的最好理由是发现自己的想法,并将其组织成可传播的形式 (The best reason for recording what one thinks is to discover what one thinks and to organize it in transmittable form.) Prof Ackoff 经验之谈: 做培训或者写文章&#xff…

StarRocks 中 CURRENT_TIMESTAMP 和 CURRENT_TIME 分区过滤问题

背景 本文基于Starrocks 3.3.5 最近在进行Starrocks 跑数据的时候,发现了一个SQL 扫描了所有分区的数据,简化后的SQL如下: select date_created from tableA where date_createddate_format(current_time(), %Y-%m-%d %H:%i:%S) limit 20其…

4、网工软考—VLAN配置—hybird配置

1、实验环境搭建: 2、实验过程 SW1: 先创建vlan2和vlan3 [Huawei-Ethernet0/0/2]port link-type hybrid //hybird端口 [Huawei-Ethernet0/0/2]port hybrid pvid vlan 2 [Huawei-Ethernet0/0/2]port hybrid untagged vlan 10 //撕掉vlan10的标签 …

Chrome 开发环境快速屏蔽 CORS 跨域限制!

Chrome 开发环境快速屏蔽 CORS 跨域限制【详细教程】 ❓ 为什么需要临时屏蔽 CORS? 在前后端开发过程中,我们经常会遇到 跨域请求被浏览器拦截 的问题。例如,你在 http://localhost:3000 调用 https://api.example.com 时,可能会…

ubuntu22.04 ROS2humble 路径文件

ROS2humble 路径文件 /opt/ros/humble/include/opt/ros/humble/lib/opt/ros/humble/share 下载ros2之后会有下面的文件,在/opt/ros/humble下 /opt/ros/humble/include C/C 头文件(.h, .hpp) /opt/ros/humble/lib 作用: 存放 编译生成的二…