LightGBM的基本原理以及使用

article/2025/10/20 9:50:39

LightGBM的基本原理以及使用

LightGBM的基本原理

LightGBM是一款常用的GBDT工具包,由微软亚研院开发,速度比XGBoost快,精度稍低 。他的设计理念是:1.单个机器在不牺牲速度的情况下,尽可能使用上更多的数据。2.多机并行的时候,通信的代价尽可能的低,并且在计算上可以做到线性加速。
所以其使用分布式的GBDT,选择了基于直方图的决策树算法
在这里插入图片描述
直方图算法把连续的浮点特征值离散化为k个整数(也就是分桶bins的思想),比如[0,0.1)->0,[0.1,0.3)->1。并根据特征所在的bin对其进行梯度累加和个数统计,然后根据直方图,寻找最优的切分点。
在这里插入图片描述
直方图算法的优点:
1)减少内存占用
2)缓存命中率提高,直方图中梯度存放是连续的
3)计算效率提高,相对于XGBoost中预排序每个特征都要遍历数据,复杂度为O(#feature*#data),而直方图算法只需要遍历每个特征的直方图即可,复杂度为O(#feature*#bins)
4)在进行数据并行时,可大幅降低通信代价

单边梯度法

单边梯度抽样算法(Gradient-based One-Side Sampling)是从减少样本的角度出发, 排除大部分权重小的样本,仅用剩下的样本计算信息增益,它是一种在减少数据和保证精度上平衡的算法。
GOSS在进行数据采样的时候只保留了梯度较大的数据,但为了避免丢弃梯度小的数据而带来样本分布的改变,在计算增益时为梯度小的样本引入一个常数进行平衡。GOSS算法首先将要进行分裂的特征的所有取值按照绝对值大小降序排序,选取绝对值最大的 a%个数据。然后在剩下的较小梯度数据中随机选择b%个数据。接着将这 b 个数据乘以一个常数 1 − a b \frac{1−a}{b} b1a
,这样算法就会更关注训练不足的样本,而不会过多改变原数据集的分布。最后使用这( a + b ) % 个数据来计算信息增益。

特征互斥算法

高维度的数据往往是稀疏的,这种稀疏性启发我们设计一种无损的方法来减少特征的维度。通常被捆绑的特征都是互斥的(即特征不会同时为非零值,像one-hot),这样两个特征捆绑起来才不会丢失信息。如果两个特征并不是完全互斥(部分情况下两个特征都是非零值),可以用一个指标对特征不互斥程度进行衡量,称之为冲突比率,当这个值较小时,我们可以选择把不完全互斥的两个特征捆绑,而不影响最后的精度。EFB算法就是通过捆绑特征来降低特征的维度。未使用EFB算法的时间复杂度为

LightGBM的优缺点汇总

速度更快
1)LightGBM采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度
2)LightGBM在训练过程中采用单边梯度的算法过滤梯度小的样本,减少了大量的计算
3)LightGBM采用了基于Leaf-wise算法的增长策略构建树,减少了很多不必要的计算量
4)LightGBM采用优化后的特征并行、数据并行的方法加速计算,当数据量非常大的时候还可以采用投票并行的方法
5)LightGBM对缓存也进行了优化,增加了缓存的命中率
6)直接支持标签类变量
内存更小
1)LightGBM采用了直方图算法将存储特征值转变为存储bin值,且不需要特征值到样本的索引,降低了内存消耗
2)LightGBM在训练过程中采用了互斥特征捆绑算法减少了特征数量,降低了内存消耗
缺点
1)可能会长出比较深的决策树,产生过拟合。因此LightGBM在leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合
2)和所有Boosting算法一样通过增加方差来减小偏差

LightGBM的调参

和XGBOOST类似,LightGBM也有以下几类参数
XGBOOST的参数一般分为三类:

通用参数:控制宏观函数的调用
Booster参数:控制每一个booster生成的参数。booster参数一般可以调控模型的效果和计算代价。所以我们说的调参,很大程度上就是调整booster参数
学习目标参数:控制训练目标的表现。我们对于问题的划分主要体现在学习目标参数上。比如我们要做回归还是分类,主要体现在目标函数上面。
通用参数:
boosting_type:gbdt(默认):传统gbdt模型,dart: Multiple Additive Regression Trees,goss:Gradient-based One-Side Sampling. rf: Random Forest
n_jobs:默认全部核心-1,也可以自己设置核心数量
booster参数:
n_estimators: 基学习器数量默认10
learning_rate: 学习率,默认0.1
num_leaves :最大叶子节点树,它的数量应该小鱼2^(max_depth)
max_bin: 存储feature最大bin的数量,默认255
subsample_for_bin:用来构建直方图数据的样本数量
min_split_gain:最小切分的信息增益值,默认0
min_child_weight:决定最小叶子节点样本权重和(hessian)的最小阈值,若是基学习器切分后得到的叶节点中样本权重和低于该阈值则不会进一步切分,在线性模型中该阈值就对应每个节点的最小样本数。当它的值较大时,可以避免模型学习到局部的特殊样本,防止模型过拟合。但如果这个值过高,又会导致欠拟合,默认0.001
min_child_samples:默认20,叶子节点中最小的样本数量
subsample:样本抽样,默认1
subsample_freq:样本抽样的频率,默认1,也就时每个基学习器都会执行subsample,但也可以设置成n,表示每n个基学习器都会执行bagging
colsample_bytree:特征抽样比率,默认1
reg_alpha:L1正则系数
reg_lambda:L2正则系数
学习目标参数
objective:regression(默认)针对回归树,binary或者multiclass针对分类树,lambdarank正对排序器

首先对n_estimators以及learning_rate进行网格化搜索,发现当n_estimators达到50之后auc就没有明显提升了,learning_rate取0.1即可
在这里插入图片描述
对抽样类的参数进行调整,发现其实影响不大,取subsample=0.7,colsample_bytree=0.6
在这里插入图片描述
调整剪枝参数对于效果的影响不大,这里默认max_depth=10,min_child_samples=20
在这里插入图片描述
调整分箱函数max_bin,subsample_for_bin,我们发现max_bin超过50之后效果就不明显了,所以取max_bin=50,subsample_for_bin取默认
在这里插入图片描述
加入L2正则项,发现当reg_lambda=0.1的时候方差最小,所以取0.1
[mean: 0.87971, std: 0.00091, params: {‘reg_lambda’: 0.001},
mean: 0.87970, std: 0.00083, params: {‘reg_lambda’: 0.01},
mean: 0.87968, std: 0.00064, params: {‘reg_lambda’: 0.1},
mean: 0.87968, std: 0.00095, params: {‘reg_lambda’: 1}]


http://chatgpt.dhexx.cn/article/FrWngwMS.shtml

相关文章

从心电信号分类过渡到心音信号分类

首先刚接手这种关于信号的分类问题,以下可能会有不对的地方,接下去通过学习会对不正确的地方进行更正或者补充。 心电信号分类参考文献:Cardiologist-LevelArrhythmiaDetectionwithConvolutionalNeuralNetworks目标:对传感器采集…

LightGBM调参

GBDT模型的另一个进化版本:LightGBM。LigthGBM是boosting集合模型中的新进成员,由微软提供,它和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值&#…

XGBoost调参步骤及常见问题

XGBoost xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear) xgboost在目标函数中显示的加上了正则化项,基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。 正则项…

LightGBM原理介绍

简介 是GBDT模型的一个进化版本,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点(备注:容易出现过拟合的风险,需要限制树的最大深度来防止过…

lightbgm参数_参数调优LightGBM-商品分类-代码

1.直接调用LightGBM内嵌的cv寻找最佳的参数n_estimators(弱分类器数目) Otto商品分类数据 导入必要模型import lightgbm as lgbm import pandas as pd import numpy as np from sklearn.model_selection import GridSearchCV from sklearn.model_selection import StratifiedKF…

Xgboost回归四种调参方法及Python简单实现

前言 Xgboost对特征工程和数据处理比较友好,相比之下调参成为用好Xgboost重要的一环,本文分别从参数、调参方法、Python实现的维度进行梳理,作为调参思路的记录。 本文将关注以下几个问题: 1.Xgboost哪些参数需要调参&#xff…

Python机器学习10——梯度提升

本系列所有的代码和数据都可以从陈强老师的个人主页上下载:Python数据程序 参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021. 本系列基本不讲数学原理,只从代码角度去让读者们利用最简洁的Python代码实现机器学…

【机器学习】集成学习代码练习

课程完整代码:https://github.com/fengdu78/WZU-machine-learning-course 代码修改并注释:黄海广,haiguang2000wzu.edu.cn import warnings warnings.filterwarnings("ignore") import pandas as pd from sklearn.model_selection …

Keras 1.0 与 2.0 中 Convolution1D 的区别(其实是tf1.0 2.0 区别)

1.0 Convolution1D: 一维卷积层 nb_filter: 卷积核的个数 filter_length: 每个卷积核的长度 init: 权重初始化函数名称 weights: 权重初始化 border_mode: valid, same or full 如果是‘valid ’ 进行有效的卷积,对边界数据不处理,‘same表示保留…

数据挖掘入门_Task04

线性回归模型 线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。 可以直接使用sklearn建立线性模型: from sklearn.linear_model import LinearRegression model LinearRegression(n…

task4 建模调参

1 读取数据 import pandas as pd import numpy as np import warnings warnings.filterwarnings(ignore)note: 将整型变量的类型尽量压缩,逐步判断并转化为int8,int16,int32,int64 def reduce_mem_usage(df):""" iterate through all the columns …

深度学习与神经网络(七)——卷积神经网络之池化pooling 上采样upsample与降采样downsample(下采样)(subsample)(nn.MaxPool2d)

池化层pooling与采样 upsample与downsample upsample(interpolating)是上采样,是图片的放大 unpool是上采样的一种 downsample(subsample)是下采样,是图片的缩小 在卷积神经网络中使用的采样方式就是pooling,有点类似下采样,但不太…

有放回随机抽样:重要参数subsample

原理透析 确认了有多少棵树之后,我们来思考一个问题:建立了众多的树,怎么就能够保证模型整体的效果变强呢?集成的目的是为了模型在样本上能表现出更好的效果,所以对于所有的提升集成算法,每构建一个评估器&…

Subsample子采样(CloudCompare软件)

之前一直以为CC软件里面没有子采样这个功能,不过找了找之后发现还是有的,感觉这些小的功能挺有意思的,所以也就记录一下。 文章目录 一、Random采样二、space采样三、octree采样四、小结 一、Random采样 有时候我总是喜欢使用一些小的样本来…

Android Content Providers(三)——Contacts Provider

接着上篇Android Content Providers(二)——Contacts Provider继续,接下来要说明的是顶层的Contacts,Contacts是聚合联系人表,在之前讨论的RawContacts是原始联系人表,在Android通讯录的架构中,…

Android contacts 的详解

一、包结构分析 相关联的的projects 1、Contacts相关 联系人分为了Contacts和ContactsCommon,与sim卡联系人相关的是在Telephony中,数据库是在ContactsProvider,apk要push到/system/priv-app/Contacts下 2、Contacts的包结构 3、ContactsComm…

由ContactsProvider的升级引发的OTA首次开机卡白米问题分析

上午的宁静被一个OTA卡白米问题打破,接下来不断有人反馈不同机型都复现了OTA后卡白米,10.9号OTA升级到10.10号的版本,全机型问题,线刷没有问题,好吧,接下来就根据这些信息开始初步分析log吧! 初…

Android Content Providers(二)——Contacts Provider

Contacts Provider是Android中一个强大并且灵活的组件,负责管理系统通讯录的数据,对外提供访问接口来对系统通讯录进行访问和操作。 以下是Contacts Provider的组织结构图: 可以看出Android的系统通讯录是三层架构,通过URI进行访…

API Guides Contacts Provider (二)

Data From Sync Adapters 用户直接输入联系人的数据到设备中,但是也可以通过sync adapters从服务器上获取联系人的数据。sync adapter 会自动同步设备和服务器上的数据。sync adapter运行在后台,由系统来控制。系统调用ContentResolver去管理数据。 在A…

Android 7.0后SettingProvider ContactsProvider TelephonyProvider MediaProvider数据库位置

在Android7.0之后,很多Provider数据库的位置都发生了改变,在这记录下,免得以后又忘记了,找起来费劲。 1、SettingsProvider 在之前SettingsProvider是是以settings.db的方法存在,在Android N之后SettingsProvider数据存…