lightgbm原理、特殊点、参数分析


lightgbm:
一、位置:
相比XGB,LGBM有更高效的计算效率和更低的内存占用,并且面对高维数据,LGBM算法拥有更好的过拟合特性,这使得在建模数据量日趋增加的今天,LGBM会更适合作为前期探索性建模的模型
CatBoost算法同样在训练效率上比XGB更快,并且更加自动化——在特征衍生和超参数优化已经成为机器学习模型训练标配的今天,CatBoost能够(一定程度上)实现对输入的特征进行自动特征衍生和对超参数进行自动超参数优化。
LGBM以牺牲极小的计算精度为代价,将GBDT的计算效率提升了近20倍
方法:
LGBM充分借鉴了XGB提出的一系列提升精度的优化策略,同时在此基础之上进一步提出了一系列的数据压缩和决策树建模流程的优化策略。

二、优化点在三个方面:

数据压缩:
1.全样本上连续变量分箱(连续变量离散化):等宽分箱,
2.同时带入离散特征和离散后的连续变量进行离散特征捆绑(合并)降维:互斥特征捆绑(Exclusive Feature Bundling, EFB)算法
降维且不让精度下降太多
独热编码逆向过程:
如果两个变量互斥(我取1你就不取1,不会同时取得非0)
冲突比例:冲突样本占非全0样本比例
图着色问题:如果两个特征互斥比例小于设定的阈值,则没有边相连。然后对图着色,用尽可能少的颜色对图染色,相邻节点不同色。
从度最大的点出发,开始着色。
最后赋予新特征取值:不同颜色取不同的值
原理思考:如果冲突比例过大,新生成的值会很多,特征压缩效果太大


3.最终在每次构建一颗树之前进行样本下采样:基于梯度的单边采样(Gradient-based One-Side Sampling, GOSS)的方法
目的:压缩数据集并且不太降低精度。
计算样本梯度,小梯度样本进行抽样,再结合大梯度样本一起建模。
为了还原原始数据集梯度,用膨胀系数,最终数据集样本梯度=大样本梯度+小样本梯度*膨胀系数
而膨胀系数=(1-大梯度样本比例)/小梯度样本阈值

注意点:
top_rate越大other_rate越小好一些。
以上方法只适用于lightgbm,不能单独使用

建模优化方法:
1.直方图优化算法:通过直方图的形式更加高效简洁的表示每次分裂前后数据节点的核心信息,并且父节点和子节点也可以通过直方图减法计算直接算得,从而加速数据集分裂的计算过程
用直方图代替原始数据集来训练,大幅加快决策树生长过程。
直方图:每个特征的梯度和 、hess和图

2.leaf wise tree growth的叶子节点优先的决策树生长策略:LGBM则允许决策树生长过程优先按照节点进行分裂,即允许决策树“有偏”的生长
希望精度提升,过拟合风险更大些。
3.LGBM决策树生长的增益计算公式
图 

对于实际计算过程的优化:例如Voting Parallel(投票特征并行)方法、特征多线程并行处理方法、GPU加速方法和分布式计算

三、超参数
LGBMClassifier特殊参数:

Boosting过程控制超参数:boosting_type(提升类型,如gbdt、dart、goss、rf)
与之相关的是subsample_for_bin参数:subsample_for_bin:该参数表示对连续变量进行分箱时(直方图优化过程)抽取样本的个数,默认取值为200000,当实际抽样个数大于输入训练数据样本数量时,会带入全部样本进行计算。而如果boosting_type选择的是goss,则在直方图优化时会自动完成抽样,具体抽样策略是:会保留所有较小梯度的样本(即那些已经被模型很好拟合的样本),并对较大梯度的样本进行采样。这种策略能够在加速训练(大梯度样本的贡献)的同时有效防止过拟合(小梯度样本的贡献)。因此,如果boosting_type选择的是 "goss",。则subsample_for_bin参数会失去作用,此时无论subsample_for_bin取值多少都不影响最终结果。

特征和数据处理类超参数则主要与数据采样有关:包含subsample(样本子集的比例)、subsample_freq(进行子采样的频率)、colsample_bytree(列采样的比例)
subsample:模型训练时抽取的样本数量,取值范围为 (0, 1],表示抽样比例,默认为1.0
subsample_freq:抽样频率,表示每隔几轮进行一次抽样,默认取值为0,表示不进行随机抽样(如果它为0,则不论subsample是多少,都不抽样)
colsample_bytree:在每次迭代(树的构建)时,随机选择特征的比例,取值范围为 (0, 1],默认为1.0 
特征和数据处理类超参数:

注意:
LGBM和RF的不同特征抽样(分配)规则:LGBM和随机森林不同,随机森林是每棵树的每次分裂时都随机分配特征,而LGBM是每次构建一颗树时随机分配一个特征子集,这颗树在成长过程中每次分裂都是依据这个特征子集进行生长。

LGBMRegressor:
和LGBMClassifier只有两点不同,其一是LGBMRegressor没有class_weight参数,其二则是LGBMRegressor的损失函数和LGBMClassifier完全不同。
损失函数:包含了GBDT和XGB的各类回归类损失函数
 

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

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

相关文章

车载软件架构 --- 二级boot设计说明需求规范

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

Cpp实现window上cmd执行效果

Cpp实现window上cmd执行效果 文章目录 Cpp实现window上cmd执行效果1.头文件包含部分2.main 函数部分3. 获取当前工作目录部分4.主循环部分5.退出条件部分6.处理 cd 命令部分7.执行其他命令部分8.读取命令输出部分9.关闭管道并处理返回码部分10.源码 1.头文件包含部分 #include…

STM32 HAL库FreeRTOS 中断管理

一、引言 在嵌入式系统开发中,STM32 微控制器凭借其高性能、低功耗和丰富的外设资源,被广泛应用于各种领域。FreeRTOS 作为一款轻量级、开源且功能强大的实时操作系统,为多任务处理提供了良好的支持。中断是嵌入式系统中实现实时响应外部事件…

在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?

​In Unreal Engine 5 (UE5), discrepancies in lighting between the editor and play modes are often due to auto exposure settings, particularly when using the EV100 system. To maintain consistent lighting across both modes, follow these steps:​YouTube1Epic …

[python] set

1.添加元素 在 Python 中,向 set 添加一个元素可以使用 add() 方法。如果添加的元素已经存在于 set 中,add() 不会重复添加(因为 set 具有自动去重的特性)。 方法 1:add(element)(添加单个元素&#xff0…

第一期第18讲26:23

shell脚本以 .sh为后缀,里面存放着一行行要运行的linux指令。 shell脚本第一行一定为 #!/bin/bash,表示使用bash。 shell文件举例如下: #!/bin/bash echo "hello shell!" shell文件默认没有可执行权限,因此 chmod 777 m…

解决 Ubuntu 下 VTune 无法收集 CPU 硬件时间计数数据的问题

解决 Ubuntu 下 VTune 无法收集 CPU 硬件时间计数数据的问题 在 Ubuntu 上使用 Intel VTune Profiler 时遇到无法收集 CPU 硬件性能计数器数据的问题,通常是由于权限和系统配置问题导致的。以下是解决方案: 1. 检查并加载性能监控模块 首先确保 Linux…

健康元 以韧性换弹性

拼韧性的时候到了! 一面是复杂的市场、政策环境与医药行业转型所叠加形成的向下压力;一面是AI技术深度赋能医药企业创新加速的向上机遇。 中国药企在经历了一轮群体性低潮期后,进入“结构性”分化的阶段。 在这一阶段上,一些财…

csv数据的读取

在地理信息系统(GIS)项目中,CSV(Comma-Separated Values)文件是一种常见的数据格式,用于存储表格数据。CSV 文件因其简单易用、可被多种软件读取而广泛应用于数据交换和存储。ArcPy 提供了强大的功能&#…

android Stagefright框架

作为Android音视频开发人员,学习Stagefright框架需要结合理论、源码分析和实践验证。以下是系统化的学习路径: 1. 基础准备 熟悉Android多媒体体系 掌握MediaPlayer、MediaCodec、MediaExtractor等核心API的用法。 理解Android的OpenMAX IL&#xff08…

【基于WSAAsyncSelec模型的通信程序设计】

文章目录 一、实验背景与目的二、实验设计与实现思路1. 设计思想2. 核心代码实现 总结 一、实验背景与目的 这次实验主要是为了让大家了解基于 WSAAsyncSelect 模型通信程序的编写、编译和执行过程。通过实践操作,深入掌握这种模型在实现计算机之间通信时的应用。 …

JAVA:利用 Apache Tika 提取文件内容的技术指南

1、简述 Apache Tika 是一个强大的工具,用于从各种文件中提取内容和元数据。📄Tika 支持解析文档、📸图像、🎵音频、🎥视频文件以及其他多种格式,非常适合构建🔍搜索引擎、📂内容管理系统和📊数据分析工具。 样例代码:https://gitee.com/lhdxhl/springboot-…

数码管静态显示一位字符(STC89C52单片机)

#include <reg52.h> sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; //用数组来存储数码管的真值表&#xff0c;数组将在下一章详细介绍 unsigned char code LedChar[] { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82…

计算机视觉与深度学习 | 工业视觉缺陷检测如何检小缺陷?背景概述,原理,检测难点,常用的检测算法,算法评估指标,新项目算法选择,算法部署

工业视觉小缺陷检测技术解析 背景概述 工业视觉缺陷检测是智能制造中质量控制的核心环节,而小缺陷检测(如微米级划痕、点状污渍、细微裂纹等)因其目标小、易受干扰等特点,成为技术难点。随着制造业对精度要求提升(如3C电子、半导体、精密零部件行业),传统人工目检和基…

OBS 日期时间.毫秒时间脚本 date-and-time.lua

文章目录 OBS 日期时间.毫秒时间脚本&#xff1a;效果 OBS 日期时间.毫秒时间脚本&#xff1a; obs obslua source_name ""last_text "" format_string "" activated false-- 此函数用于获取精确的毫秒级时间戳&#…

进程和线程(1)

前言&#xff1a; 在计算机中cpu就像一座工厂&#xff0c;这个工厂里面有许多的车间&#xff0c;但是假如工厂的电力有限&#xff0c;一次只能供给一个车间使用&#xff0c;也就是说当一个车间在进行工作的时候&#xff0c;其他车间是不能工作的&#xff08;单个cpu只能运行一…

入门-C编程基础部分:16、 预处理器

飞书文档https://x509p6c8to.feishu.cn/wiki/DzSJwsGiTiXkeCkyEYUcuXbKnbf C 预处理是编译过程中一个单独的步骤&#xff0c;是一个文本替换工具而已。所有的预处理命令都是以井号&#xff08;#&#xff09;开头。 指令描述#define定义宏#ifdef如果宏已经定义&#xff0c;则返…

Ubuntu下安装和卸载MySQL

Ubuntu下安装和卸载MySQL 下面的演示系统版本&#xff1a;Ubuntu 24.04 更新系统软件包 在开始安装之前&#xff0c;建议先更新系统的软件包列表&#xff0c;以确保所有依赖项是最新的。 sudo apt update && sudo apt upgrade -y安装MySQL服务器 Ubuntu的官方软件…

【Python爬虫实战篇】--爬取豆瓣电影信息(静态网页)

网站&#xff0c;&#xff1a;豆瓣电影 Top 250 爬取豆瓣前250电影的信息&#xff0c; F12打开网页控制台&#xff0c;查看网页元素&#xff0c; 发现网页数据直接可以查看到&#xff0c;为静态网页数据&#xff0c;较为简单 目录 1.第一步使用urllib库获取网页 2.第二步使…

【Unity知识点详解】Unity中泛型单例的使用,兼容WebGL

今天来讲下Unity中泛型单例的使用&#xff0c;包含普通单例和继承MonoBehaviour的单例。重点是需要两种泛型单例兼容WebGL平台&#xff0c;话不多说直接开始。 泛型单例的设计目标 作为泛型单例&#xff0c;需要实现以下几个目标&#xff1a; 全局唯一&#xff0c;在程序的整个…