机器学习: 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 更为适用。

#  文章内容来源于各渠道整理。若对大噶有帮助的话,希望点个赞支持一下叭!

#  文章如有错误,欢迎大噶指正!

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

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

相关文章

《内存函数》

内存函数 1. memcpy函数 (1)介绍 这里通过memcpy的定义我们可以看这个函数包含三个参数,destination就是拷贝的目的地,source就是拷贝的源头,num就是拷贝的个数。 (2)使用 这里要包含头文件s…

不泄密的安全远程控制软件需要哪些技术

在数字化浪潮中,远程控制软件已不再是简单的辅助工具,而是成为企业运作和日常工作中不可或缺的一部分。随着远程办公模式的广泛采纳,这些软件提供了一种既安全又高效的途径来管理和访问远端系统。无论是在家办公、技术支持还是远程教育&#…

Pycharm打开终端时报错:Cannot open Local,Failed to start[powershell.exe]

问题如下: 解决办法: 修改设置中的shell path路径 英文版pycharm:file -> settings -> Tools -> Terminal -> Shell path 中文版pycharm:文件 -> 设置 -> 工具 -> 终端 -> Shell路径 将Shell路径不全 …

15分钟学 Go 第 51 天 :通用库与工具使用

第51天:通用库与工具使用 一、学习目标 类别工具/库用途命令行工具cobra构建命令行应用JSON处理gjson高效JSON解析HTTP客户端restyHTTP请求处理日期处理carbon时间日期操作配置管理viper配置文件处理 二、详细实现 让我们通过具体示例来学习这些库的使用&#x…

基于微信小程序的乡村研学游平台设计与实现,LW+源码+讲解

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自…

VLC-QT----Linux编译并运行示例

linux:ubuntu 16.04 qt:5.13.2 总体安装步骤 下载安装,编译 下载源码仓库,下载cmake,新建一个build文件夹,cd进去,执行代码 cmake .. -DCMAKE_BUILD_TYPEDebug 遇到报错,没有qt5Coreconfig,运行 sudo apt-get install qtdeclarative5-dev进行安装 遇到报错 Could not fi…

机器学习:XGBoost模型——高效且强大的树形模型

XGBoost(Extreme Gradient Boosting,极端梯度提升树)是一种强大的梯度提升算法,在现实中被广泛用于分类和回归任务。它通过集成多个简单的基学习器(通常是决策树)来构建一个强大的预测模型。 基本原理步骤…

爬虫开发工具与环境搭建——开发工具介绍

第二章:爬虫开发工具与环境搭建 第一节 开发工具介绍 爬虫开发需要一些合适的工具和框架来高效地抓取网页数据。在这节中,我们将介绍常用的开发工具,帮助开发者快速搭建爬虫开发环境。 1. Python与爬虫框架选择 Python因其简洁、易学的语法…

python高级之面向对象编程

一、面向过程与面向对象 面向过程和面向对象都是一种编程方式,只不过再设计上有区别。 1、面向过程pop: 举例:孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃饭 8. 妈妈给孩子送学校…

通过Docker实现openGauss的快速容器化安装

容器安装 本章节主要介绍通过 Docker 安装 openGauss,方便 DevOps 用户的安装、配置和环境设置。 支持的架构和操作系统版本 x86-64 CentOS 7.6 ARM64 openEuler 20.03 LTS 配置准备 使用 buildDockerImage.sh 脚本构建 docker 镜像,buildDockerIm…

康谋分享 | 确保AD/ADAS系统的安全:避免数据泛滥的关键

为确保AD/ADAS系统的安全性,各大车企通常需要收集、处理和分析来自于摄像头、激光雷达等传感器的数据,以找出提高系统安全性和性能的方法。然而在数据收集过程中,不可避免地会出现大量无价值数据,造成数据泛滥的情况,进…

电工电子原理笔记

这一篇手记会记录我硬件开发过程中遇到的一些底层电学原理,并且结合实际场景作为“例题”(出于篇幅和保密考虑会进行部分简化)。 叠加定理 基本介绍 在线性电路中,任一支路的电流(或电压)可以看成是电路…

【赵渝强老师】MySQL InnoDB的段、区和页

MySQL的InnoDB存储引擎的逻辑存储结构和Oracle大致相同,所有数据都被逻辑地存放在一个空间中,我们称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(pa…

Python 继承笔记

知识点: 1.has a 一个类中使用了另外一种自定义类的类型 student 使用computer book 2.类型 系统类型 str,int,float,list,tuple,dic,set 自定义类型 算是自定义的类,都可以将其当成一种类型 student是一种类型 sStudent() s是Student的类型 class Stud…

Vue3 -- 项目配置之husky【企业级项目配置保姆级教程4】

引言: eslint:代码规范校验prettier:代码格式化stylelint:CSS代码校验 上述三篇文章集成配置完成代码校验工具,当时需要每次手动的去执行命令才会格式化我们的代码。。如果有人没有格式化就提交了远程仓库&#xff0…

万字长文分析函数式编程

目录 一.认识函数式编程 一、函数式编程的定义 二、函数式编程的思想 三、函数式编程的特点 四、函数式编程的应用 二.Lambda表达式 三.Stream流 3.1 创建流对象 3.2 注意事项 3.3 Stream流的中间操作 filter map distinct sorted limit skip flatMap 3.4 St…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (8) - 原生输入法

AWTK 在嵌入式平台使用内置的输入法,在移动设备上使用系统的原生输入法。在 AWTK-Android 和 AWTK-IOS 中,使用的是 SDL 封装之后的系统原生输入法。在 AWTK-HarmonyOS 中,要使用系统的原生输入法。需要实现 input_method 接口: 1…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台:Unity 6.0 编程语言:CSharp 编程平台:Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop,形成 4x6 布局,如…

【Jenkins实战】Windows安装服务启动失败

写此篇短文,望告诫后人。 如果你之前装过Jenkins,出于换域账号/本地帐号的原因想重新安装,你大概率会遇上一次Jenkins服务启动失败提示: Jenkins failed to start - Verify that you have sufficient privileges to start system…

免费,WPS Office教育考试专用版

WPS Office教育考试专用版,不仅满足了考试需求,更为教育信息化注入新动力。 https://pan.quark.cn/s/609ef85ae6d4