机器学习: LightGBM模型(优化版)——高效且强大的树形模型
LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升决策树(GBDT)的框架,由微软提出。它具有高效的训练速度、低内存占用、支持并行和GPU加速等特点,非常适合大规模数据的训练任务,尤其在分类和回归任务中表现突出。LightGBM的核心原理可以从以下几个方面来理解:
LightGBM模型特点
(一)基于梯度提升的树模型
LightGBM是一个梯度提升决策树(GBDT, Gradient Boosting Decision Tree)算法的改进版本,利用多个决策树的集合来进行学习。GBDT的基本思想是通过迭代地构建一系列弱学习器(通常是决策树)来提升模型的整体性能,每一步都构建一个新的树以减少前一阶段的误差。通过累积的方式使得预测误差不断减少,最终得到一个准确的预测模型。
注:如果要了解 LightGBM 的具体实现原理,可以先看文章XGBoost模型,之后再来看本篇文章,这里我就不反复写啦。在本篇文章,涉及相对于XGBoost,LightGBM有哪些优秀的特点,便于大家选择合适的模型。大佬的话就当我在说废话吧hhhh
(二)叶子生长策略(Leaf-wise Growth)
传统的GBDT通常采用层级生长(Level-wise Growth)方式,即每一层的节点同时扩展,直到达到预设深度。而LightGBM采用叶子生长策略,即每次选择增益最大的叶子节点继续分裂。叶子生长能够显著降低训练时间,因为它更加有选择性,只扩展当前最有助于提升模型效果的节点。不过,这种策略会导致树结构不平衡,容易产生过拟合,因此需要使用正则化和控制树的最大深度来缓解。
-
层级生长(Level-wise Growth): 传统GBDT通常采用层级生长策略,即每次在当前层中的所有节点上都进行分裂,保证所有叶子节点的深度相同。这种策略较为简单,但会浪费大量计算资源在效果有限的节点上,尤其在数据量较大时,效率较低。
-
叶子生长(Leaf-wise Growth): LightGBM采用叶子生长策略,即在每一轮中,只选择增益最大的叶子节点进行分裂,而不是让所有节点都分裂。这种策略使得模型能够更好地聚焦于最具提升潜力的节点,从而加速模型训练,同时也在相同树深度下实现更好的性能。
示例图1(层级生长):
示例图2(叶子生长):
(三) 直方图算法(Histogram-based Algorithm)
LightGBM引入了直方图算法来加速特征分裂的过程。它将连续的特征值离散化成一定数量的bins(区间),每个bin代表一段连续的特征值范围。训练过程中,LightGBM会根据这些bins计算每个分裂点的增益值,从而减少了计算量并加快了分裂速度。此外,直方图算法在内存占用上也更高效,因为它只需要存储每个bin的统计信息,而非每个样本的特征值。
(四)GOSS单侧采样(Gradient-based One-Side Sampling)
在处理大规模数据时,LightGBM引入了基于梯度的单侧采样(GOSS)策略。GOSS的核心思想是对梯度绝对值较大的样本保留较高的比例,而对梯度较小的样本随机采样。因为梯度大的样本通常对模型的更新更为重要,因此这种策略能够保留更多关键信息,同时显著减少样本数量,加速训练过程。
(五)特征捆绑技术(EFB)
为了进一步提高效率,LightGBM提出了排他特征捆绑(EFB)技术。EFB通过将互斥的稀疏特征捆绑在一起,减少了特征的维数。互斥特征是指在一个样本中不会同时取非零值的特征,例如在一个文本分类任务中,某些词汇不会同时出现。将这些特征打包为一个特征列,从而减少计算量和内存占用。
(六)支持并行和分布式训练
LightGBM支持特征并行和数据并行。特征并行指的是多个工作节点分配到不同的特征上,减少在计算分裂点时的特征遍历时间。而数据并行则将数据划分到不同的机器中,每个机器上训练子集数据的模型,再将结果合并。这使得LightGBM能够高效处理大规模数据集,尤其在分布式环境中表现出色。
(七)高效的正则化
为了控制模型的复杂度和防止过拟合,LightGBM提供了多种正则化手段,包括L1、L2正则化以及对叶节点数和树深的控制。此外,通过设置最大深度、最小数据量等参数,可以防止树的过拟合问题,提升模型的泛化能力。
LightGBM 与 XGBoost 对比
(一)树的生长方式
-
XGBoost:
-
按层生长(Level-wise growth):XGBoost 使用传统的按层生长策略,即每次扩展树的所有层级,直到树的每一层都填充完。这种策略在每一层都尝试平衡树的深度,有时可能导致树的结构较为均匀,但并不一定是最优的。
-
-
LightGBM:
-
按叶生长(Leaf-wise growth):LightGBM 使用按叶子生长的策略。每次分裂时,它选择增益最大的叶子节点进行扩展。这使得树的深度较大,能够更快速地拟合训练数据,通常会提高模型的准确性。
-
优点:按叶子生长通常能带来更高的预测准确率,因为它更集中地拟合最难预测的部分。
-
缺点:按叶生长可能导致过拟合,尤其是当树的深度很大时,因此需要更多的正则化措施来避免过拟合。
-
(二)特征处理与数据格式
-
XGBoost:
-
XGBoost 对数据进行优化,可以处理稀疏数据集,并且可以处理不同的数据类型(连续、类别等)。XGBoost 对类别特征的处理相对简单,通常需要通过手动编码(如独热编码)将类别变量转化为数值型特征。
-
-
LightGBM:
-
LightGBM 自带对类别特征的处理机制,能够直接处理原始的类别特征,而不需要手动进行独热编码(One-Hot Encoding)。它通过特殊的类别特征分裂策略(如基于统计信息的分裂方法)来处理类别数据,减少了内存消耗和计算复杂度。
-
特征桶化(Bin):LightGBM 会通过将连续特征离散化成多个桶(bin)来加速训练过程,这个过程通过直方图的方式进行。
-
(三)训练过程中的优化
-
LightGBM:
-
直方图优化:LightGBM 使用直方图来优化数据存储和分裂点计算,将数据离散化成多个区间(桶)。这种方法在特征分裂时大大减少了计算的复杂度,因为只需要在桶的基础上进行分裂增益的计算,而不需要考虑每个样本。
-
单边梯度优化(GOSS):LightGBM 引入了 GOSS 技术,通过保留梯度较大的样本并随机采样梯度较小的样本,来减少计算量而不牺牲模型精度。
-
类别特征的高效处理:LightGBM 对类别特征的优化非常高效,减少了对内存的使用和计算时间。
-
(四)并行化与分布式训练
-
XGBoost:
-
XGBoost 支持数据并行和模型并行。数据并行是指将训练数据分配到多个机器或 CPU 核心上,模型并行则是在不同的树或不同的叶子节点上进行并行计算。
-
在分布式环境中,XGBoost 采用了一种类似于 MapReduce 的框架来处理分布式训练,但在处理非常大规模数据时,性能可能不如 LightGBM。
-
-
LightGBM:
-
LightGBM 支持高效的分布式训练。它对数据和任务进行了更精细的划分,可以在多机多卡环境下进行高效的并行训练。LightGBM 可以在多台机器上分布式训练,处理大规模数据时,通常会比 XGBoost 更加高效。
-
(五)使用场景对比
-
XGBoost:在许多传统机器学习任务中,XGBoost 的表现非常优秀,尤其在小数据集或中等规模的数据集上,经过精心调节参数后能获得非常高的准确性。
-
LightGBM:特别适合大规模数据集和高维稀疏数据,在内存使用和训练速度上有显著优势。LightGBM 在大规模机器学习和工业应用中往往表现得更为高效。
选择建议:
-
如果数据集比较小或者中等,且需要非常高的精度,XGBoost 是一个不错的选择。
-
如果数据集非常大,特别是具有大量特征和稀疏特征的情况,LightGBM 更为适用。
# 文章内容来源于各渠道整理。若对大噶有帮助的话,希望点个赞支持一下叭!
# 文章如有错误,欢迎大噶指正!
相关文章:

机器学习: LightGBM模型(优化版)——高效且强大的树形模型
LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升决策树(GBDT)的框架,由微软提出。它具有高效的训练速度、低内存占用、支持并行和GPU加速等特点,非常适合大规模数据的训练任务,尤…...

Wordpress常用配置,包括看板娘跨域等
一个Wordpress的博客已经搭建完成了,那么为了让它看起来更有人间烟火气一点,有一些常用的初始配置,这里整理一下。 修改页脚 页脚这里默认会显示Powered by Wordpress,还有一个原因是这里要加上备案信息。在主题里找到页脚&…...

Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式
此去经年,再难同游 —— 24.11.11 一、什么是设计模式 设计模式是一种编程套路,可以极大的方便程序的开发最常见、最经典的设计模式,就是我们所学习的面向对象了。 除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模…...

Unity 网格模型及优化
一个模型中可以包含很多网格,一个模型可以由多个网格组成。在Unity3D中一个网格可以由多个子网格(Sub-Mesh)组成。 在渲染引擎的时候,每个子网格都要匹配一个材质球来做渲染,实际上一个子网格本身就是一个个普通的模型࿰…...

离线 快速搭建 docker docker-compose k8s 环境
所需资源 sealos_5.0.1_linux_arm64.tar.gzkubernetes.tar等docker-compose-linux-aarch64 离线安装sealos,用于安装k8sdocker 首先安装sealos工具 tar zxvf sealos_5.0.1_linux_arm64.tar.gz sealos && chmod x sealos && mv sealos /usr/bin*…...

Excel根据条件动态索引单元格范围
假如我是一个老板,下面有数不胜数的员工,我要检查他们每周的工作产出,列一个排行榜,提高员工积极性,毕竟多劳多得嘛。 每天去手动统计,未免显得不太聪明,我们可以利用公式来解决这个问题。 我们…...

【计算机网络五】HTTP协议!网站运行的奥秘!
目录 HTTP协议 1.HTTP是什么? 2.Fiddler抓包查看HTTP协议格式 3.HTTP请求 4.HTTP响应 HTTP协议 1.HTTP是什么? HTTP ( 全称为 " 超文本传输协议 ") 诞生与 1991 年 . 目前已经发展为最主流使用的一种应用层协议 . HTTP 的前几个版本…...

开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-Qwen-Agent深入学习(四)
一、前言 Qwen-Agent 是一个利用开源语言模型Qwen的工具使用、规划和记忆功能的框架。其模块化设计允许开发人员创建具有特定功能的定制代理,为各种应用程序提供了坚实的基础。同时,开发者可以利用 Qwen-Agent 的原子组件构建智能代理,以理解和响应用户查询。 本篇将换一种方…...

stream学习
Stream流 定义 Steam流,用于操作集合或者数组中的数据,大量结合了Lamda表达式的语法风格,代码简洁。 重点: 流只能收集一次 获取Stream流 Stream流要与数据源建立连接。 1.list 直接调用steam()即可 // list List<Stri…...

【数据结构】实验二 单链表的基本操作
一、实验目的 掌握线性表的链式存储结构的表示和实现方法。 掌握链表基本操作的算法实现,以及对相应算法的性能分析。 二、实验内容 1)根据输入的一系列整数,以0标志结束,用头插法建立单链表,并输出单链表中各元素…...

SQL 分组查询中的非聚合列要求及实例解析
在 SQL 查询中,当我们对数据进行分组时,通常会用到 GROUP BY 子句。SQL 标准要求:所有非聚合列(即没有使用聚合函数的列)都必须出现在 GROUP BY 子句中,或者是聚合函数的结果。这篇文章通过一个实例来说明这…...

Unity中实现战斗帧同步的高级技术
一、帧同步的基本原理 帧同步(Frame Synchronization)在网络游戏中指的是在每一帧上保证所有玩家所看到的游戏状态一致,而不是每个玩家单独计算自己的状态。实现帧同步通常需要每个客户端仅发送用户输入到服务器,并由服务器进行全…...

Qt 正则表达式提取文件中的 USB 设备 ID
Qt 正则表达式提取文件中的 USB 设备 ID flyfish 文档内容 Bus: 001 Device: 001 Description: 1d6b:0002 Linux Foundation 2.0 root hub Bus: 002 Device: 003 Description: 0e0f:0002 , Inc. USB Hub Bus: 002 Device: 002 Description: 0e0f:0003 , Inc. Mouse Bus: 002…...

使用 Python 和 OpenCV 实现摄像头人脸检测并截图
概述 在现代应用中,人脸检测是一项非常重要的技术,广泛应用于安全监控、身份验证等领域。本文将详细介绍如何使用 Python 和 OpenCV 库实现摄像头人脸检测并截图,并通过具体的代码示例来展示整个过程。 环境准备 在开始编写代码之前&#…...

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路: 这是一个二叉树的布尔评估问题。树的每个节点包含一个值,其中叶子节点值为 0 或 1࿰…...
【计算机视觉】FusionGAN
1. FusionGAN论文阅读 abreheret/FusionGAN: Pytorch implementation of "Generating a Fusion Image: One’s Identity and Another’s Shape" 1.1. WHY 在现实世界中,将对象或人物转换为期望的形状是一种常用技术,但现有的图像翻译方法在处理身份和形状时存在…...

问:SQL优化,七条实践总结?
SQL语句优化是数据库性能调优的重要部分,通过合理的优化可以显著提升查询速度和系统性能。文章总结几种常见SQL语句优化方法。 1. 优化Where子句的顺序 原则:表之间的连接条件应写在其他Where条件之前,能够过滤掉最大数量记录的条件应优先写…...

unity单例模式的不同声明(待完善
总结: 这段代码实现了一个泛型单例模式(Singleton Pattern),用于确保某个类(由泛型参数 T 指定)在整个应用程序中只有一个实例,并且在第一次访问时才创建该实例。该模式保证了该实例的全局唯一…...

大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手
本文来自腾讯蓝鲸智云社区用户: CanWay 背景 1、运维转型背景 蓝鲸平台从诞生之初,就一直在不遗余力地推动运维转型,让运维团队可以通过一体化PaaS平台,快速编写脚本,编排流程,开发运维工具,从被动地提供…...

vue2,vue3响应式的理解
vue2的话主要使用的是defineProperty对已有属性添加get,set,从而完成对数据的响应式控制,但每次需要for循环对属性进行遍历 function DefineReactive(target, key, value) {//存在多层嵌套的objectObserver(value);Object.defineReactive(target, key, {get() {retu…...

群控系统服务端开发模式-应用开发-前端退出功能
我们从未登录一直到退出,现在已经登录到操作,现在完成退出。退出有两种情况下会退出:第一种情况下是手动点击退出按钮,第二种情况下是登录过期时间到了自动退出的。 一、手动退出 因退出及个人信息页面都在公有页面,所…...

Web入门
Spring 官网:Spring | Home Spring是一个开源的Java企业级应用开发框架。Spring的主要目的是使Java EE(Java Platform, Enterprise Edition)开发更容易,并且通过提供一系列丰富的库和接口来促进良好编程实践,是…...

基于SpringBoot网上超市的设计与实现录像
基于SpringBoot网上超市的设计与实现录像 SpringBoot网上超市的设计与实现录像...

python爬虫(二)爬取国家博物馆的信息
import requests from bs4 import BeautifulSoup# 起始网址 url https://www.chnmuseum.cn/zx/xingnew/index_1.shtml # 用于存储所有数据 all_data [] page 1 global_index 1 # 定义全局序号变量并初始化为1 while True:html_url requests.get(url).textif requests.get…...

【mysql的当前读和快照读】
在MySQL中,尤其是InnoDB存储引擎中,读操作主要分为两种:当前读(Current Read)和快照读(Snapshot Read) 当前读 当前读每次读取的都是当前最新的数据。这种读操作在读取数据时不允许其他事务对这…...

[CKS] Audit Log Policy
最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于audit policy的题目。 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S Netw…...

【Linux】-学习笔记03
第十一章-管理Linux软件包和进程 1.源码下载安装软件 1.1概念 源码文件:程序编写者使用C或C等语言编写的原始代码文本文件 源码文件使用.tar.gz或.tar.bz2打包成压缩文件 1.2特点 源码包可移植性好,与待安装软件的工作环境依赖性不大 由于有编译过程…...

Leetcode热题100-32 最长有效括号
Leetcode热题100-32 最长有效括号 1. 题目描述2. 解题思路动态规划栈解法 3. 代码实现动态规划栈解法 1. 题目描述 32 最长有效括号 2. 解题思路 动态规划 定义状态: 设 dp[i] 表示以位置 i 结尾的最长有效括号子串的长度。 状态转移方程: 遍历字符…...

【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件,这个文件中会存在hbase中的数据以kv类型显示,同时还会存在hbase的元数据信息,包括整个hfile文件的索引大小&…...

A027-基于Spring Boot的农事管理系统
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...