XGBoost算法-确定树的结构
我们在求解上面的w和obj的过程中,都是假定我们的树结构是确定的,因为当我们改变树中划分条件的时候,每个叶子节点对应的样本有可能是不一样的,我们的G和H也是不一样的,得到的最优w和最优obj肯定也是不一样的。

到底哪一棵回归树的划分方式是最优的呢?很明显,obj最小的回归树肯定是最合理的,所以我们需要找出导致obj最小的那颗回归树。
穷举法
首先我们能想到的就是把所有的可能性都枚举一遍,都计算一遍,分别求出最小obj,然后找出最好的树结构【划分方式】,但是没有啥实用价值,运算量太大【叶子节点数量也要穷举】。
精确贪心算法大致过程
树模型的学习策略,整体的思想就是分步+贪婪
首先我们将一棵树看做是一个个节点分裂而来的过程,第一步我们有一个根节点,根节点要做分裂,之后继续,每一步都对应一个节点的分裂,所以我们每次仅需要关心一个节点怎么分裂就可以了。

如何对一个节点进行划分?
假设一个节点进行划分前,含有5个样本ABCDE,经过某一个划分条件后,会将其落入左右两个节点,比如左节点AB,右节点CDE。对于一个节点而言,其中每一个样本对应的gi和hi我们都是知道的,那么也就意味着,每一个节点的Gi和Hi我们都是可以计算出来的。所以这个节点对应的最优的w和最小obj我们也是可以直接计算出来的。

因为最开始只有一个节点,所以T = 1,可以写成:

那么同样的道理,我们在分裂之后,左节点AB和右节点CDE每个样本的gi和hi也是知道的,Gi和Hi,以及w和obj也是可以计算出来的,分裂前和分裂后的obj都可以计算出来的。并且划分条件不同的时候,我们会得到不同的树结构,得到不同的分裂后的obj。

那么左右两次我们应该取哪个数结构作为根节点分裂的方式呢?我们可以利用增益gain判断,采用不同的算法,增益是不同的。ID3算法就是采用信息增益作为衡量指标,分类树采用的是基尼指数作为衡量指标。
不同的分裂方式会给我们带来不同的增益,在不同的算法中,使用衡量指标不同。
xgboost算法中,衡量指标直接利用前后obj的差值作为衡量指标,用obj前-obj后,当增益越大,表示损失下降的越多,表示当前的划分就越好。
所以我们需要计算每一种分裂方式的增益,从其中选出一个增益最大的数结构作为下一次分裂方式。
公式代入后,可以计算为【计算每一种分裂方式的gain,找出最大的gain】

每一步取最大,这种方式就是贪婪【贪心】的思想,后续的节点分裂同上。
那么什么时候就么有必要继续分裂了呢?
- 当最大的max gain 小于等于0【或者其他值】,表示损失已经几乎不再下降,没有必要继续分裂
- 当叶子节点个数包含样本个数小于等于1个的时候,分裂也没有意义了
- 限制叶子节点的个数,防止过拟合
精确贪心算法具体代码实现
我们看下具体的代码实现部分

其中:
- input中的I表示的本次要分裂节点中的样本集合
- input中的d表示特征的维度,有多少个特征
- 初始化的时候,gain为0,我们需要计算当前节点的G和H是多少
- for循环中,k=1表示第一个特征,k=2表示第二个特征
-
- 当选用第一个特征作为划分条件的时候k=1
- 令GL=0,HL=0
- 然后到了第二层循环,针对特征一重新排序
-
-
- j表示每一个样本
- 当我们确定1作为划分条件的时候,分裂后左侧就会有BD,右侧就会有AEC
-
-
-
-
- 每一个样本都对应自己的gi和hi
- 我们就可以计算出GL和GR、HL和HR
- 进而可以计算出Gain
-
-
-
-
- 当我们确定2作为划分条件时候,分裂后左侧有BDAE,右侧有C
- 。。。
-
-
- 当选用第二个特征作为划分条件时候。。。。
- 从上面所有的gain中找出最大的gain


综上:先遍历每一个特征,然后对特征进行排序。当特征非常多的时候,或者某一个特征内部枚举值非常多的时候,排序操作是非常耗费时间,有么有办法进行优化呢?精确贪心算法可以得到较为精确的计算,但是非常耗费时间。
优化思路
- 压缩特征个数;
- 对应每一个特征,减少特征值的数量,采样;
- 提高了速度,精确性是有减弱的
相关文章:
XGBoost算法-确定树的结构
我们在求解上面的w和obj的过程中,都是假定我们的树结构是确定的,因为当我们改变树中划分条件的时候,每个叶子节点对应的样本有可能是不一样的,我们的G和H也是不一样的,得到的最优w和最优obj肯定也是不一样的。 到底哪一…...
concurrentHashMap线程安全实现的原理
1. Segment 数组 ConcurrentHashMap 内部维护一个 Segment 数组,每个 Segment 都是一个小型的 HashMap。Segment 继承自 ReentrantLock,因此每个 Segment 都是一个可重入锁。 2. 并发级别 ConcurrentHashMap 在构造时可以指定并发级别(con…...
域名证书,泛域名证书,sni
文章目录 前言一、证书1.全域名证书2.泛域名证书 二、域名证书的使用1、浏览器请求域名证书流程对全域名证书的请求流程对泛域名证书的请求流程ssl client-hello携带server name 报文 2、浏览器对证书的验证流程 三、域名证书和sni 前言 本文介绍了泛域名证书和全域名证书的区别…...
Pytest夹具autouse参数使用。True表示会自动在测试中使用,而无需显式指定
1. 全局conftest文件日志记录功能 # 当前路径(使用 abspath 方法可通过dos窗口执行) current_path os.path.dirname(os.path.abspath(__file__)) # 上上级目录 ffather_path os.path.abspath(os.path.join(current_path,"../"))LOG_FILE_PATH f{ffather_path}/lo…...
Linux:归档及压缩
tar命令 • tar 集成备份工具 – -c:创建归档 – -x:释放归档 – -f:指定归档文件名称,必须在所有选项的最后 – -z、-j、-J:调用 .gz、.bz2、.xz 格式工具进行处理 – -t:显示归档中的文件清单 – -C:指定…...
jenkins 安装
jenkins安装 jenkins官网 中文网址 安装设置 所有jenkins版本 内存512M以上,10Gb磁盘;安装jdk,需要java8以上下载较新的版本,否则安装插件时可能报错版本过低 # 搜索java yum search java | grep -iE "jdk"# 安装jd…...
mysql学习教程,从入门到精通,MySQL 删除数据库教程(6)
1、MySQL 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。 在删除数据库过程中,务必要十分谨慎,因为在执行删除…...
C语言:刷题日志(2)
一.币值转换 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代…...
微带结环行器仿真分析+HFSS工程文件
微带结环行器仿真分析HFSS工程文件 工程下载:微带结环行器仿真分析HFSS工程文件 我使用HFSS版本的是HFSS 2024 R2 参考书籍《微波铁氧体器件HFSS设计原理》和视频微带结环行器HFSS仿真 1、环形器简介 环行器是一个有单向传输特性的三端口器件,它表明…...
怎么仿同款小程序的开发制作方法介绍
很多老板想要仿小程序系统,就是想要做个和别人界面功能类似的同款小程序系统,咨询瀚林问该怎么开发制作?本次瀚林就为大家介绍一下仿制同款小程序系统的方法。 1、确认功能需求 想要模仿同款小程序系统,那么首先需要找到自己想要…...
音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现
一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息࿰…...
0.91寸OLED屏幕大小的音频频谱,炫酷
(后文有详细介绍) 频谱扫描: 迷你音频频谱——频率扫描 音乐律动: 迷你音频频谱——频率扫描 迷你音频频谱——音乐2 迷你音频频谱——音乐3 一、简介 音频频谱在最小0.91寸OLED 屏幕上显示,小巧玲珑 二、应用场景 本…...
6. LinkedList与链表
一、ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素,由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比…...
Statcounter Global Stats 提供全球统计数据信息
Statcounter Global Stats 提供全球统计数据信息 1. Statcounter Global Stats2. Mobile & Tablet Android Version Market Share WorldwideReferences Statcounter Global Stats https://gs.statcounter.com/ Statcounter Global Stats are brought to you by Statcounte…...
Linux kernel中的dts dtsi dtb dtc dtb.img dtbo.img
1、问题 kernel与hsm会设置一些gpio,但是某些gpio会在kernel与hsm侧共同设置,导致最终的设置结果失败,将kernel侧在dts文件中设置的gpio注释掉之后,发现hsm设置gpio时还是失败 2、问题原因 因为dts文件不仅仅会影响kernel镜像&…...
微信小程序页面制作——个人信息
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
使用C++11的`std::async`执行异步任务:实战指南
使用C11的std::async执行异步任务:实战指南 在现代软件开发中,异步编程是提高应用程序性能和响应速度的重要手段。C11引入了std::async,使得编写异步任务变得更加简单和直观。本文将详细介绍如何使用std::async执行异步任务,并提…...
【高阶数据结构】B树、B+树、B*树
B树、B树、B*树 1. 常见的搜索结构2. B树概念3. B树的插入分析4. B树的插入实现4.1 B树的节点设计4.2 B树的部分插入实现14.3 B树的查找4.4 B树的部分插入实现24.5 插入key的过程4.7 B树的插入完整代码4.8 B树的简单验证4.9 B树的删除4.10 B树的性能分析 5. B树6. B*树7. 总结8…...
HBuilderx中vue页面引用scss样式
scss为css样式的预编译器,引入了变量、嵌入、混合、集成、引入等功能,相对于css样式,实现了样式的编程,具有更灵活的样式编写模式。 那么在HBuilderx中,“.vue”格式页面如何调用scss样式呢?详细如下&#…...
粒子群算法原理的示例介绍
一:粒子群优化算法的介绍 粒子群优化算法(PSO)是一种基于群体智能的优化算法,于1995年提出。它受到鸟群狩猎行为的启发,通过模拟鸟群或鱼群的社会行为来进行问题的求解。 基本原理 粒子群算法中,每个解决…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
