当前位置: 首页 > article >正文

机器学习——LightGBM

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库提供了分类和回归两大类接口,以及可以绘制模型特征重要性图

相关文章:

机器学习——LightGBM

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

linux 常见命令使用介绍

Linux 常见命令使用介绍 Linux 是一个功能强大的操作系统,其核心是命令行工具。掌握一些常用的 Linux 命令可以极大地提高工作效率。本文将详细介绍一些常见的 Linux 命令及其用法。 1. 文件与目录操作 ls - 列出文件和目录 # 查看当前目录下的所有文件和子目录&…...

故障识别 | 基于改进螂优化算法(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输入上…...

spring如何用三级缓存解决循环依赖问题

spring为何会出现循环依赖问题? 我们举个会产生循环依赖的例子,如下所示,可以看到AService类中依赖了BService类,同理呢,BService类中依赖了AService类,这就是所谓的循环依赖。 Component("aService&…...

【C#】`Task.Factory.StartNew` 和 `Task.Run` 区别

Task.Factory.StartNew 和 Task.Run 都是用来启动新任务的,但它们有一些关键区别,我们来一条一条讲清楚(配例子 结论)。 🆚 1. 语法和使用目的 对比项Task.RunTask.Factory.StartNew用途简化写法,用于启动…...

谈谈空间复杂度考量,特别是递归调用栈空间消耗?

空间复杂度考量是算法设计的核心要素之一,递归调用栈的消耗问题在前端领域尤为突出。 以下结合真实开发场景进行深度解析: 一、递归调用栈的典型问题 1. 深层次DOM遍历的陷阱 // 危险操作:递归遍历未知层级的DOM树 function countDOMNode…...

【2.项目管理】2.4 Gannt图【甘特图】

甘特图(Gantt)深度解析与实践指南 📊 一、甘特图基础模板 项目进度表示例 工作编号工作名称持续时间(月)项目进度(周)1需求分析3▓▓▓░░░░░░░2设计建模3░▓▓▓░░░░░░3编码开发3.5░░░▓▓▓▓░░…...

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

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

【项目】C++同步异步日志系统-包含运行教程

文章目录 项目介绍地址:https://gitee.com/royal-never-give-up/c-log-system 开发环境核心技术为什么需要日志系统同步日志异步日志 知识补充不定参宏函数__FILE____LINE____VA_ARGS__ C使用C使用左值右值sizeof...() 运算符完美转发完整例子sizeof...() 运算符获取…...

Yolo_v8的安装测试

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

Success is the sum of small efforts repeated day in and day out.

(翻译:"成功是日复一日微小努力的总和。") 文章内容: Title: The Silent Power of Consistency (标题翻译:《持续坚持的无声力量》) Consistency is the quiet force that turns asp…...

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

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

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

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

霸王茶姬小程序(2025年1月版)任务脚本

脚本用于自动执行微信小程序霸王茶姬的日常签到和积分管理任务。 脚本概述 脚本设置了定时任务(cron),每天运行两次,主要用于自动签到以获取积分,积分可以用来换取优惠券。 核心方法 constructor:构造函数,用于初始化网络请求的配置,设置了基础的 HTTP 请求头等。 logi…...

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

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

Windows 10更新失败解决方法

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

Windows下在IntelliJ IDEA 使用 Git 拉取、提交脚本出现换行符问题

文章目录 背景问题拉取代码时提交代码时 问题原因解决方案1.全局配置 Git 的换行符处理策略2.在 IntelliJ IDEA 中配置换行符3.使用 .gitattributes 文件 背景 在 Windows 系统下使用 IntelliJ IDEA 进行 Git 操作(如拉取和提交脚本)时,经常…...

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最新)...

Unity Shader 学习18:Shader书写基本功整理

1. Drawer [HideInInspector]:面板上隐藏[NoScaleOffset]:隐藏该纹理贴图的TillingOffset[Normal]:检查该纹理是否设为法线贴图[HDR]:将颜色类型设为高动态范围颜色(摄像机也要开启HDR才有效果)[PowerSlid…...

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…...

Python 装饰器(Decorators)

什么是装饰器? 装饰器(Decorator)本质上是一个 修改其他函数功能的函数。它的核心思想是:不修改原函数代码,动态添加新功能。比如: 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…...

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…...

蓝桥杯省模拟赛 阶乘求值

问题描述 给定 n,求 n! 除以 1000000007的余数。 其中 n! 表示 n 的阶乘,值为从 1 连乘到 n 的积,即 n!123…n。 输入格式 输入一行包含一个整数 n。 输出格式 输出一行,包含一个整数,表示答案。 样例输入 3样…...