机器学习(12)——LGBM(1)

文章目录

  • LightGBM算法详解
    • 1. 算法背景
    • 2. 核心创新
      • 2.1 基于直方图的决策树算法
      • 2.2 单边梯度采样(GOSS)
      • 2.3 互斥特征捆绑(EFB)
    • 3. 算法细节
      • 3.1 树生长策略
      • 3.2 特征并行与数据并行
      • 3.3 类别特征处理
    • 4. 关键参数说明
      • 4.1 核心参数
      • 4.2 控制速度参数
      • 4.3 控制过拟合参数
    • 5. 与XGBoost对比
    • 6. 实践建议
    • 7. 代码示例
    • 8. 适用场景
    • 9. 局限性

LightGBM算法详解

LightGBM(Light Gradient Boosting Machine)是微软开发的一个基于决策树算法的分布式梯度提升框架,专为高效性和可扩展性设计。

1. 算法背景

LightGBM属于梯度提升决策树(GBDT)家族,是XGBoost之后的一个重要改进。它于2017年由微软团队提出,主要解决了以下问题:

  • 传统GBDT在大规模数据上效率低
  • 内存消耗大
  • 训练速度慢

2. 核心创新

2.1 基于直方图的决策树算法

LightGBM将连续特征值离散化为k个整数(默认255),构造特征直方图。训练时基于这些直方图寻找最优分割点,带来以下优势:

  • 内存消耗降低:从O(#data * #features)降到O(k * #features)
  • 计算代价降低:从O(#data * #features)降到O(k * #features)

2.2 单边梯度采样(GOSS)

传统GBDT计算信息增益时需要对所有数据点的梯度进行统计。GOSS通过以下方式优化:

  1. 保留梯度较大的前a%样本
  2. 从剩余样本中随机抽取b%样本
  3. 在计算信息增益时,对小梯度样本的权重乘以常数(1-a)/b

2.3 互斥特征捆绑(EFB)

高维特征通常是稀疏的,许多特征互斥(不会同时取非零值)。EFB将这些特征捆绑在一起,将复杂度从O(#features)降到O(#bundle),同时不影响准确性。

3. 算法细节

3.1 树生长策略

LightGBM采用leaf-wise生长策略(区别于level-wise):

  • 每次从当前所有叶子中,选择分裂增益最大的叶子进行分裂
  • 能更有效地降低损失,但可能导致较深的树
  • 可通过max_depth参数限制深度防止过拟合

3.2 特征并行与数据并行

  • 特征并行:不同机器处理不同特征,寻找最佳分割点
  • 数据并行:数据分散到不同机器,每台机器构建局部直方图后合并

3.3 类别特征处理

LightGBM原生支持类别特征,无需独热编码:

  • 直接按类别值排序后寻找最优分割
  • 通过max_cat_threshold控制分裂数
  • 比独热编码更高效且通常效果更好

4. 关键参数说明

4.1 核心参数

  • boosting_type: 提升类型,默认gbdt
  • objective: 目标函数,如regression、binary、multiclass等
  • metric: 评估指标

4.2 控制速度参数

  • num_iterations: 迭代次数
  • learning_rate: 学习率
  • num_leaves: 叶子数(主要控制复杂度)
  • max_depth: 树的最大深度

4.3 控制过拟合参数

  • lambda_l1: L1正则化
  • lambda_l2: L2正则化
  • min_data_in_leaf: 叶子最小样本数
  • feature_fraction: 特征采样比例
  • bagging_fraction: 数据采样比例

5. 与XGBoost对比

特性LightGBMXGBoost
树生长策略leaf-wiselevel-wise
特征离散化直方图算法预排序算法
内存使用更低较高
训练速度更快较慢
类别特征处理原生支持需要编码
并行方式特征+数据并行主要特征并行
小数据集表现可能过拟合通常更好

6. 实践建议

  1. 参数调优顺序

    • 首先设置较大的num_leaves和较小的learning_rate
    • 调整num_iterations使用早停法
    • 然后调节min_data_in_leafmax_depth防止过拟合
    • 最后调整正则化参数
  2. 类别特征处理

    • 直接指定为类别类型比独热编码更高效
    • 对高基数类别特征可考虑目标编码
  3. 不平衡数据

    • 使用is_unbalance参数或设置scale_pos_weight
    • 也可调整class_weight参数
  4. 并行加速

    • 设置feature_fractionbagging_fraction小于1
    • 使用bagging_freq启用随机采样

7. 代码示例

import lightgbm as lgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split# 加载数据
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2)# 创建数据集
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)# 设置参数
params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'binary_logloss','num_leaves': 31,'learning_rate': 0.05,'feature_fraction': 0.9,'bagging_fraction': 0.8,'bagging_freq': 5,'verbose': 0
}# 训练模型
gbm = lgb.train(params,train_data,num_boost_round=100,valid_sets=[test_data],early_stopping_rounds=10)# 预测
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)

8. 适用场景

LightGBM特别适合以下场景:

  • 大规模数据集(百万级样本以上)
  • 高维特征数据
  • 需要快速迭代的实验环境
  • 对预测延迟要求不严格的场景

9. 局限性

  1. 在小数据集上可能容易过拟合
  2. leaf-wise生长策略可能导致模型复杂度较高
  3. 对噪声数据较为敏感
  4. 相比线性模型可解释性较差

LightGBM因其高效性和优秀的性能,已成为许多机器学习竞赛和工业界应用的首选工具之一。理解其核心原理和参数调优技巧,能够帮助在实际问题中更好地应用这一强大算法。

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

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

相关文章

网络安全-等级保护(等保) 2-7-3 GB/T 25058—2019 第7章 安全设计与实施

############################################################################### 对于安全厂家而言,最关心的内容在本章节,根据已确定的安全总体方案,完成技术措施和管理措施的详细设计和实施,包含具体的安全产品和管理要求。…

PHP-FPM 调优配置建议

1、动态模式 pm dynamic; 最大子进程数(根据服务器内存调整) pm.max_children 100 //每个PHP-FPM进程大约占用30-50MB内存(ThinkPHP框架本身有一定内存开销)安全值:8GB内存 / 50MB ≈ 160,保守设置为100 ; 启动时创建的进程数&…

DDoS防护实战——从基础配置到高防IP部署

一、基础防护:服务器与网络层加固 Linux内核优化: 调整TCP协议栈参数,缓解SYN Flood攻击: # 启用SYN Cookie并减少超时时间 echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout…

使用 NGINX 的 `ngx_http_secure_link_module` 模块保护资源链接

一、模块简介 版本:自 NGINX 0.7.18 起引入 功能: 签名校验:对请求 URI 中的签名进行校验,保证链接未经篡改。时效控制:根据请求中携带的过期时间,判断链接是否仍在有效期。 启用方式:编译 NG…

前端三剑客之HTML

前端HTML 一、HTML简介 1.什么是html HTML的全称为超文本标记语言(HTML How To Make Love HyperText Markup Language ),是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整…

网络安全-等级保护(等保) 2-0 等级保护制度现行技术标准

################################################################################ 第二章:现行等保标准要求,通过表格方式详细拆分了等保的相关要求。 GB 17859-1999 计算机信息系统 安全保护等级划分准则【现行】 GB/T22240-2020 《信息安全技术 网…

目标检测 LW-DETR(2024)详细解读

文章目录 整体架构 LW-DETR全称Light-Weight DETR,是百度团队提出的第二代面向实时检测算法,比yolo v8的速度和精度更好 整体架构 LW-DETR 由一个ViT编码器(Vision Transformer Encoder)、一个投影器(Projector&#…

DVWA-XSS

DOM low 这是一个下拉框的形式&#xff0c;但是如果我们不让他等于English呢&#xff0c;换成js代码呢&#xff1f; <script>alert(xss);</script> Medium <script> 标签&#xff0c;但仅使用简单的字符串匹配进行替换&#xff08;比如移除 "<scr…

想要建站但没有服务器?雨云RCA,免服务器即可搭建完整网站!!!

大家好&#xff01;时隔几个星期没有发文章了。 最近&#xff0c;雨云发布了一个新的项目——雨云云应用&#xff08;RCA&#xff0c;Rainyun Cloud Application&#xff09;&#xff0c;在没有服务器的情况下&#xff0c;可以小白部署一个完整的网站&#xff0c;免去了繁琐的…

智能事件分析边缘服务器:交通管理与安全监测的利器

在当今交通管理和安全监测的领域中&#xff0c;智能化、高效化的设备需求日益增长。智能事件分析边缘服务器凭借其卓越的性能和丰富的功能&#xff0c;成为了该领域的佼佼者。 一、产品概述 智能事件分析边缘服务器是一款采用嵌入式 Linux 操作系统的边缘事件分析终端。它具有…

2025抓包工具Reqable手机抓包HTTPS亲测简单好用-快速跑通

前言 自安卓7.0高版本系统不在信任用户证书&#xff0c;https抓包方式市面查找方法太过复杂手机要root等&#xff0c;前置条件要求太高太复杂&#xff0c;看的头痛&#xff0c;今天一台电脑按步骤操作完即可抓包https,给大家搞定抓包https问题。支持直接编辑修改请求参…

Neon数据库:让Postgres更智能的选择!

Neon:革新的Serverless PostgreSQL解决方案 在当今快速发展的技术世界,数据库的效率和灵活性成为众多开发者关注的重中之重。Neon,以其独特的serverless架构,正引领着这一变革。本文将深入探讨Neon的独特构架、应用场景以及具体的使用方法,帮助您快速掌握这一开源项目的精…

从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB

作者&#xff1a; Lucien-卢西恩 原文来源&#xff1a; https://tidb.net/blog/e7034d1b Java 应用开发技术发展历程 在业务开发早期&#xff0c;用 Java 借助 JDBC 进行数据库操作&#xff0c;虽能实现基本交互&#xff0c;但需手动管理连接、编写大量 SQL 及处理结果集&a…

Vue 3.0 Transition 组件使用详解

Vue 3.0 的 Transition 组件提供了一种简单的方式来为元素或组件的进入/离开添加动画效果。下面是使用<script setup>语法糖的实现方式。 1. 基本用法 使用场景&#xff1a;当需要为元素的显示/隐藏添加简单的淡入淡出效果时&#xff0c;这是最基础的过渡实现方式。 &…

代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)

图论part03 孤岛的总面积 代码随想录链接 题目链接 视频讲解链接 思路&#xff1a;既然某个网格在边界上的岛屿不是孤岛&#xff0c;那么就把非 孤岛的所有岛屿变成海洋&#xff0c;最后再次统计还剩余的岛屿占据的网格总数即可。 dfs&#xff1a; import java.util.Scanner…

C#自定义扩展方法 及 EventHandler<TEventArgs> 委托

有自定义官方示例链接&#xff1a; 如何实现和调用自定义扩展方法 - C# | Microsoft Learn 1.静态类 2.静态方法 3.第一参数固定为this 要修改的类型,后面才是自定的参数 AI给出的一个示例&#xff1a;没有自定义参数 、有自定义参数的 using System; using System.Colle…

Zephyr OS 中的 FIFO 接口应用介绍

目录 概述 1 FIFO的接口函数 1.1 K_FIFO_DEFINE函数 1.2 k_fifo_init函数 1.3 k_fifo_put函数 1.4 k_fifo_get 函数 1.5 k_fifo_is_empty 函数 2 应用验证 2.1 UART中使用FIFO范例 2.2 生产-消费类型范例 3 注意事项 3.1 内存管理 3.2 线程安全边界 概述 Zephy…

Spring Boot 集成 Elasticsearch【实战】

前言&#xff1a; 上一篇我们简单分享了 Elasticsearch 的一些概念性的知识&#xff0c;本篇我们来分享 Elasticsearch 的实际运用&#xff0c;也就是在 Spring Booot 项目中使用 Elasticsearch。 Elasticsearch 系列文章传送门 Elasticsearch 基础篇【ES】 Elasticsearch …

Win11下轻松搭建wiki.js,Docker.desktop部署指南(mysql+elasticsearch+kibana+wiki.js)

Docker.desktop部署wiki.js指南 前言环境和要求介绍提前准备 1. elasticsearch1.1 部署容器1.2 参数说明1.3 验证容器是否部署成功 2. kibana2.1 部署容器2.2 验证是否部署成功2.3 安装IK分词器 3. MySql3.1 部署容器3.2 增加数据库和wiki.js所需要的账号 4. wiki.js4.1 部署容…

PCB设计教程【入门篇】——电路分析基础-元件数据手册

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 一、数据手册的重要…