xgboost: 分割查找算法:贪婪算法、分桶算法

news2025/2/24 13:04:16

1、Basic Exact Greedy Algorithm

树学习的关键问题之一是找到最好的分割,如Eq(7)所示。

贪婪算法:分割查找算法枚举所有特征上的所有可能的分割。精确的贪婪算法如Alg. 1所示。为了高效地完成这一任务,算法必须首先根据特征值对数据进行排序,并按排序顺序访问数据,积累Eq(7)中结构得分的梯度统计量。现有的大多数单个树提升实现都支持精确贪婪算法,如scikit-learn[20]、R的gbm[21]以及XGBoost的单机版本。

Eq(7)在文章:xgboost:算法数学原理_KPer_Yang的博客-CSDN博客
L s p l i t = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ − ( ∑ i ∈ I g i ) 2 ∑ i ∈ I h i + λ ] − γ \mathcal{L}_{split}=\frac{1}{2}\left[\frac{(\sum_{i\in I_L}g_i)^2}{\sum_{i\in I_L}h_i+\lambda}+\frac{(\sum_{i\in I_R}g_i)^2}{\sum_{i\in I_R}h_i+\lambda}-\frac{(\sum_{i\in I}g_i)^2}{\sum_{i\in I}h_i+\lambda}\right]-\gamma Lsplit=21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2iIhi+λ(iIgi)2]γ
算法的流程如下所示:

在这里插入图片描述

m m m:特征的维度;

s o r t e d ( I , b y   x j k ) sorted(I, by \ x_{jk}) sorted(I,by xjk):在特征 k k k下的样本特征值进行排序,排序后按照划分点进行特征值划分,计算score。

2、 Approximate Algorithm

精确的贪婪算法非常强大,因为它贪婪地枚举了所有可能的分裂点。然而,当数据太大不能全部放入内存时,全部枚举不能做到。同样的问题也出现在分布式环境中。为了在这两种情况下支持有效的梯度树增强,需要一个近似算法。

**在Alg. 2中,首先根据特征分布的百分位数提出候选分裂点(具体标准将在第3.3节给出)。然后,该算法将连续特征映射到由这些候选点分割的桶中,汇总统计数据,并根据汇总的统计数据在分桶后的数据中找到最佳解决方案。**该算法有两种变体,这取决于给出分桶的时间。在合理的近似水平下,分位数策略可以获得与精确贪婪相同的精度。

  • 全局分桶方法在树构造的初始阶段提出所有候选分割,并在所有级别上使用相同的分割查找分桶。

  • 局部分桶在每次分裂后重新分桶。

在这里插入图片描述

G k v ← = ∑ j ∈ { j ∣ s k , v ≥ x j k > s k , v − 1 } g j G_{kv}\leftarrow=\sum_{j\in\{j\mid s_{k,v}\geq\mathbf{x}_{jk}>s_{k,v-1}\}}g_j Gkv←=j{jsk,vxjk>sk,v1}gj:按照每个桶计算 G G G.

H k v ← = ∑ j ∈ { j ∣ s k , v ≥ x j k > s k , v − 1 } h j H_{kv}\leftarrow=\sum_{j\in\{j|s_{k,v}\geq\mathbf{x}_{jk}>s_{k,v-1}\}}h_j Hkv←=j{jsk,vxjk>sk,v1}hj:按照每个桶计算 H H H.

注:个人理解,分桶其实相当于分裂时就按照每个桶分到左右分支,按照每个桶计算 G G G H H H,而不是一个个样本计算,遍历所有的特征值寻找分裂点。

对比:希格斯10M数据集的AUC收敛性比较。eps参数对应于近似草图的精度。这大致相当于分成1 / eps个桶。相同AUC的情况下,局部分桶需要更少的桶,因为它细化了分裂的候选数据;

在这里插入图片描述

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

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

相关文章

SpringMVC 参数绑定(视图传参到控制器)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Vue组件基础(父向子、子向父、子向子传值)

Vue组件基础-父向子、子向父、子向子传值一、Vue组件概念,创建和使用1.1 组件概念1.2 组件基础使用1.3 组件-scoped作用二、Vue组件通信2.1 父向子传值(props)2.2 子向父传值($emit)2.3 子与子传值(EventBus)一、Vue组件概念,创建和使用 1.1 组件概念 组件是可复用的Vue实例,封…

【100个 Unity实用技能】 | 脚本无需挂载到游戏对象上也可执行的方法

Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…

springboot使用ssh公钥连接mysql(含账号密码连接)

引言 在项目开发过程中,遇到了连接数据库时需要使用ssh公钥的情况。在本地使用navicat可以直接通过可视化界面去进行ssh的连接,但是在java中无法直接去进行连接。 后来经过查询资料,发现必须要在java中编写相关配置文件后才可以正常连接。 …

Linux内核源码进程原理分析

Linux内核源码进程原理分析一、Linux 内核架构图二、进程基础知识三、Linux 进程四要素四、task_struct 数据结构主要成员五、创建新进程分析六、剖析进程状态迁移七、写时复制技术一、Linux 内核架构图 二、进程基础知识 Linux 内核把进程称为任务(task),进程的虚…

Linux下MQTT客户端消息订阅与发布实现

MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议。它基于TCP协议,默认端口号为1883,为此,它也需要一个消息中间件 。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下…

蓝桥杯三月刷题 第一天

文章目录💥前言😉解题报告💥数列求值🤔一、思路:😎二、代码:💥质数🤔一、思路:😎二、代码:💥饮料换购🤔一、思路:😎二、代…

23.3.4打卡 AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)A~E

F题题面都看不懂嘞!开摆! 没找到合适的markdown, 截图网页翻译了我真是天才 比赛链接: https://atcoder.jp/contests/abc291 A题 题意 给出一个字符串, 找到第一个大写字母的下标 简单题就不多说了, 直接放代码 代码 void solve() {cin>>str;nstr.size();str"…

CentOS7操作系统安装nginx实战(多种方法,超详细)

文章目录前言一. 实验环境二. 使用yum安装nginx2.1 添加yum源2.1.1 使用官网提供的源地址(方法一)2.1.2 使用epel的方式进行安装(方法二)2.2 开始安装nginx2.3 启动并进行测试2.4 其他的一些用法:三. 编译方式安装ngin…

Kali、Metasploitable2部署

1、安装VMWare虚拟机及metasploitable2软件 链接:https://pan.baidu.com/s/1rqhjh1P9VJg5Q1esBgpZ-A 提取码:dc66 metasploitable2部署很简单,解压后,直接双击后缀.vmx文件,默认账户msfadmin/msfadmin,sud…

php实训报告

实训一 PHP语法基础 一、实训目的 掌握PHP数据类型知识。掌握PHP变量与常量的知识和运用方法。掌握PHP选择结构流程控制的知识及应用。掌握PHP循环结构流程控制的知识及应用。 二、实训工具或设备 主流 PC 机一台(要求安装 windows 操作系统)&#xff…

基于m-p条件查询代码生成

目录 起因 演示 使用 0.自定义注解 1.定义一个dto的条件查询类 2.调用主程序 效果图 小结 代码 注解 Dto类 完整代码 起因 最近两天一直写后台管理统计的增删改查(很少写增删改查,所以不是很熟练),几乎每个表都要涉及到条件查询的业务&#xf…

7个常用的原生JS数组方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 7个常用的原生JS数组方法一、Array.map()二、Array.filter三、Array.reduce四、Array.forEach五、Array.find六、Array.every七、Array.some总结一、Array.map() 作用&#…

Transformer 模型:入门详解(1)

动动发财的小手,点个赞吧! 简介 众所周知,transformer 架构是自然语言处理 (NLP) 领域的一项突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。事实证明,transformer 架构是…

【数据结构初阶】详解“树”

目录 前言 1.树概念及结构 (1)树的概念 (2)树的名词介绍 (3)树的表示 ​编辑 2.二叉树概念及结构 (1)概念 (2)特殊的二叉树 (3&#xff0…

sizeof与strlen练习

前言 本篇仅仅是为了更加了解sizeof操作符和strlen函数练习. 对于多条sizeof操作符和strlen函数出现,可能很容易造成头脑不清晰,做题时容易混乱. 目录前言一维数组字符数组情况1:情况2情况3二维数组练习之前请牢记下面这段话.这将是头脑清晰地关键. 提示: sizeof(数组名)&#…

MyBatis高频面试专题

一、介绍下MyBatis中的工作原理 1。介绍MyBatis的基本情况:ORM 2。原理: MyBatis框架的初始化操作处理SQL请求的流程 1.系统启动的时候会加载解析全局配置文件和对应映射文件。加载解析的相关信息存储在 Configuration 对象 Testpublic void test1(…

【ID:17】【20分】A. DS顺序表--类实现

时间限制1秒内存限制128兆字节题目描述用C语言和类实现顺序表属性包括:数组、实际长度、最大长度(设定为1000)操作包括:创建、插入、删除、查找类定义参考输入第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据…

HCIE-Cloud Computing LAB备考第二步:逐题攻破--第三题:迁移

迁移 题目 将一台AD服务器迁移到FusionCompute平台,并保障业务正常。 思维导图 markmap内容1 文字介绍 准备Rainbow服务器:在Windows系统安装Rainbow,必须保证其与源端主机、目的端平台互通。关闭防火墙。【首次登录rainbow时,需要注册用户名和密码,考试时根据考题要…

989. 数组形式的整数加法

989. 数组形式的整数加法https://leetcode.cn/problems/add-to-array-form-of-integer/ 难度简单226 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。 例如,对于 num 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组…