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

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

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

相关文章

内网服务器无法通过公网地址访问映射到公网的内网服务

内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题,在这里做下记录,希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示,服务器1和服务器2在同一内网,网段均为1…

python每日十题(13)

一般把计算机完成一条指令所花费的时间称为一个指令周期。指令周期越短,指令执行就越快。本题答案为D选项。 顺序程序具有顺序性、封闭性和可再现性的特点,使得程序设计者能够控制程序执行的过程(包括执行顺序、执行时间),对程序执…

Python 装饰器(Decorators)

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

uWebSockets开发入门

一、常用C++ WebSocket开源库 一些常用的 C++ WebSocket 开源库,它们支持 WebSocket 协议的实现,适用于客户端或服务器端开发。 1. Boost.Beast (推荐) 特点:基于 Boost.Asio 的高性能库,支持 HTTP/WebSocket,属于 Boost 官方库的一部分,稳定且跨平台。 适用场景:需要高…

多智能体功能分化的核心优势是什么:提升效率,查漏补缺

多智能体功能分化的核心优势是什么:提升效率,查漏补缺 在于通过分工协作提升整体效率、灵活性和鲁棒性。 1. 提升效率与专业性 原理:单一智能体无需处理全流程,通过专业化分工减少冗余计算和决策延迟。 示例: 自动驾驶系统: 感知智能体:专门处理摄像头、激光雷达等传…

项目复盘:websocket不受跨域限制的原理

主要还是因为: 1、WebSocket 是独立于 HTTP 的应用层协议,通过 HTTP 建立连接后,完全脱离 HTTP 语义约束。这意味着 不受 HTTP 同源策略限制 不需要预检请求 不依赖 CORS 头机制 2、建立连接时的握手请求仍使用 HTTP 格式,但…

COMPASS:通过残差强化学习和技能合成实现跨具身移动策略

25年2月来自 Nvidia、UC Berkeley 和 UT Austin 的论文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 随着机器人越来越多地部署在不同的应用领域,可泛化的跨具身移动策略变得越来越重要。虽然经典的移动栈已被证明在特定…

无人机,雷达定点飞行时,位置发散,位置很飘,原因分析

参考: 无人车传感器 IMU与GPS数据融合进行定位机制_gps imu 组合定位原始数-CSDN博客 我的无人机使用雷达定位,位置模式很飘 雷达的更新频率也是10HZ, 而px飞控的频率是100HZ,没有对两者之间的频率差异做出处理 所以才导致无人…

学习threejs,使用Sprite精灵、SpriteMaterial精灵材质

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Sprite1.1.1 ☘️代码…

外星人入侵(python设计小游戏)

这个游戏简而言之就是操作一个飞机对前方的飞船进行射击,和一款很久之前的游戏很像,这里是超级低配版那个游戏,先来看看效果图: 由于设计的是全屏的,所以电脑不能截图。。。。 下面的就是你操控的飞船,上面…

什么是CMS?常用CMS有哪些?

一、内容管理系统(Content Management System)‌ ‌什么是CMS‌:位于 Web 前端(服务器)和后端办公系统之间的软件系统,用于内容创建、编辑、审批和发布。支持文本、图片、视频、数据库等各类数字内容的管理…

Go 语言规范学习(3)

文章目录 Properties of types and valuesRepresentation of valuesUnderlying types【底层类型】Core types【核心类型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…

在 Ubuntu 上安装 Docker 的完整指南

1. 卸载旧版本(如有) 在安装新版本前,建议先卸载旧版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安装依赖包 更新软件包索引并安装必要的依赖: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…

turtle的九个使用

一 import turtle as t color [red,green,blue,orange,pink] for i in range(len(color)):t.penup()t.goto(-20070*i,0)t.pendown()t.pencolor(color[i])t.circle(50, steps 5) t.done()二 #在____________上补充代码 #不要修改其他代码import random as r import turtle a…

23种设计模式-备忘录(Memento)设计模式

备忘录设计模式 🚩什么是备忘录设计模式?🚩备忘录设计模式的特点🚩备忘录设计模式的结构🚩备忘录设计模式的优缺点🚩备忘录设计模式的Java实现🚩代码总结🚩总结 🚩什么是…

利用虚拟化技术实现高级Hook

虚拟化技术为系统监控和Hook提供了更强大、更隐蔽的实现方式。以下是几种基于虚拟化的Hook技术实现方法: 1. 基于VT-x/AMD-V的硬件虚拟化Hook 基本原理 利用CPU的硬件虚拟化扩展(Intel VT-x/AMD-V)在Ring -1层级监控系统行为,实现无法被常规方法检测的…

某鱼、某宝 sign 签名算法分析记录

【作者主页】:小鱼神1024 【知识星球】:小鱼神的逆向编程圈 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 本文章中所有内容仅供学习交流使用,不用于其…

Compose笔记(十三)--事件总线

这一节了解一下Compose中的事件总线,在Jetpack Compose里,官方没有直接提供事件总线,但可以借助第三方库或者自定义实现来达成事件总线的功能,进而在不同的 Compose 控件间同步数据。 自定义事件总线 import androidx.compose.r…

Python的inspect模块

在Python编程中,**inspect**模块是一个强大的工具包,它提供了一系列函数来获取对象的信息,主要用于获取对象的源代码、参数信息、类继承关系、方法属性等。这对于调试、自动化文档生成、代码分析等场景都非常有用。本文将详细介绍inspect模块…

2025跳槽学习计划

(1)编程基础: 目录学习资料Chttps://www.bilibili.com/video/BV1z64y1U7hs?spm_id_from333.1387.favlist.content.clickLinuxPytorchhttps://www.bilibili.com/video/BV1if4y147hS?spm_id_from333.1387.favlist.content.clickopencv数据结…