XGBoost-工程实现与优缺点(中)

2023-11-13

工程实现

块结构设计

我们知道,决策树的学习最耗时的一个步骤就是在每次寻找最佳分裂点是都需要对特征的值进行排序。而 XGBoost 在训练之前对根据特征对数据进行了排序,然后保存到块结构中,并在每个块结构中都采用了稀疏矩阵存储格式(Compressed Sparse Columns Format,CSC)进行存储,后面的训练过程中会重复地使用块结构,可以大大减小计算量。

  • 每一个块结构包括一个或多个已经排序好的特征;
  • 缺失特征值将不进行排序;
  • 每个特征会存储指向样本梯度统计值的索引,方便计算一阶导和二阶导数值;

这种块结构存储的特征之间相互独立,方便计算机进行并行计算。在对节点进行分裂时需要选择增益最大的特征作为分裂,这时各个特征的增益计算可以同时进行,这也是 Xgboost 能够实现分布式或者多线程计算的原因。

缓存访问优化算法

块结构的设计可以减少节点分裂时的计算量,但特征值通过索引访问样本梯度统计值的设计会导致访问操作的内存空间不连续,这样会造成缓存命中率低,从而影响到算法的效率。

为了解决缓存命中率低的问题,XGBoost 提出了缓存访问优化算法:为每个线程分配一个连续的缓存区,将需要的梯度信息存放在缓冲区中,这样就是实现了非连续空间到连续空间的转换,提高了算法效率。

此外适当调整块大小,也可以有助于缓存优化。

“核外”块计算

当数据量过大时无法将数据全部加载到内存中,只能先将无法加载到内存中的数据暂存到硬盘中,直到需要时再进行加载计算,而这种操作必然涉及到因内存与硬盘速度不同而造成的资源浪费和性能瓶颈。为了解决这个问题,XGBoost 独立一个线程专门用于从硬盘读入数据,以实现处理数据和读入数据同时进行。

此外,XGBoost 还用了两种方法来降低硬盘读写的开销:

块压缩:对 Block 进行按列压缩,并在读取时进行解压;
块拆分:将每个块存储到不同的磁盘中,从多个磁盘读取可以增加吞吐量。

优点:

  1. 精度更高:GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost
    引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;
  2. 灵活性更强:GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,(使用线性分类器的
    XGBoost 相当于带 L1 和 L2 正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题))。此外,XGBoost
    工具支持自定义损失函数,只需函数支持一阶和二阶求导;
  3. 正则化:XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 L2
    范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合;
  4. Shrinkage(缩减):相当于学习速率。XGBoost
    在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间;
  5. 列抽样:XGBoost 借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算;
  6. 缺失值处理:XGBoost 采用的稀疏感知算法极大的加快了节点分裂的速度;
  7. 可以并行化操作:块结构可以很好的支持并行计算。

缺点:

  1. 虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量,但在节点分裂过程中仍需要遍历数据集;
  2. 预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的索引,相当于消耗了两倍的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XGBoost-工程实现与优缺点(中) 的相关文章

  • linux—通配符详解及总结

    本博客主要详解关于linux中常使用的通配符的知识点 主要分为三个步骤 通配符 和 的详细解释 举例截图说明 个人的总结理解 一 通配符 和 的详细解释 ps 因为通配符 中可添加很多变量 所以这里我会简单举出几个例子来说明 其他情况请类比
  • R 和 Rstudio 在线更新

    R 在线更新 最近安装 R 包的时候老是会遇到有些包不适应老版本 无奈还是更新了新的版本 卸载重装就太麻烦了 而且以前的包还需要重新加载 在线更新是最好的方法 可以直接在 Rstudio 中直接更新 直接运行以下命令就行 install p
  • Python还能这样学?独一档的学习路线与方法!两个月就能彻底掌握

    为什么要选择学习Python 我大学本专业当时学的是过时很久的工程物流管理 经常跟学长学姐们聊到他们的就业情况 然后自己也对未来的就业之路产生了很大的怀疑 后面经过一些了解 以及学长学姐的介绍 知道了Python 后面深入的了解了后 我果断
  • 基于Protege的知识建模实战

    一 Protege简介 用途和特点 1 Protege简介 Protege是斯坦福大学医学院生物信息研究中心基于Java开发的本体编辑和本体开发工具 也是基于知识的编辑器 属于开放源代码软件 这个软件主要用于语义网中本体的构建 是语义网中本
  • 华为OD机试真题B卷 Java 实现【停车场车辆统计】,附详细解题思路

    一 题目描述 特定大小的停车场 数组cars 表示 其中1表示有车 0表示没车 车辆大小不一 小车占一个车位 长度1 货车占两个车位 长度2 卡车占三个车位 长度3 统计停车场最少可以停多少辆车 返回具体的数目 二 输入描述 整型字符串数组
  • DHCP DNS 综合案例分析

    1 首先我们来配置一下192 168 1 2这台机器 1 1 操作系统 windows server 2003 R2 1 2 IP 192 168 1 2 24 GW 1922 168 1 1 DNS 192 168 1 2 注意 这台机器
  • 阿里云盘内测_【邀请码】阿里云盘内测码分享

    备受瞩目的阿里云网盘已在苹果App Store上架 并更名 阿里云盘 最新版本更名为v1 0 1 8 月下旬 阿里巴巴推出了一款名为 阿里云网盘 的独立 App 该应用开发者为阿里旗下的阿里云团队 定位是为 C 端用户提供可靠安全的存储备份
  • CUBEIDE 使用指南

    cubeIDE includes 下一直有一个错误的路径 如图 不知道什么原因引入了一个错误的路径怎么也消不掉 最后发现在工程文件里 用记事本等打开 cproject文件 删掉对应路径就好了 图是已经删掉的了 2 include 路径问题
  • QT信号与槽机制

    QT开发 QT信号与槽机制 一 QT消息模型 QT封装了具体操作系统的消息机制 遵循经典的GUI消息驱动事件模型 QT定义了与操作系统消息相关的自己的概念 即信号与槽 信号signal是由操作系统产生的消息 槽slot是程序中的消息处理函数
  • Openmv,stm32串口(定时器配置)

    新手学习记录中 得先有from pyb import UART的包以及import json 初始化uart UART 3 115200 表示是在串口3处 其波特率为115200 需要看openmv的原理图 看uart3的TX和RX是哪两个
  • sklearn矩阵分解类库学习

    sklearn decomposition模块提供矩阵分解算法 其他PCA NMF 或ICA 其中大部分算法都被视为降维技术 主成分分析 sklearn decomposition PCA n components None copy Tr
  • 清空数组的方法

    直接置空 堆内存中的值其实没变 var b 1 2 3 4 var a b a console log a console log b splice splice表示起始位置 第二个参数表示删除的长度 第三个参数表示插入的元素 var ar
  • spark-on-mesos

    参考网址 https spark apache org docs latest running on mesos html https mesos cn gitbooks io mesos cn content OverView spark
  • 头歌python实训通关六——统计数字和字母

    第1关 统计文件中大写字母出现的次数 任务描述 本关任务 编写程序 统计一个文本文件中出现的大写字母和它们出现的次数 并输出 相关知识 为了完成本关任务 你需要掌握 1 读文本文件 2 字典操作 3 列表操作 4 字符串操作 编程要求 根据
  • 改进的KMeans 点云聚类算法 根据体元中的点数量计算点密度,并获取前K个点密度最大的体元作为初始聚类中心(附 matlab 代码)

    KMeans函数的主要逻辑如下 使用InitCenter函数初始化聚类中心 该函数根据体元密度选择初始聚类中心 该函数的输入参数包括数据 data 聚类中心数量 centerNum 和体元数量 voxelNum 根据点云的取值范围计算包围盒
  • 东方财富选股公式

    1 今天的公式是东方财富通可用的 部分公式其它软件 比如通达信 也是可以用的 但不保证完全通用 其它软件 大智慧 通达信 专用公式正在整理中 后续发给大家 2 导入公式过程 打开东财 gt 上方分析菜单 gt 公式管理器 gt 用户公式 g
  • [转]Spring2+struts2+ibatis整合

    Spring2 struts2 ibatis整合 前几天因为需要 将spring2 struts2和ibatis进行了整合 整合过程涉及到很多技巧 因此作为日志保存在此 以便今后查询 各个框架在本项目内的作用 spring2 主要利用ioc
  • zlmediakit使用手册

    1 http web hook地址https github com ZLMediaKit ZLMediaKit wiki MediaServer E6 94 AF E6 8C 81 E7 9A 84HTTP HOOK API 2 api地址

随机推荐

  • ubuntu安装chrome

    又在网上搜索 下面方法可行 复制代码 代码如下 Download google chrome for ubuntu from terminal with the following command For the 32 bit versio
  • linux权限---【600,644,700,755,711,666,777】

    chmod命令详解 使用权限 所有使用者 使用方式 chmod cfvR help version mode file 说明 Linux Unix 的档案存取权限分为三级 档案拥有者 群组 其他 利用 chmod 可以藉以控制档案如何被他人
  • vue 项目在ie浏览器下报错CRIPT5022: SecurityError sockjs.js (1683,5)

    百度爸爸给的解决方法 找到 node modules sockjs client dist sockjs js 2 找到代码的 1605行 try self xhr send payload 注释掉 catch e self emit fi
  • Docker - 13. 容器卷常用操作

    目录 1 宿主和容器之间映射添加容器卷 2 查看容器卷是否挂载成功 3 容器卷 ro 和 rw 读写规则 4 卷的继承与共享 1 宿主和容器之间映射添加容器卷 公式 docker run it privileged true v 宿主机绝对
  • android studio调整代码和菜单栏字体大小

    1 File Settings Appearance Behavior Appearance 右边Override default fonts by not recommended 2 设置代码大小 File Settings Editor
  • 微信小程序组件知识点GET

    1 可滚动视图区域组件scroll view 在滚动 scroll view 时会阻止页面回弹 所以在 scroll view 中滚动 是无法触发下拉刷新事件 onPullDownRefresh 所以如果一定要使用下拉刷新 请使用页面的滚动
  • Clickhouse建表语法、视图语法、数据表DDL(数据定义语言)、数据DML(数据操作语言)...

    参考官网 https clickhouse tech docs zh sql reference statements create 更多详细文档可以参考官网 强烈推荐 1 Clickhouse创建数据库 CREATE DATABASE 该
  • 大年初四晚,Flutter Forward 中国社区直播活动与你不见不散!

    之前我们预告过 2023 年 1 月 25 日 年初四 Flutter 团队将在肯尼亚首都内罗毕举办 Flutter Forward 大会 并同时开启线上直播 本次活动将为展示最新的 Flutter 技术更新 包括一个主题演讲 以及多个技术
  • windows运行Elasticsearch内存占用过大

    运行Elasticsearch 内存占用差不多10G 编辑 elasticsearch 7 17 3 config jvm options文件 修改堆内存大小为4G Xms4g Xmx4g
  • Cisco Packet Tracer下载和安装、构建网络拓扑、配置网络设备、跟踪数据包、查看数据包

    Cisco Packet Tracer下载和安装 构建网络拓扑 配置网络设备 跟踪数据包 查看数据包 下载 一 注册Cisco账户 网址 https www cisco com c en us index html 二 注册Cisco学院的
  • CVPR 2023

    Title InternImage Exploring Large Scale Vision Foundation Models with Deformable Convolutions Paper https arxiv org abs
  • Matlab之colormap, FaceVertexCData

    首先说说colormap 它提供了一种着色方案 我认为它有3个作用 1 Matlab内置多种样式的color map 在任一个Figure中 打开菜单 Edit gt ColorMap 弹出 Colormap Editor 界面 在该界面上
  • linux 驱动——高级字符驱动程序操作

    内容 ioctl 的 ioctl 的系统概念 与用户空间同步的方法 进程休眠 非阻塞IO及与用户间的通信 原型函数 int ioctl struct inode inode struct file filp unsigned int cmd
  • week4作业题_A-DDL的恐惧

    A DDL的恐惧 题目描述 ZJM 有 n 个作业 每个作业都有自己的 DDL 如果 ZJM 没有在 DDL 前做完这个作业 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 才能尽可能少扣一点分 请你帮帮他吧
  • 数据结构学习笔记(一)线性表

    文章目录 前言 一 线性表是什么 线性结构 线性表 二 线性表的顺序表示和实现 1 什么是线性表的顺序表示 2 代码实现 总结 参考资料 前言 文章目的在于记录学习数据结构这门课程中遇到的知识点以及难点 为解决或优化实际代码问题打好基础 一
  • 辨析BigDecimal的toString()方法和toPlainString()方法

    辨析BigDecimal的toString 方法和toPlainString 方法 toString toString方法会将BigDecimal的值以科学计数方式的字符串 但是转换成科学计数的方式也是有场景的 并不是所有的值都会转为科学计
  • Nginx 代理解决跨域问题分析

    当你遇到跨域问题 不要立刻就选择复制去尝试 请详细看完这篇文章再处理 我相信它能帮到你 分析前准备 前端网站地址 http localhost 8080 服务端网址 http localhost 59200 首先保证服务端是没有处理跨域的
  • Android注册登录页面

    Android注册登录页面 需求 分析 项目目录 java domain JsonBean java UserInfo java utils GetJsonDataUtil java Login java MainActivity java
  • 前端实现预览功能,播放rtsp视频流(node.js+ffmpeg+flv.js)

    实现思路 获取摄像头rtsp流 通过node js ffmpeg转码 通过哔哩哔哩flv js播放 1 获取摄像机RTSP流 之前文章有说明不多阐述 2 配置流媒体服务器 1 下载安装node js 运行node js 网上教程很多自行下载
  • XGBoost-工程实现与优缺点(中)

    工程实现 块结构设计 我们知道 决策树的学习最耗时的一个步骤就是在每次寻找最佳分裂点是都需要对特征的值进行排序 而 XGBoost 在训练之前对根据特征对数据进行了排序 然后保存到块结构中 并在每个块结构中都采用了稀疏矩阵存储格式 Comp