20240326-2-LightGBM面试题

LightGBM面试题

1. 简单介绍一下LightGBM?

LightGBM是一个梯度 boosting 框架,使用基于学习算法的决策树。 它可以说是分布式的,高效的。

从 LightGBM 名字我们可以看出其是轻量级(Light)的梯度提升机(GBM),其相对 XGBoost 具有训练速度快、内存占用低的特点。

LightGBM 是为解决GBDT训练速度慢,内存占用大的缺点,此外还提出了:

  • 基于Histogram的决策树算法

  • 单边梯度采样 Gradient-based One-Side Sampling(GOSS)

  • 互斥特征捆绑 Exclusive Feature Bundling(EFB)

  • 带深度限制的Leaf-wise的叶子生长策略

  • 直接支持类别特征(Categorical Feature)

  • 支持高效并行

  • Cache命中率优化

2. 介绍一下直方图算法?

直方图算法就是使用直方图统计,将大规模的数据放在了直方图中,分别是每个bin中样本的梯度之和 还有就是每个bin中样本数量

  • 首先确定对于每一个特征需要多少个箱子并为每一个箱子分配一个整数;

  • 将浮点数的范围均分成若干区间,区间个数与箱子个数相等

  • 将属于该箱子的样本数据更新为箱子的值

  • 最后用直方图表示

优点:

内存占用更小:相比xgb不需要额外存储预排序,且只保存特征离散化后的值(整型)

计算代价更小: 相比xgb不需要遍历一个特征值就需要计算一次分裂的增益,只需要计算k次(k为箱子的个数)

直方图做差加速:一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到,在速度上可以提升一倍

3. 介绍一下Leaf-wise和 Level-wise?

XGBoost 采用 Level-wise,策略遍历一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效的算法,因为它不加区分的对待同一层的叶子,实际上很多叶子的分裂增益较低,没必要进行搜索和分裂

LightGBM采用Leaf-wise的增长策略,该策略每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,Leaf-wise的优点是:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度;Leaf-wise的缺点是:可能会长出比较深的决策树,产生过拟合。因此LightGBM会在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合

4. 介绍一下单边梯度采样算法(GOSS)?

GOSS算法从减少样本的角度出发,排除大部分小梯度的样本,仅用剩下的样本计算信息增益,它是一种在减少数据量和保证精度上平衡的算法。与此同时,未了不改变数据的总体分布,GOSS对要进行分裂的特征按照绝对值大小进行排序,选取最大的a个数据,在剩下梯度小的数据中选取b个,这b个数据乘以权重 1 − a b \frac{1-a}{b} b1a,最后使用这a+b个数据计算信息增益。

5. 介绍互斥特征捆绑算法(EFB)?

互斥特征捆绑算法(Exclusive Feature Bundling, EFB)指出如果将一些特征进行融合绑定,则可以降低特征数量。
LightGBM的EFB算法将这个问题转化为图着色的问题来求解,将所有的特征视为图的各个顶点,将不是相互独立的特征用一条边连接起来,边的权重就是两个相连接的特征的总冲突值,这样需要绑定的特征就是在图着色问题中要涂上同一种颜色的那些点(特征)。另外,算法可以允许一小部分的冲突,我们可以得到更少的绑定特征,进一步提高计算效率。

6. 特征之间如何捆绑?

比如,我们在bundle中绑定了两个特征A和B,A特征的原始取值为区间 [ 0 , 10 ) [0,10) [0,10),B特征的原始取值为区间 [ 0 , 20 ) [0,20) [0,20),我们可以在B特征的取值上加一个偏置常量10,将其取值范围变为 [ 10 , 30 ) [10,30) [10,30),绑定后的特征取值范围为 [ 0 , 30 ) [0,30) [0,30)

7. LightGBM是怎么支持类别特征?

  • 离散特征建立直方图的过程

    统计该特征下每一种离散值出现的次数,并从高到低排序,并过滤掉出现次数较少的特征值, 然后为每一个特征值,建立一个bin容器。

  • 计算分裂阈值的过程

    • 先看该特征下划分出的bin容器的个数,如果bin容器的数量小于4,直接使用one vs other方式, 逐个扫描每一个bin容器,找出最佳分裂点;

    • 对于bin容器较多的情况, 先进行过滤,只让子集合较大的bin容器参加划分阈值计算, 对每一个符合条件的bin容器进行公式计算
      该 b i n 容器下所有样本的一阶梯度之和 该 b i n 容器下所有样本的二阶梯度之和 + 正则项 \frac{该bin容器下所有样本的一阶梯度之和 }{ 该bin容器下所有样本的二阶梯度之和} + 正则项 bin容器下所有样本的二阶梯度之和bin容器下所有样本的一阶梯度之和+正则项

  • 这里为什么不是label的均值呢?其实"label的均值"只是为了便于理解,只针对了学习一棵树且是回归问题的情况, 这时候一阶导数是Y, 二阶导数是1),得到一个值,根据该值对bin容器从小到大进行排序,然后分从左到右、从右到左进行搜索,得到最优分裂阈值。但是有一点,没有搜索所有的bin容器,而是设定了一个搜索bin容器数量的上限值,程序中设定是32,即参数max_num_cat。

  • LightGBM中对离散特征实行的是many vs many 策略,这32个bin中最优划分的阈值的左边或者右边所有的bin容器就是一个many集合,而其他的bin容器就是另一个many集合。

  • 对于连续特征,划分阈值只有一个,对于离散值可能会有多个划分阈值,每一个划分阈值对应着一个bin容器编号,当使用离散特征进行分裂时,只要数据样本对应的bin容器编号在这些阈值对应的bin集合之中,这条数据就加入分裂后的左子树,否则加入分裂后的右子树。

8. LightGBM的优缺点

优点:

  • 直方图算法极大的降低了时间复杂度;
  • 单边梯度算法过滤掉梯度小的样本,减少了计算量;
  • 基于 Leaf-wise 算法的增长策略构建树,减少了计算量;
  • 直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗
  • 互斥特征捆绑算法减少了特征数量,降低了内存消耗

缺点:

  • LightGBM在Leaf-wise可能会长出比较深的决策树,产生过拟合
  • LightGBM是基于偏差的算法,所以会对噪点较为敏感;

9. GBDT是如何做回归和分类的

  • 回归

    生成每一棵树的时候,第一棵树的一个叶子节点内所有样本的label的均值就是这个棵树的预测值,后面根据残差再预测,最后根据将第一棵树的预测值+权重*(其它树的预测结果)

  • 分类

    分类时针对样本有三类的情况,

    • 首先同时训练三颗树。
      • 第一棵树针对样本 x 的第一类,输入为(x, 0)。
      • 第二棵树输入针对样本 x 的第二类,假设 x 属于第二类,输入为(x, 1)。
      • 第三棵树针对样本 x 的第三类,输入为(x, 0)。
      • 参照 CART 的生成过程。输出三棵树对 x 类别的预测值 f1(x), f2(x), f3(x)。
    • 在后面的训练中,我们仿照多分类的逻辑回归,使用 softmax 来产生概率。
      • 针对类别 1 求出残差 f11(x) = 0 − f1(x);
      • 类别 2 求出残差 f22(x) = 1 − f2(x);
      • 类别 3 求出残差 f33(x) = 0 − f3(x)。
    • 然后第二轮训练,
      • 第一类输入为(x, f11(x))
      • 第二类输入为(x, f22(x))
      • 第三类输入为(x, f33(x))。
    • 继续训练出三棵树,一直迭代 M 轮,每轮构建 3 棵树。当训练完毕以后,新来一个样本 x1,我们需要预测该样本的类别的时候,便可使用 softmax 计算每个类别的概率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从0到1实现RPC | 07a 更新pom依赖方式

当前工程目录进行编译时 mvn clean install,会报错。原因是 rpc-core和rpc-demo-api不是一个spring boot项目,没有启动类。 默认在根pom文件中引入了spring的parent,导致子模块都是web项目,所以需要更新pom文件。 在根目录的pom文…

直播系统的短视频直播源码,带有多功能后台系统的直播短视频平台 APP 源码。

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 此源码是一个直播系统,集直播、短视频等功能,根据市场趋势开发并推出思乐直播APP,APP功能丰富且可在后台管理系统进行配置,做到按需求来…

UE5、CesiumForUnreal实现建筑白模生长动画效果

文章目录 1.实现目标2.实现过程2.1 实现原理2.2 具体代码2.3 应用测试3.参考资料1.实现目标 在上篇文章加载本地建筑轮廓GeoJson数据生成建筑白模的基础上,本文通过材质“顶点偏移”实现建筑白模生长效果,GIF动图如下所示: 2.实现过程 常用的实现建筑生长效果的方式有两种,…

随机潮流应对不确定性?计及分布式发电的配电系统随机潮流计算程序代码!

前言 随着分布式电源在电力系统中所占比例的不断扩大,研究分布式发电对系统稳态运行的影响势在必行。带分布式发电的潮流计算常常用来评估其并网后对系统的影响,同时它也是分析分布式发电对电网稳定性的影响等其他理论研究工作的基础。然而,许多分布式发…

Feature Pyramid Networks for object detection

FPN 总述1.引言2.相关工作3. Feature Pyramid NetworksBottom-up pathwayTop-down pathway and lateral connections 4. 应用用于 RPN用于 Fast R-CNN 核心代码复现FPN网络结构ResNet Bottleneck完整代码 总述 下图中,蓝色边框表示的是特征图,边框越粗表…

视频号带货真的能成为2024年赚钱的新风口吗?

随着互联网技术的飞速发展和消费者购物习惯的不断转变,视频号带货这一新兴商业模式逐渐走进大众视野。在短视频平台日益火爆的今天,很多人都在思考,视频号带货是否会成为2024年赚钱的新风口? 首先,视频号带货具备成为新风口的潜力…

【项目】棋海争锋

🎥 个人主页:Dikz12📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 项目介绍 WebSocket介绍 使用 项目创建 数据库设计 用户模块 登录接口 注册接口 获取用户信息接口 匹配模块 …

4.9学习总结

一.File类 (一).概述: File 类的对象代表操作系统的文件(文件、文件夹),File 类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件夹)等功…

安卓四大组件——Service篇

1.作用 长时间位于后台(无界面)完成用户指定操作 1.1两类状态 (a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于sta…

7-15 计算圆周率

题目链接&#xff1a;7-15 计算圆周率 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码 1. 代码实现 #include <stdio.h>// 分子&#xff1a;阶乘 static unsigned long long int JieCheng (unsigned int n) {if (n 1) {return 1;} else {return n * JieCheng(n…

spring-cloud微服务负载均衡器ribbon

注意&#xff1a;2020年前SpringCloud是采用Ribbon作为负载均衡实现&#xff0c;但是在2020后采用了LoadBalancer替代&#xff0c;所以要查看springboot&#xff0c;springcloud&#xff0c;sprincloudalibaba的版本链接对应&#xff0c;Ribbon负载均衡都是在springboot版本2.4…

[从0开始AIGC][Transformer相关]:算法的时间和空间复杂度

一、算法的时间和空间复杂度 文章目录 一、算法的时间和空间复杂度1、时间复杂度2、空间复杂度 二、Transformer的时间复杂度分析1、 self-attention 的时间复杂度2、 多头注意力机制的时间复杂度 三、transformer的空间复杂度 算法是指用来操作数据、解决程序问题的一组方法。…

前端二维码工具小程序使用说明书

一、产品概述 前端二维码工具小程序是一款便捷、高效、易用的二维码生成与识别工具。本产品支持根据用户输入的文本或链接生成二维码&#xff0c;同时提供扫一扫功能以识别二维码内容&#xff0c;并支持将识别到的内容复制到剪贴板。此外&#xff0c;产品还提供了美化功能&…

树状数组基础(未完结)

在学习树状数组之前&#xff0c;我们需要了解lowbit操作&#xff0c;这是一种位运算操作&#xff0c;用于计算出数学的二进制表达的最低位的1以及后面所有的0 写法&#xff1a; int lowbit(int x){return x&-x;} 这是利用了计算机存储整数的特征来写的&#xff0c;在计算…

第6章 6.1.2 格式化文本 compose函数(MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在MATLAB中&#xff0c;存在两个不同版本的compose函数&#xf…

Spring Cloud微服务入门(五)

Sentinel的安装与使用 安装部署Sentinel 下载Sentinel&#xff1a; https://github.com/alibaba/Sentinel/releases Sentinel控制台 https://localhost:8080 用户和密码为sentinel 使用Sentinel 加依赖&#xff1a; 写配置&#xff1a; 输入&#xff1a; java -Dserver.po…

OpenHarmony南向开发实例:【智能甲醛检测机】

样例简介 本项目是基于BearPi套件开发的智能甲醛检测系统Demo&#xff0c;该设备硬件部分主要由小熊派单板套件和和甲醛检测传感器组成。智能甲醛检测系统可以通过云和手机建立连接&#xff0c;可以在手机上设置甲醛浓度阈值&#xff0c;传感器感知到的甲醛浓度超过阈值之后&a…

阿赵UE学习笔记——25、动画状态机播放

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。之前学习了用蓝图直接控制骨骼动画或者蒙太奇动画的播放。这次学习一下通过状态机来控制动画播放。如果熟悉Unity引擎使用的朋友&#xff0c;看到这个状态机应该会觉得很熟悉&#xff0c;因为…

全球变暖蓝桥杯2018省赛真题

全球变暖蓝桥杯2018省赛真题 DFS大法 全球变暖 #include <bits/stdc.h> using namespace std; #define int long long bool flag; char a[1010][1010]; int cnt,n,ans0,pre_ans0,d[4][2] {1,0,-1,0,0,1,0,-1}; void dfs(int x,int y){if(x>n||x<0||y>n||y<…

科研学习|研究方法——定性数据的定量编码方法

一、关于数据的分类 数据可以根据不同的属性和特征进行分类。以下是数据常见的分类方式&#xff1a; 1. 数值型数据&#xff1a;表示为具体的数值&#xff0c;可以进行数学运算和统计分析。例如年龄、身高、体重等。2. 分类型数据&#xff1a;表示为不同的类别或标签&#xff0…