论文解读14——XGBoost:A Scalable Tree Boosting System

news2024/9/25 9:40:18

目录

  • 1、文章贡献
  • 2、算法推导
  • 3、寻找分裂点算法
    • 3.1 精确贪心算法
    • 3.2 近似算法
  • 4、稀疏感知算法
  • 5、特征维度的并行化
  • 6、XGBoost VS GBDT
  • 7、XGBoost局限

在这里插入图片描述

半年前看了这篇XGBoost的原文,网上解读很多,于是迟迟没有将其中的精髓记录下来,准备重点记一记,以免日后遗忘。

1、文章贡献

在原有GBDT的基础上提出了XGBoost,一种高效的极端梯度提升树模型,其属于boosting算法的一种,利用加法模型和前向分布算法将多个弱学习器集成为强学习器实现优化。

主要改进点

  • 损失函数泰勒二阶展开考虑更多信息,目标函数加入正则项防止过拟合。
  • 近似算法代替精确贪心算法,利用加权分位数对特征进行分桶操作,通过遍历桶来提高效率。
  • 稀疏感知算法处理缺失数据提升速度。

2、算法推导

  • 定义一个简单的目标函数L,其中l是可微的凸损失函数,Ω是正则项防止过拟合(包括了对叶子节点数和节点值的惩罚)
    在这里插入图片描述
  • 采用前向分布算法将第t颗树的优化表示成t-1颗已经训练好的树加上当前需要优化的基学习器
    在这里插入图片描述
  • 进行泰勒二阶展开(其中gi是一阶偏导数,hi是二阶偏导数)
    在这里插入图片描述
  • 常数项对优化并没有什么用处,将其剔除
    在这里插入图片描述
  • 按样本遍历改成按叶子结点遍历进行合并
    在这里插入图片描述
  • 找到最优权值wj
    在这里插入图片描述
  • 使目标函数最优
    在这里插入图片描述
  • 计算分裂前后的增益
    在这里插入图片描述

3、寻找分裂点算法

3.1 精确贪心算法

-贪婪地枚举所有可能的特征分裂点,对各节点特征进行预排序,计算分裂增益,最大增益处即为最优分裂点。

  • 优点:能找到全局最优解
  • 缺点:当数据量很大时无法全部放入内存
    在这里插入图片描述

3.2 近似算法

根据特征分布策略确定候选分裂点,将对应特征放入相应的桶中,对桶中特征的一、二阶导分贝累加,找到最大增益。

  • 定义一个秩函数rk,表示特征值k小于z的比例
    在这里插入图片描述
  • 目标是找到候选分裂点满足
    在这里插入图片描述
    其中ε是一个近似因子,相当于每个特征桶里样本数的比重都限制在一个特定的值内
  • 而将二阶导hi作为加权分位数的权重原因在于,对原始目标函数进行化简后,hi表示权重位置
    在这里插入图片描述
  • 算法流程如下
    在这里插入图片描述

在近似算法中分为两种策略:全局策略与局部策略

  • 全局策略是说,学习每棵树之前一旦根节点用了某种分裂形式,那么后面每一层分裂的时候都采用这种切分方法。
  • 局部策略刚好相反,每次分裂重新提出候选分裂点,适用于构建更深的树。
  • 不同策略下AUC值变化情况
    在这里插入图片描述
    在分桶数量相近的情况下局部策略的精确度更高(绿色方块);全局策略在分桶数更多的时候可以达到和精确贪心算法相似的精度,但此时的计算复杂度没有减少太多。

4、稀疏感知算法

  • XGBoost在处理稀疏问题上只考虑对没有缺失的数据进行遍历,对于缺失数据,会分别计算将其归到左节点和右节点的增益,然后默认分类到增益大的一边继续分裂。算法流程如下:
    在这里插入图片描述
    在处理缺失值上跟普通算法相比快了近50倍
    在这里插入图片描述

5、特征维度的并行化

XGBoost在对每个特征进行预排序后会把特征相关的信息存储到分块的结构中,通过线性扫描每个特征块来获取信息,同时找不同的分裂点,实现并行化。
在这里插入图片描述

6、XGBoost VS GBDT

  • GBDT采用CART为基分类器;XGBoost还支持线性分类器。
  • GBDT只使用了泰勒一阶导信息;XGBoost使用了泰勒二阶导展开。
  • XGBoost目标函数多了正则项防止过拟合。
  • XGBoost在处理稀疏问题上使用稀疏感知算法,效率大大提升。
  • XGBoost支持特征维度的并行化,提升算法效率。

7、XGBoost局限

在寻找最优分裂点算法中需要预排序以及遍历数据集,分块存储虽然可以方便访问,但是比较消耗内存和时间。(改进:LightGBM)

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

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

相关文章

从工厂打螺丝到月薪18k测试工程师,我该满足吗?

以前我比较喜欢小米那句“永远相信美好的事情即将发生”,后来发现如果不努力不可能有美好的事情发生!01高中毕业进厂5年,创业经商多次战败,为了生计辗转奔波高中毕业后我就进了工厂,第一份工作是做模具加工。从500元一…

1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等

文本抽取任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等 2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等…

网络资源面经2

文章目录Kafka 原理,数据怎么平分到消费者生产者分区消费者分区Flume HDFS Sink 小文件处理Flink 与 Spark Streaming 的差异,具体效果Spark 背压机制具体实现原理Yarn 调度策略Spark Streaming消费方式及区别Zookeeper 怎么避免脑裂,什么是脑…

用Python自己写一个分词器,python实现分词功能,隐马尔科夫模型预测问题之维特比算法(Viterbi Algorithm)的Python实现

☕️ 本文系列文章汇总: (1)HMM开篇:基本概念和几个要素 (2)HMM计算问题:前后向算法 代码实现 (3)HMM学习问题:Baum-Welch算法 代码实现&#xff08…

【数据结构】关于二叉树你所应该知道的数学秘密

目录 1.什么是二叉树(可以跳过 目录跳转) 2.特殊的二叉树(满二叉树/完全二叉树) 2.1 基础知识 2.2 满二叉树 2.3 完全二叉树 3.二叉树的数学奥秘(主体) 3.1 高度与节点个数 3.2* 度 4.运用二叉树的…

算法拾遗二十五之暴力递归到动态规划五

算法拾遗二十七之暴力递归到动态规划七题目一【数组累加和最小的】题目二什么暴力递归可以继续优化暴力递归和动态规划的关系面试题和动态规划的关系如何找到某个问题的动态规划方式面试中设计暴力递归的原则知道了暴力递归的原则 然后设计常见的四种尝试模型如何分析有没有重复…

力扣-丢失信息的雇员

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1965. 丢失信息的雇员二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他…

SpringBoot高级-Condition相关操作

01-SpringBoot高级-今日内容 SpringBoot自定配置SpringBoot事件监听SpringBoot流程分析SpringBoot监控SpringBoot部署 02-SpringBoot自动配置-Condition-1 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean Co…

移动架构43_什么是Jetpack

Android移动架构汇总​​​​​​​ 文章目录一 Android 开发框架演变1 MVC2 MVP3 MVVM二 什么是JetPack三 如何构建支持Jetpack项目一 Android 开发框架演变 1 MVC Model-View-Controller,模型-视图-控制器,Model负责数据管理,View负责UI显…

创建Vite+Vue3+TS基础项目

前言: 本篇内容不涉及插件的安装以及配置,具体安装及配置篇可以看下面目录,本篇只涉及创建ViteVue3TS基础项目相关内容。不讲废话,简单直接直接开撸。 目录 npm create vite vue3练习2 -- --template vue-ts npm i vue-rout…

线性表 顺序表数组

初识线性表 文章目录初识线性表线性表的类型定义基本操作(一)init,destory,clear基本操作(二) 判空 ,求长基本操作(三)取值,取位置基本操作(四&am…

图解LeetCode——剑指 Offer 12. 矩阵中的路径

一、题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相…

Solon2 的应用生命周期

Solon 框架的应用生命周期包括:一个初始化函数时机点 六个事件时机点 两个插件生命时机点 两个容器生命时机点(v2.2.0 版本的状态): 提醒: 启动过程完成后,项目才能正常运行(启动过程中&…

基于麻雀算法改进的BP神经网络客流量预测,SSA-BP

目录 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 麻雀算法原理 麻雀算法主要参数 麻雀算法流程图 麻雀算法优化测试函数代码 基于麻雀算法改进的BP神经网络坑基监测 数据 matlab…

Windows 11 安装 Docker Desktop

Windows 环境安装 WSL2 WSL 简介 WSL 全称是 Windows Subsystem for Linux ,适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设…

低线城市外卖市场逐渐下沉,创业者如何有效开展本地外卖平台

近年来,我国网上外卖营业额不断上升,使我国餐饮业的比重越来越高。 随着外卖市场的下沉,低线城市的用户开始使用外卖平台 由于我国在线外卖行业逐渐成熟,一、二线主流市场逐渐饱和,外卖行业逐渐开始向低线城市发展&…

非标自动化设备远程监控解决方案

为了实现企业自动化生产,提高工作效率和稳定性,需对整个工厂进行远程监控和管理。 在工厂建立了一个远程监控系统,可以实现对工业自动化的设备状态进行远程实时监控,同时可以利用无线网络技术来实现对设备的数据采集和远程管理。 …

Guava ——Joiner和Splitter

大家好,这里是一口八宝周👏欢迎来到我的博客❤️一起交流学习 文章中有需要改进的地方请大佬们多多指点 谢谢🙏在本篇文章中,我将用实例展示,如何使用Joiner将集合转换为 String ,以及使用Splitter将 Strin…

如何使用EvilTree在文件中搜索正则或关键字匹配的内容

关于EvilTree EvilTree是一款功能强大的文件内容搜索工具,该工具基于经典的“tree”命令实现其功能,本质上来说它就是“tree”命令的一个独立Python 3重制版。但EvilTree还增加了在文件中搜索用户提供的关键字或正则表达式的额外功能,而且还…