[机器学习]XGBoost(3)——确定树的结构

XGBoost的目标函数详见[机器学习]XGBoost(2)——目标函数(公式详解)

确定树的结构

之前在关于目标函数的计算中,均假设树的结构是确定的,但实际上,当划分条件不同时,叶子节点包含的样本不同,计算的 H j H_j Hj G j G_j Gj不同,每个叶子节点的W值也就不同
每一棵树都有属于自己最优的 O b j ∗ Obj^* Obj,因此要找一种最优的划分方式,即要找出使得 O b j ∗ Obj^* Obj最小的树作为基学习器的决策树

  1. 穷举法:计算所有可能的组合情况,然后选出最小的 O b j ∗ Obj^* Obj
    缺点:在实际应用中,穷举所有可能的分裂点通常是不可行的,因为计算成本太高。
  2. 精确贪心算法:每次选择最优的分裂点

XGBoost用的是精确贪心算法

精确贪心算法

在XGBoost中,用精确贪心算法在构建决策树的过程中选择最优的分裂点。这种方法旨在找到能够最大化目标函数增益的分裂点,从而提高模型的预测性能。

核心思想:

  • 贪心选择:在每一步分裂决策中,算法不是寻找全局最优解,而是做出局部最优选择。这意味着在当前步骤中,选择能够最大程度降低目标函数(损失函数和正则化项之和)的分裂点。
  • 精确计算:对于每个可能的分裂点,精确计算分裂后的增益。增益是通过比较分裂前后的目标函数值来计算的,即增益等于分裂前的目标函数值减去分裂后所有子节点目标函数值的总和。
  • 递归分裂:一旦选择了最优分裂点,算法将递归地对每个子节点重复分裂过程,直到满足停止条件(如达到最大树深度、增益小于阈值或子节点中的样本数小于某个阈值)。

算法步骤

  1. 初始化:开始时,所有样本都在根节点。初始化目标函数 Obj 为所有样本的损失之和。

  2. 计算增益:对于每个可能的分裂点,计算分裂后的增益。增益是通过比较分裂前后的目标函数值来计算的,即增益 = 父节点的目标函数值 - 子节点的目标函数值之和。

    • 对于每个子节点 j,目标函数 Obj_j 可以表示为 O b j j = γ + 0.5 ∗ ( G j 2 / ( H j + λ ) ) Obj_j = γ + 0.5 * (G_j^2 / (H_j + λ)) Objj=γ+0.5(Gj2/(Hj+λ))
      其中 G j G_j Gj 是子节点上所有样本梯度的和, H j H_j Hj 是Hessian的和,这两个都是可以计算的。
    • 增益 Gain 可以表示为: G a i n = O b j p a r e n t − [ O b j l e f t + O b j r i g h t ] Gain = Obj_{parent} - [Obj_{left} + Obj_{right}] Gain=Objparent[Objleft+Objright]
      其中, O b j p a r e n t Obj_{parent} Objparent 是父节点的目标函数值, O b j l e f t Obj_{left} Objleft O b j r i g h t Obj_{right} Objright 是分裂后左右子节点的目标函数值。
  3. 选择最佳分裂:在所有可能的分裂点中,选择增益最大的分裂点作为最优分裂。这个分裂点将被用来将当前节点分裂为两个子节点。

  4. 更新目标函数:使用最优分裂点分裂节点后,更新目标函数。计算每个子节点上的 G j G_j Gj H j H_j Hj,并更新 O b j Obj Obj

  5. 递归构建:对每个新创建的子节点重复步骤2-4,直到满足停止条件(如达到最大深度或增益小于阈值)。

什么时候停止划分?

  1. 最大增益小于一个很小的数:如果进一步划分带来的增益小于预设的最小增益阈值(min_split_gain),则不会进行分裂。这个阈值用于控制只有当分裂能够显著提高模型性能时,才会进行分裂。

  2. 叶子节点包含样本个数小于等于1:如果一个叶子节点中的样本数量小于或等于1,那么这个叶子节点将不再进一步划分。这是为了防止树的过拟合,因为单个样本的分裂不会提供泛化能力。

  3. 达到最大树深度:如果树的深度已经达到预设的最大深度(max_depth),则停止进一步划分。

算法伪代码

在这里插入图片描述

输入参数:
  • I:当前节点的所有样本实例。
  • d:特征的维度,即数据集中特征的数量。
初始化:
  • gain:初始化为0,用来存储在所有可能的分裂中找到的最大增益值。
  • G:所有样本梯度的总和。
  • H:所有样本Hessian的总和。
算法步骤:
  1. 遍历所有特征:对于每个特征 k(从1到特征总数 m),执行以下操作。

  2. 初始化左右子树的梯度和Hessian和: G L G_L GL H L H_L HL 分别初始化为0,用来存储左子树的梯度和和Hessian和。

  3. 对样本按特征值排序:将样本集 I 按照特征 k 的值进行排序。
    注意:不同特征会划分出不同的样本集,所以每次排序都要重新排。当特征非常多时,排序操作非常耗时

  4. 计算左右子树的统计量:遍历排序后的样本,逐步构建左子树的统计量(GL 和 HL),同时计算右子树的统计量(GR = G - GL 和 HR = H - HL)。

  5. 计算分裂增益:使用公式计算当前分裂点的增益 score:
    score = G L 2 H L + λ + G R 2 H R + λ − G 2 H + λ \text{score} = \frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{G^2}{H + \lambda} score=HL+λGL2+HR+λGR2H+λG2
    如果当前分裂点的增益大于之前记录的最大增益 gain,则更新 gain。

  6. 选择最佳分裂:在所有特征和所有可能的分裂点中,选择增益最大的分裂点作为最终的分裂点。

输出:

具有最大增益的分裂点,这将用于构建决策树的节点分裂。

算法优化——近似算法

针对不同特征会划分出不同的样本集,所以每次排序都要重新排的问题进行优化(以牺牲精度为代价)

  1. 压缩特征
  2. 采样特征值

压缩特征——列采样

按树随机采样(Tree-wise Subsampling):
在构建每棵树之前,从所有特征中随机选择一部分特征进行考虑。例如一共有X1……X10个特征,选3个特征X1,X5,X7,之后每次计算都只用这三个特征

优点:

  • 减少每棵树的计算量,因为每次分裂只考虑一部分特征,可能的分裂点减少,gain值的个数减少。
  • 有助于防止过拟合,因为模型不会对所有特征都过于敏感。

缺点:

  • 固定随机选择的特征可能会忽略一些对模型预测性能有重要影响的特征,导致模型无法充分利用所有特征信息。(每次都只用X1,X5,X7,可能忽略其他特征的信息)

按层随机采样(Level-wise Subsampling):
在构建树的每个层级时,都重新对特征进行采样。例如一共有X1……X10个特征,第一层根节点选3个特征X1,X5,X7,之后每次计算都重新选三个特征,第二层左节点用X2,X3,X4,第二层右节点用X1,X8,X10……

优点:

  • 减少每棵树的计算量,因为每次分裂只考虑一部分特征,可能的分裂点减少,gain值的个数减少
  • 确保每一层的分裂都有新的随机特征选择,增加了模型的多样性。
  • 通常比按树随机采样更复杂,但可能提供更好的性能。

分桶采样特征值

在构建树的每个层级时,对特征的值进行采样,而不是使用全部特征值。例如,对于每个特征 X i,将其值域分成 k 组,从每个特征的 k 组中随机选择一个值,这样总共选择了 k 个特征值。

优点:

  • 减少每个特征的计算量,因为每个特征的计算只考虑一部分特征值, H j H_j Hj G j G_j Gj计算量变小

注意:

  • 不是随机选取,是先分桶,再从每个桶里选一个代表
  • 理想化假设特征值均匀分布,每个桶里的特征值数量应该尽量接近,但实际并不是这样的,因此用加权分位法
加权分位法
  1. 收集梯度和Hessian:对于每个特征,收集所有样本的梯度 g i g_i gi 和Hessian h i h_i hi

  2. 计算权重:样本权重通常与梯度和Hessian有关。在XGBoost中,样本权重可以是Hessian的函数表示。
    在这里插入图片描述

  3. 排序:根据样本权重对特征的所有可能值进行排序。具有更高权重的样本在排序中会有更大的影响力。

  4. 计算分位数:在排序后的特征值上,根据预设的桶数量(由参数 max_bin 控制)计算分位数。这些分位数将用作桶的边界。

  5. 分桶:使用计算出的分位数将特征值域分割成若干个桶。每个桶代表特征值的一个区间。

  6. 选择代表值:从每个桶中选择一个代表值,这个值将用于构建模型。在XGBoost中,这个值通常是桶中所有样本梯度和的加权平均值。

策略

  1. 全局策略
    分一次桶,以后每次都按这个分法来分
  2. 局部策略
    每次都重新分一次桶

缺失值处理 Sparsity-aware Split Finding

实际场景拿到的数据是很稀疏的,有大量缺失值,因此需要处理缺失值

  1. 穷举法:为所有组合计算增益,选最大的
  2. 贪心法:把每个缺失值分别放到左边和右边计算gain,比较两个gain的大小,这样要计算2*缺失值个数
  3. 论文采用的方法:把所有缺失值当成整体看待,都同时放到左边计算一个gain,再把所有缺失值放到右边计算一个gain,比较两个gain的大小,然后把所有缺失值样本全部放到gain大的那边。这样只用计算2

注意:加权分位法中缺失值不参与排序和分桶

学习率 shrinkage

目的:为了防止过拟合
在这里插入图片描述

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

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

相关文章

51c视觉~合集33

我自己的原文哦~ https://blog.51cto.com/whaosoft/12163849 #Robin3D 3D场景的大语言模型:在鲁棒数据训练下的3DLLM新SOTA! 论文地址:https://arxiv.org/abs/2410.00255代码将开源:https://github.com/WeitaiKang/Robin3D 介绍 多模态…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

黑马Redis数据结构学习笔记

Redis数据结构 动态字符串 Intset Dict ZipList QuickList SkipList 类似倍增 RedisObject 五种数据类型 String List Set ZSet Hash

GTID详解

概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如&#xf…

怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法

怎么将pdf中的某一个提取出来?传统上,我们可能通过手动截取屏幕或使用PDF阅读器的复制功能来提取信息,但这种方法往往不够精确,且无法保留原文档的排版和格式。此外,很多时候我们需要提取的内容可能涉及多个页面、多个…

RTU 通信模块赋能智慧路灯远程开关管理,点亮智慧城市节能增效

RTU(Remote Terminal Unit)远端测控单元在智慧路灯远程开关管理系统中主要负责数据通信和开关控制。能够实现对路灯设备的远程监测和控制,将路灯的状态信息(如开关状态、故障信息、亮度参数等)上传到管理平台&#xff…

【Canvas与艺术】红色3号桌球

【注】 此图立体感还差点&#xff0c;以后改进吧。 【成图】 120*120的png图标&#xff1a; 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8&q…

从源码分析swift GCD_DispatchGroup

前言&#xff1a; 最近在写需求的时候用到了DispatchGroup&#xff0c;一直没有深入去学习&#xff0c;既然遇到了那么就总结下吧。。。。 基本介绍&#xff1a; 任务组&#xff08;DispatchGroup&#xff09; DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…

线性代数基础与应用:基底 (Basis) 与现金流及单期贷款模型(中英双语)

具体请参考&#xff1a;https://web.stanford.edu/~boyd/vmls/ 下面的例子来源于这本书。 线性代数基础与应用&#xff1a;基底 (Basis) 与现金流及单期贷款模型 在线性代数中&#xff0c;基底&#xff08;Basis&#xff09;是一个重要的概念&#xff0c;广泛应用于信号处理、…

【python】OpenCV—Image Moments

文章目录 1、功能描述2、图像矩3、代码实现4、效果展示5、完整代码6、涉及到的库函数cv2.moments 7、参考 1、功能描述 计算图像的矩&#xff0c;以质心为例 2、图像矩 什么叫图像的矩&#xff0c;在数字图像处理中有什么作用&#xff1f; - 谢博琛的回答 - 知乎 https://ww…

【漏洞复现】CVE-2022-45206 CVE-2023-38905 SQL Injection

漏洞信息 NVD - CVE-2022-45206 Jeecg-boot v3.4.3 was discovered to contain a SQL injection vulnerability via the component /sys/duplicate/check. NVD - CVE-2023-38905 SQL injection vulnerability in Jeecg-boot v.3.5.0 and before allows a local attacker to…

现代风格VUE3易支付用户控制中心

适用系统 彩虹易支付 技术栈 vitevue3elementuiplusphp 亮点 独立前端代码,扩展开发,不改动系统文件,不影响原版升级 支持功能订制 界面预览

开发技术-Java改变图片格式

图片上传页未做控制&#xff0c;导致上传的是GIF格式&#xff0c;导致图片识别失败。需要将GIF格式转为JPEG格式。 代码&#xff0c;是找AI写的&#xff0c;记录一下&#xff1a; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; im…

【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…

Unity-Editor扩展GUI基本实现一个可拖拉放的格子列表

短短几百行代码,好吧,又是“参考”了国外的月亮 操作,还真地挺自然的。。。。。。国外的实现有点小牛 拖拉,增加+ 一个Element 鼠标左键长按,可以出提示 鼠标右键,清除Element, 有点小bug,不是很自然地完全清除, using System.Collections; using System.Collecti…

修改vscode中emmet中jsx和tsx语法中className的扩展符号从单引号到双引号 - HTML代码补全 - 单引号双引号

效果图 实现步骤 文件 > 首选项 > 设置搜索“”在settings.json中修改&#xff0c;增加 "emmet.syntaxProfiles": {"html": {"attr_quotes": "single"},"jsx": {"attr_quotes": "double","…

首批|云轴科技ZStack成为开放智算产业联盟首批会员单位

近日 &#xff0c;在Linux基金会AI & Data及中国开源软件推进联盟的指导之下&#xff0c;开放智算产业联盟成立大会在北京成功召开。在大会上&#xff0c;联盟首次公布了组织架构并颁发了首批会员单位证书。凭借ZStack AIOS平台智塔和在智算领域的技术创新&#xff0c;云轴…

HTN 78A3 6V~140V输入,3A实地异步降压变换器

1、特征 3A降压&#xff0c;内置250mΩ高侧功率管 输入电压范围:6V~140V 脉冲跳跃模式使得轻载下高效率 最高1MHZ可编程开关频率 COT纹波电压控制架构 欠压保护、过流保护和过热关断保护 无铅封装&#xff0c;ESOP8 2、应用 二轮电瓶车 太阳能系统 高压电池组 …

以太网帧、IP数据报图解

注&#xff1a;本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式&#xff08;包含相关例题讲解&#xff09; Rebecca.Yan已于 2023-05-27 14:13:19 修改 一、基础知识 UDP 段、IP 数据包&#xff0c;以太网帧图示 通信过程中&…

汽车IVI中控开发入门及进阶(三十九):ADAS的车道线检测

概述: 自动驾驶汽车中确保驾驶员和乘客安全环境的重要系统之一是高级驾驶员辅助系统(ADAS)。自适应巡航控制、自动制动/转向、车道保持系统、盲点辅助、车道偏离警告系统和车道检测都是ADAS的示例。车道检测向车辆的智能系统显示特定于车道线结构几何特征的信息,以显示车道…