LightGBM 直方图优化算法

2023-10-27

给出下面这个广泛使用 直方图优化算法的ppt,本文是对该张ppt的解释。

直方图优化算法需要在训练前预先把特征值转化为bin,也就是对每个特征的取值做个分段函数,将所有样本在该特征上的取值划分到某一段(bin)中。最终把特征取值从连续值转化成了离散值。

下面是训练过程中利用直方图寻找最佳分割点的算法。(不需要像预排序一样,把特征的所有取值进行排序)

     首先,对于当前模型的每个叶子节点,需要遍历所有的特征,来找到增益最大的特征及其划分值,以此来分裂该叶子节点。

    然后,(在第二个for循环中)

  1. 对于每个特征,首先为其创建一个直方图,这个直方图存储了两类信息,分别是每个bin中样本的梯度之和(),还有就是每个bin中样本数量();
  2. 然后,遍历所有样本,累积上述的两类统计值到样本所属的bin中;
  3. 接着,遍历所有bin,分别以当前bin作为分割点,累加其左边的bin至当前bin的梯度和(SL)以及样本数量(nL),并与父节点上的总梯度和(Sp)以及总样本数量(np)相减,得到右边所有bin的梯度和(SR)以及样本数量(nR),带入公式,计算出增益,在遍历过程中取最大的增益,以此时的特征和bin的特征值作为分裂节点的特征和分裂特征取值。

上面第三步中涉及到了lightgbm的一个优化——Histogram(直方图)做差加速。一个容易观察到的现象:一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。通常构造直方图,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的k个桶。利用这个方法,LightGBM 可以在构造一个叶子的直方图后,可以用非常微小的代价得到它兄弟叶子的直方图,在速度上可以提升一倍。 

    下面是整理的直方图算法的优缺点(对比pre-sorted预排序)。

优点:

  1.  首先,最明显就是内存消耗的降低,直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用 8 位整型存储就足够了,内存消耗可以降低为原来的1/8。  
  2.  然后在计算上的代价也大幅降低,预排序算法每遍历一个特征值就需要计算一次分裂的增益,而直方图算法只需要计算k次(k可以认为是常数),时间复杂度从O(#样本数*#特征数)优化到O(k*#特征数)。  

缺点:

  1. 预处理能够忽略零值特征,减少训练代价;而直方图不能对稀疏进行优化,只是计算累加值(累加梯度和样本数)。但是,LightGBM对稀疏进行了优化:只用非零特征构建直方图。

最后一点是比较关键的一点,LightGBM为何使用直方图这种比较粗的分割节点方法,还能达到比较好的效果?

    虽然分割的精度变差了,但是对最后结果的影响不是很大,主要由于决策树是弱模型, 分割点是不是精确并不是太重要 ;较粗的分割点也有正则化的效果,可以有效地防止过拟合;即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升(Gradient Boosting)的框架下没有太大的影响。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LightGBM 直方图优化算法 的相关文章

  • 利用pytorch 实现深度残差网络(deep_residual_neural_network)

    利用pytorch 实现深度残差网络 深度残差网络 代码实现 输出结果 深度残差网络 残差网络是由来自Microsoft Research的4位学者提出的卷积神经网络 在2015年的ImageNet大规模视觉识别竞赛 ImageNet La
  • Spring Autowire自动装配

    在应用中 我们常常使用
  • C语言基础-选择语句之成绩判断

    文章目录 前言 一 C语言是什么 二 基础选择语句 1 if else 2 数据解读 3 switch case 总结 前言 只是基础 取悦自己 一 C语言是什么 官方解释 c语言是一门面向过程 抽象化的通用程序设计语言 广泛应用于底层开发
  • Vue使用echarts(完整版,解决各种报错)

    前言 Echarts 它是一个与框架无关的 JS 图表库 但是它基于Js 这样很多框架都能使用它 例如Vue 估计IONIC也能用 下次研究 因为我的习惯 每次新尝试做一个功能的时候 总要新创建个小项目 做做Demo 首先看自己电脑是否安装
  • k8s yml 样例

    文章目录 db deploy yml db service yml app deploy yml app service yml db deploy yml apiVersion apps v1beta1 kind Deployment m

随机推荐

  • linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

    在Linux中运行脚本时 会出现linux报错 bin bash M 解释器错误 没有那个文件或目录 这是因为我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况 主要还是Windows的换行符为 r n 而L
  • 2023电赛思路 E题:运动目标控制与自动追踪系统

    1 E题 运动目标控制与自动追踪系统 基本思路 1 1 实现步骤 设计红色光斑位置控制系统 选择合适的红色激光笔 并将其固定在一个二维电控云台上 使用电机和编码器来控制电控云台的水平和垂直运动 设计一个控制电路 可以通过输入控制信号来控制电
  • unity3d学习笔记-动画(3.导入动画)

    一 配置动画类型 在准备要导入 Unity 的动画时 动画师可以为每个单独的动画创建不同的文件 或者在一个文件中为所有内容制作动画 将包含多个动画的单个文件导入 Unity 时 可以在 剪辑 部分的导入设置中对其进行拆分 在这里 您可以定义
  • uniapp如何应用onNeedPrivacyAuthorization实现微信小程序隐私政策

    前言 微信小程序要求9 15日前实现隐私政策弹窗 但是uniapp文档一直没有更新 尝试直接使用wx onNeedPrivacyAuthorization 是可以生效的 步骤 在 微信小程序后台 的 设置 服务内容与声明 设置好小程序所需要
  • 【python】爬虫实战流程

    一 采集步骤 1 网页解析 2 引入第三方模块 import requests 请求数据 import json 数据解析 from jsonpath import jsonpath 数据解析 import pandas as pd 数据处
  • maven本地仓库已经有了所需的jar包,为什么还要去请求远程仓库

    问题 IDEA 中的maven 项目 一个jar包一直导入不进来 reimport 无效 从另一仓库把这个jar包拷贝到当前仓库 还是无效 mvn clean install e U 发现加载这个jar包时直接访问远程仓库 都没有从本地查找
  • win11安装xshell提示缺少mfc110.dll问题

    Download Visual C Redistributable for Visual Studio 2012 Update 4 from Official Microsoft Download Center
  • 微信 "{"errcode":-1,"errmsg":"system error"}"

    报这个json问题是因为你有一些参数没有 而产生的 例你没有写appid secret等的原因做成的 这个并不是微信服务器的问题 不要被其字面的意思混乱 唉 微信的提示 我也是醉了
  • Linux PCIe驱动框架分析(第三章)

    目录 项目背景 1 概述 2 流程分析 2 1 Device Tree 2 2 probe流程 2 3 中断处理 2 4 总结 项目背景 Kernel版本 4 14 ARM64处理器 使用工具 Source Insight 3 5 Visi
  • Qt基础:二、Qt4和Qt5兼容部分

    在pro中加入下面一句 greaterThan QT MAJOR VERSION 4 QT widgets 这句话的意思是QT版本超过4 就需要加上widgets
  • Angular ActivatedRoute 用法(官方文档

    允许访问与某出口中加载的组件关联路由信息 用于遍历 RouterState 树并从节点提取信息 查看 说明 class ActivatedRoute snapshot ActivatedRouteSnapshot url Observabl
  • printf()的用法

    http baike baidu com view 1427555 htm 原来做事情不仔细 每次看printf的用法都没懂过 但是也算蒙混过关 现在自己终于懂得生活 所以好好找了下 这篇文章确实不错 和大家分享一下 printf 函数 p
  • 【mmdetection】工具tools试用

    1 日志分析 analyze logs py https blog csdn net jy1023408440 article details 105701705 2 可视化数据集 browse dataset py python tool
  • JAVA上机题(3道)

    题目一 从控制台中读入一个文件名 判断该文件是否存在你的某个盘下 如果该文件存在 则在原文件相同路径下创建一个文件名为 copy 原文件名 的新文件 该文件内容为原文件的拷贝 首先肯定是要判断该文件名到底存不存在 我们定义一个方法 用来判断
  • NoClassDefFoundError: com/google/common/collect/Maps

    Error Exception in thread main java lang NoClassDefFoundError com google common collect Maps I believe you are missing g
  • Lua基础

    目录 Lua5 3参考手册 软件版本 日志及soc下载工具 os date函数说明 os date格式化符号 示例 显示效果 希望实现 实现思路 关于汉字显示的说明 编辑编译方法可参考 示例代码 运行log记录 PS eink 墨水屏操作库
  • Ubuntu报terminals database is inaccessible

    目录 方法一 1 执行以下命令 2 再次运行clear命令 3 执行以下命令 方法二 参考网址 在Ubuntu的命令行窗口中使用clear命令的时候报terminals database is inaccessible错误 clear te
  • Mac上实时网速、内存等显示

    对我这种有强迫症的 要监控各种参数 比如实时网速显示 这里给大家推荐 iStat Menus 1 官网下载 https bjango com mac istatmenus 2 注册码 仅供学习研究 误作商业用途 xxxx xxxx xxxx
  • Ubuntu 系统中安装htpasswd

    htpasswd是Apache附带的程序 htpasswd生成包含用户名和密码的文本文件 每行内容格式为 用户名 密码 用于用户文件的基本身份认证 当用户浏览某些网页的时候 浏览器会提示输入用户名和密码 比如awstats的日志报表 你肯定
  • LightGBM 直方图优化算法

    给出下面这个广泛使用 直方图优化算法的ppt 本文是对该张ppt的解释 直方图优化算法需要在训练前预先把特征值转化为bin 也就是对每个特征的取值做个分段函数 将所有样本在该特征上的取值划分到某一段 bin 中 最终把特征取值从连续值转化成