什么是直方图算法

什么是直方图算法?

直方图算法是一种优化决策树分裂点搜索效率的算法,被广泛应用于像 LightGBMXGBoost 这样的梯度提升决策树框架中。其核心思想是通过将连续特征的取值范围离散化为有限的区间(称为 bins),在这些区间上计算统计量以确定最佳分裂点。


直方图算法的核心流程

  1. 特征值离散化(分桶化):

    • 连续特征被分为固定数量的区间(bins),每个区间表示一段范围内的值。
    • 例如,将一个特征值的范围 [ 0 , 100 ] [0, 100] [0,100] 划分为 10 个区间,每个区间的大小是 10,那么特征值 x = 15 x=15 x=15 将被映射到区间 [ 10 , 20 ] [10, 20] [10,20] 对应的 bin。
  2. 构建直方图:

    • 在每轮训练中,遍历样本数据,为每个 bin 累计对应的梯度和统计量(如样本权重、样本数量等)。
    • 例如:
      • Bin 1:梯度和 G 1 G_1 G1,样本数量 N 1 N_1 N1
      • Bin 2:梯度和 G 2 G_2 G2,样本数量 N 2 N_2 N2
  3. 计算分裂增益:

    • 遍历直方图中的每个分裂点,基于直方图统计量(如梯度和、样本权重)计算分裂增益。
    • 常用公式(以均方误差为例):
      Gain = G left 2 H left + G right 2 H right − G total 2 H total \text{Gain} = \frac{G_\text{left}^2}{H_\text{left}} + \frac{G_\text{right}^2}{H_\text{right}} - \frac{G_\text{total}^2}{H_\text{total}} Gain=HleftGleft2+HrightGright2HtotalGtotal2
      其中:
      • G left G_\text{left} Gleft G right G_\text{right} Gright:左、右子节点的梯度和;
      • H left H_\text{left} Hleft H right H_\text{right} Hright:左、右子节点的二阶导数和(Hessian)。
  4. 选择最佳分裂点:

    • 根据分裂增益选择直方图中使增益最大的分裂点。

为什么使用直方图算法?

直方图算法的目标是加速分裂点搜索过程,特别是在大规模数据和高维特征场景下。以下是使用直方图算法的原因:

  1. 时间复杂度降低:

    • 传统分裂点搜索:对每个特征值进行排序,并在排序后的值之间计算增益,时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn)
    • 直方图算法:通过分桶,每个特征的分裂点搜索复杂度仅为 O ( k ) O(k) O(k),其中 k k k 是 bin 的数量,通常远小于样本数 n n n
  2. 内存效率提高:

    • 连续特征被映射为离散的整数(bin 索引),内存占用显著降低。
    • 离散化后的统计量只需在固定数量的 bin 上累加,而不是存储每个样本的原始值。
  3. 支持稀疏特征:

    • 对于稀疏特征(如文本特征的TF-IDF矩阵),直方图算法可以高效处理零值分布。
  4. 易于并行化:

    • 直方图算法天然适合并行化。多个特征的直方图可以独立构建,特征的分裂点选择也可以并行化完成。

直方图算法的特点

  1. 快速性:

    • 特征值离散化后,分裂点搜索在离散的 bin 空间进行,计算复杂度大幅降低。
  2. 精度折衷:

    • 离散化会导致信息损失(如分裂点的精度降低),但通常通过增加 bin 的数量可以减轻这一问题。
    • 默认 bin 数量通常为 256,兼顾了效率与性能。
  3. 增量更新机制:

    • 在树的增量构建过程中,直方图可以高效地从父节点继承统计量,并根据样本分配情况快速更新,避免重复计算。

直方图算法的改进(以LightGBM为例)

  1. 单树共享直方图:

    • 在同一棵树的构建过程中,叶子节点之间共享直方图,减少重复构建带来的额外开销。
  2. 区间剪枝:

    • 在特征分裂时,LightGBM会通过前序剪枝技术限制分裂搜索的区间,进一步提高效率。
  3. 稀疏直方图优化:

    • 对于稀疏数据,LightGBM只对非零值部分的 bin 进行统计,加速计算。

直方图算法的数学直观

假设某特征的连续取值范围为 [ 0 , 100 ] [0, 100] [0,100],包含 1,000,000 个样本。传统算法需要对这 1,000,000 个样本排序,计算分裂点。而直方图算法将其划分为 256 个 bins,每个 bin 的范围是 [ i × 0.39 , ( i + 1 ) × 0.39 ] [i \times 0.39, (i+1) \times 0.39] [i×0.39,(i+1)×0.39](0.39 是 100 / 256 100/256 100/256)。

  • 传统方法:

    • 遍历每个样本点可能的分裂点,计算增益。
    • 时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn)
  • 直方图方法:

    • 每个样本点被映射到对应的 bin 索引。
    • 在 256 个 bins 中搜索最佳分裂点,时间复杂度为 O ( k ) O(k) O(k)

最终,直方图算法实现了计算时间与内存使用的显著优化,同时保持了模型性能。

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

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

相关文章

如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?

以下是使用 Python 的爬虫技术获取淘宝天猫商品价格信息的两种常见方法: 方法一:使用 Selenium 一、环境准备: 安装 selenium 库:在命令行中运行 pip install selenium。下载浏览器驱动:如 ChromeDriver(确…

Linux系统程序设计--2. 文件I/O

文件I/O 标准C的I/O FILE结构体 下面只列出了5个成员 可以观察到,有些函数没有FILE类型的结构体指针例如printf主要是一些标准输出,因为其内部用到了stdin,stdout,stderr查找文件所在的位置:find \ -name stat.h查找头文件所…

Spark 中 RDD 的诞生:原理、操作与分区规则

Spark 的介绍与搭建:从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式之Yarn模式的原…

[2024最新] macOS 发起 Bilibili 直播(不使用 OBS)

文章目录 1、B站账号 主播认证2、开启直播3、直播设置添加素材、隐私设置指定窗口添加/删除 窗口 4、其它说明官方直播帮助中心直播工具教程 目前搜到的 macOS 直播教程都比较古早,大部分都使用 OBS,一番探索下来,发现目前已经不需要 OBS了&a…

内核设备树,你真的了解吗?

在嵌入式系统和内核开发中,设备树(Device Tree, 简称 DT)扮演着至关重要的角色,帮助系统在启动时准确识别硬件配置并匹配合适的驱动程序。虽然设备树应用广泛,但其结构、工作机制及应用细节却不总是被深入理解。本文将…

yelp数据集上识别潜在的热门商家

yelp数据集是研究B2C业态的一个很好的数据集,要识别潜在的热门商家是一个多维度的分析过程,涉及用户行为、商家特征和社区结构等多个因素。从yelp数据集里我们可以挖掘到下面信息有助于识别热门商家 用户评分和评论分析 评分均值: 商家的平均评分是反映其…

Mac如何将多个pdf文件归并到一个

电脑:MacBook Pro M1 操作方式: very easy 选中想要归并的所有pdf文件,然后 右键 -> quick actions -> Create PDF 然后就可以看到将所选pdf文件归并为一个pdf的文件了

华为eNSP实验:IP Source Guard

一:IP Source Guard: IP Source Guard(简称IPSG)是一种基于二层接口的源IP地址过滤技术,用于防止恶意主机伪造合法主机的IP地址进行网络攻击。以下是对IP Source Guard的详细解析: 基本概念: IP Source Gu…

API接口精准获取商品详情信息案例

在当今数字化时代,电子商务平台的蓬勃发展,使得商品信息的获取变得尤为重要。API(Application Programming Interface,应用程序编程接口)作为连接前端用户界面与后端服务的桥梁,扮演着至关重要的角色。本文…

比流计算资源效率最高提升 1000 倍,“增量计算”新模式能否颠覆数据分析?

作者 | 关涛 云器科技CTO 数据平台领域发展 20 年,逐渐成为每个企业的基础设施。作为一个进入“普惠期”的领域,当下的架构已经完美了吗,主要问题和挑战是什么?在 2023 年 AI 跃变式爆发的大背景下,数据平台又该如何演…

牧神记开分9.7,2024新国漫巅峰出现了

现在国漫越来越卷了,卷播放量也卷评分。最近,b站上线不久的国漫《牧神记》开分9.7,口碑还是相当不错的,已经和《凡人修仙传》评分齐平。这部国漫仅仅播出4集,为什么就能获得这么高的评分呢?下面就一起来看看…

MeterSphere接口自动化-ForEach循环

接口自动化场景:一个接口根据不同的参数取值来运行测试,本场景中只有一个参数来去不同值。举例如下: https:://test.csdn/query?placementList1接口,测试id1,2,3时,断言接口返回的data数据都有返回。(当然…

ServletContext介绍

文章目录 1、ServletContext对象介绍1_方法介绍2_用例分析 2、ServletContainerInitializer1_整体结构2_工作原理3_使用案例 3、Spring案例源码分析1_注册DispatcherServlet2_注册配置类3_SpringServletContainerInitializer 4_总结 ServletContext 表示上下文对象,…

聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 11月5日消息 比亚迪腾势D9登陆泰国 苹果 iOS 18.2 将发布 真我GT7 Pro防尘防水细节 小米15 Ultra最快明年登场 …

【Linux系统编程】第四十四弹---从TID到线程封装:全面掌握线程管理的核心技巧

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、tid是什么 1.1、理解库 1.2、理解tid 1.3、tid中线程局部存储 2、封装线程 2.1、基本结构 2.2、函数实现 2.3、使用…

智慧城市路面垃圾识别系统产品介绍方案

方案介绍 智慧城市中的路面垃圾识别算法通常基于深度学习框架,这些算法因其在速度和精度上的优势而被广泛采用。这些模型能够通过训练识别多种类型的垃圾,包括塑料袋、纸屑、玻璃瓶等。系统通过训练深度学习模型,使其能够识别并定位多种类型…

大模型人工智能课程全栈完整学习路径

嘿,朋友们,今天我们聊点高级的——大模型人工智能课程的全栈学习路径。不过别慌,虽然听起来高大上,但咱们慢慢来。从零开始,一步步带你走进这个神奇的世界。喝杯咖啡,穿上最舒适的拖鞋,准备好踏…

「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用

本篇将带你实现一个番茄钟倒计时应用,用户可以设置专注时间和休息时间的时长,点击“开始专注”或“开始休息”按钮启动计时,应用会在倒计时结束时进行提醒。番茄钟应用对于管理时间、提升工作效率非常有帮助,并且还会加入猫咪图片…

STM32H503开发(1)----开发板测试

STM32H503开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载产品特性参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32H503 & SENSOR是一款基于STM32H5系列微控制器的评估套件。该微控制器采用了40nm工艺制造,具有更…

HTB:Perfection[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What version of OpenSSH is running? 使用nmap对靶机TCP端口进行开放扫描 2.What programming language is the web application written in? 使用浏览器访问靶机80端口页面,并通过Wappalyzer查看页面脚本语言 3.Which e…