XGBoost超详细推导,终于有人讲明白了!

XGBoost详解(原理篇) XGBoost全称为eXtreme Gradient Boosting,即极致梯度提升树。XGBoost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器(个体学习器间存在强依赖关系,必须串行生成的序列化方法)。Note:关于Boosting算法详见博文集成学习详解_tt丫的博客-优快云博客XGBoost是一种提升树模型,即它将许多树模型集成在一起,形成一个很强的分类器。其中所用到的树模型则是CART回归树模型。 阅读详情

- XGB中树结点分裂的依据是什么?

- 如何计算树节点的权值?

- 为防止过拟合,XGB做了哪些改进?

相信看到这篇文章的各位对XGBoost都不陌生,的确,XGBoost不仅是各大数据科学比赛的必杀武器,在实际工作中,XGBoost也在被各大公司广泛地使用。

如今算法岗竞争日益激烈,面试难度之大各位有目共睹,面试前背过几个常见面试题已经远远不够了,面试官通常会“刨根问底“,重点考察候选人对模型的掌握深度。因此,对于XGBoost,你不仅需要知其然,而且还要知其所以然。

本文重点介绍XGBoost的推导过程,文末会抛出10道面试题考验一下各位,最后准备了一份“XGB推导攻略图”,帮助你更好的掌握整个推导过程。

本文结构

640?wx_fmt=png

01

从“目标函数”开始,生成一棵树

1. XGB目标函数

XGBoost的目标函数由训练损失和正则化项两部分组成,目标函数定义如下:

640?wx_fmt=png

变量解释:

(1)l 代表损失函数,常见的损失函数有:640?wx_fmt=png

(2)yi'是第 i 个样本 xi 的预测值。由于XGBoost是一个加法模型,因此,预测得分是每棵树打分的累加之和。

640?wx_fmt=png

(3)将全部k棵树的复杂度进行求和,添加到目标函数中作为正则化项,用于防止模型过度拟合。

640?wx_fmt=png

2. 学习第t棵树

在【1】中提到,XGBoost 是一个加法模型,假设我们第t次迭代要训练的树模型是 ft() ,则有:

640?wx_fmt=png将上式带入【1】中的目标函数 Obj ,可以得到:

640?wx_fmt=png

注意上式中,只有一个变量,那就是第 t 棵树:

640?wx_fmt=png

其余的都是已知量或可通过已知量可以计算出来的(注意要理解哦!)。

细心的同学可以发现,这里我们将正则化项进行了拆分,由于前 t-1棵树的结构已经确定,因此,前 t-1 棵树的复杂度之和可以用一个常量表示:

640?wx_fmt=png

3. 泰勒公式展开

首先简单回忆一下,泰勒公式。

泰勒公式是将一个在 x = x0 处具有n阶导数的函数 f(x) 利用关于 (x-x0) 的n次多项式来逼近函数的方法。

泰勒公式的二阶展开形式如下:

640?wx_fmt=png

回到我们的问题上来, f(x) 对应于我们的损失函数 l ,x 对应于前 t-1 棵树的预测值,Δx 对应于我们正在训练的第 t 棵树。

首先定义损失函数 l 关于 y‘(t-1) 的一阶偏导数和二阶偏导数:

640?wx_fmt=png

那么,我们的损失函数就可以转化为下式(标出了与泰勒公式中x和Δx的对应关系)。

640?wx_fmt=png

将上述二阶展开式,带入到【2】中的目标函数 Obj 中,可以得到目标函数 Obj 的近似值:

640?wx_fmt=png

去掉全部常数项,得到目标函数:

640?wx_fmt=png

4. 定义一颗树

我们重新定义一颗树,包括两个部分:

  • 叶子结点的权重向量 ω ;
  • 实例 -> 叶子结点的映射关系q(本质是树的分支结构);

一棵树的表达形式定义如下:

640?wx_fmt=png

5. 定义树的复杂度

我们定义一颗树的复杂度 Ω,它由两部分组成:

  • 叶子结点的数量;

  • 叶子结点权重向量的L2范数;

640?wx_fmt=png

6. 叶子结点归组

我们将属于第 j 个叶子结点的所有样本 xi , 划入到一个叶子结点样本集中,数学表示如下:

640?wx_fmt=png

然后,将【4】和【5】中一棵树及其复杂度的定义,带入到【3】中泰勒展开后的目标函数Obj中,具体推导如下:

640?wx_fmt=png

为进一步简化该式,我们进行如下定义:

640?wx_fmt=png

含义如下:

  • Gj :叶子结点 j 所包含样本的一阶偏导数累加之和,是一个常量;

  • Hj :叶子结点 j 所包含样本的二阶偏导数累加之和,是一个常量;

将 Gj 和 Hj 带入目标式Obj,得到我们最终的目标函数(注意,此时式中的变量只剩下第t棵树的权重向量W):

640?wx_fmt=png

7. 树结构打分

回忆一下高中数学知识。假设有一个一元二次函数,形式如下:

640?wx_fmt=png

我们可以套用一元二次函数的最值公式轻易地求出最值点:

640?wx_fmt=png

那回到我们的目标函数 Obj,该如何求出它的最值呢?

640?wx_fmt=png

先简单分析一下上面的式子:

对于每个叶子结点 j , 可以将其从目标式 Obj 中拆解出来:

640?wx_fmt=png

在【6】中我们提到,Gj 和 Hj 相对于第 t 棵树来说是可以计算出来的。那么,这个式子就是一个只包含一个变量 叶子结点权重wj 的一元二次函数,上面也提到了,我们可以通过最值公式求出它的最值点。

再次分析一下目标函数Obj,可以发现,各个叶子结点的目标子式是相互独立的,也就是说,当每个叶子结点的子式都达到最值点时,整个目标函数式Obj才达到最值点。

那么,假设目前树的结构已经固定,套用一元二次函数的最值公式,我们可以轻易求出,每个叶子结点的权重 wj* 及其此时达到最优的 Obj 的目标值:

640?wx_fmt=png

实例演示: 

640?wx_fmt=png

02

一棵树的生长细节

1. 分裂一个结点

在实际训练过程中,当建立第 t 棵树时,XGBoost采用贪心法进行树结点的分裂:

从树深为0时开始:

  • 对树中的每个叶子结点尝试进行分裂;

  • 每次分裂后,原来的一个叶子结点继续分裂为左右两个子叶子结点,原叶子结点中的样本集将根据该结点的判断规则分散到左右两个叶子结点中;

  • 新分裂一个结点后,我们需要检测这次分裂是否会给损失函数带来增益,增益的定义如下:

640?wx_fmt=png

如果增益Gain>0,即分裂为两个叶子节点后,目标函数下降了,那么我们会考虑此次分裂的结果。

但是,在一个结点分裂时,可能有很多个分裂点,每个分裂点都会产生一个增益,如何才能寻找到最优的分裂点呢?接下来会讲到。

2. 寻找最佳分裂点

在分裂一个结点时,我们会有很多个候选分割点,寻找最佳分割点的大致步骤如下:

  • 遍历每个结点的每个特征;

  • 对每个特征,按特征值大小将特征值排序;

  • 线性扫描,找出每个特征的最佳分裂特征值;

  • 在所有特征中找出最好的分裂点(分裂后增益最大的特征及特征值)

上面是一种贪心的方法,每次进行分裂尝试都要遍历一遍全部候选分割点,也叫做全局扫描法。

但当数据量过大导致内存无法一次载入或者在分布式情况下,贪心算法的效率就会变得很低,全局扫描法不再适用。

基于此,XGBoost提出了一系列加快寻找最佳分裂点的方案:

  • 特征预排序+缓存:XGBoost在训练之前,预先对每个特征按照特征值大小进行排序,然后保存为block结构,后面的迭代中会重复地使用这个结构,使计算量大大减小。

  • 分位点近似法:对每个特征按照特征值排序后,采用类似分位点选取的方式,仅仅选出常数个特征值作为该特征的候选分割点,在寻找该特征的最佳分割点时,从候选分割点中选出最优的一个。

  • 并行查找:由于各个特性已预先存储为block结构,XGBoost支持利用多个线程并行地计算每个特征的最佳分割点,这不仅大大提升了结点的分裂速度,也极利于大规模训练集的适应性扩展。

3. 停止生长

一棵树不会一直生长下去,下面是一些常见的限制条件。

(1) 当新引入的一次分裂所带来的增益Gain<0时,放弃当前的分裂。这是训练损失和模型结构复杂度的博弈过程。

640?wx_fmt=png

(2) 当树达到最大深度时,停止建树,因为树的深度太深容易出现过拟合,这里需要设置一个超参数max_depth。

(3) 当引入一次分裂后,重新计算新生成的左、右两个叶子结点的样本权重和。如果任一个叶子结点的样本权重低于某一个阈值,也会放弃此次分裂。这涉及到一个超参数:最小样本权重和,是指如果一个叶子节点包含的样本数量太少也会放弃分裂,防止树分的太细,这也是过拟合的一种措施。

每个叶子结点的样本权值和计算方式如下:

640?wx_fmt=png

03

高频面试题

  • XGB与GBDT、随机森林等模型相比,有什么优缺点?

  • XGB为什么可以并行训练?

  • XGB用二阶泰勒展开的优势在哪?

  • XGB为了防止过拟合,进行了哪些设计?

  • XGB如何处理缺失值?

  • XGB如何分裂一个结点?如何选择特征?

  • XGB中一颗树停止生长的条件有哪些?

  • XGB叶子结点的权重有什么含义?如何计算?

  • 训练一个XGB模型,经历了哪些过程?调参步骤是什么?

  • XGB如何给特征评分?

面试题-参考答案:

04

备忘单

经过前面几个部分的细心讲解,相信大家对XGBoost底层原理已经很了解了,下面特意又准备了一份备忘单,希望能够帮助大家系统化的掌握XGB原理的整个推导过程,同时又能够起到快速回忆的作用。

640?wx_fmt=png

推荐阅读

XGBoost算法原理小结

640?wx_fmt=other

机器学习---xgboost算法 问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。 阅读详情

相关推荐

天池龙珠计划寒假训练营学习笔记:利用XGBoost进行分析的完整流程

天池龙珠计划寒假训练营学习笔记:利用XGBoost进行分析的完整步骤 工具:天池NoteBook 训练数据10.9MB 训练数据下载链接:https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/7XGBoost/train.csv 声明: 本文主要内容来源于天池龙珠计划寒假训练营教材,部分内容有修改。 原文地址: 添加链接描述 1、XGBoost 的优缺点: 1.1 XGBoost的主要优点: 简单易用。相对其他机器学习库,用户可以轻松使用XGBoost

AI_SupplyChain的博客 953

XGBoost模型详解

1.什么是XGBoost?   GBDT,它是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t−1t-1t−1 棵树的预测结果与训练样本真实值的残差。XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。 2.XGBoost的核心原理 2.1 如何构造目标函数?   对于一个给定有 nnn 个样本和

weixin_44852067的博客 2万+

xgboost实例_XGBoost超详细推导,终于有人讲明白了!

- XGB中树结点分裂的依据是什么?- 如何计算树节点的权值?- 为防止过拟合,XGB做了哪些改进?相信看到这篇文章的各位对XGBoost都不陌生,的确,XGBoost不仅是各大数据科学比赛的必杀武器,在实际工作中,XGBoost也在被各大公司广泛地使用。如今算法岗竞争日益激烈,面试难度之大各位有目共睹,面试前背过几个常见面试题已经远远不够了,面试官通常会“刨根问底“,重点考察候选人对模...

weixin_39576133的博客 595

XGBoost算法介绍

XGBoost算法介绍一、简介二、基本原理三、目标函数新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一、简介   XGBoost(eXtreme Gradient Boosting)又叫极度梯度提升树,是boosting

Silence的博客 5万+

XGBoost-原理推导(上)

XGBoost简介 XGBoost(eXtreme Gradient Boosting)是华盛顿大学博士陈天奇创造的一个梯度提升(Gradient Boosting)的开源框架。至今可以算是各种数据比赛中的大杀器,被大家广泛地运用。 之前的文章我已经介绍了GBDT,如果对GBDT原理不太懂的,强烈建议先把GBDT的原理搞清楚再回过头来看XGBoost,接下来我会分上中下三篇文章详细介绍XGBoost,包括目标函数,学习策略,重要超参数,系统设计,优缺点等。 目标函数 我们知道 XGBoost 是由 K 个基

qq_34184505的博客 643

XGBoost用Logloss做损失函数时的叶子节点权重和预测值问题

当XGBoost以Logloss作为损失函数的时候,我们知道预测值是各树叶子节点权重之和的sigmod函数。即第i个样本的预测值,等于该样本在各个树中落到的叶子节点的权重之和,再做sigmod(和逻辑回归形式一样,但含义不同),j代表树。网上讲XGBoost的文章很多,却很少有把从损失函数到这个结论的过程说的比较清晰的(至少我没有看到过,也可能是我理解能力不够吧哈哈)。本文尝试做这个工作。

weixin_43962853的博客 1095

XGBoost超详细推导,终于讲明白了!

- XGB中树结点分裂的依据是什么?- 如何计算树节点的权值?- 为防止过拟合,XGB做了哪些改进?相信看到这篇文章的各位对XGBoost都不陌生,的确,XGBoost不...

算法channel 2077

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 501

xgboost 一般多少棵树_XGBoost超详细推导,终于有人讲明白了

作者:wuli小萌哥来源:算法研习社XGBoost超详细推导,终于有人讲明白了!- XGB中树结点分裂的依据是什么?- 如何计算树节点的权值?- 为防止过拟合,XGB做了哪些改进?相信看到这篇文章的各位对XGBoost都不陌生,的确,XGBoost不仅是各大数据科学比赛的必杀武器,在实际工作中,XGBoost也在被各大公司广泛地使用。如今算法岗竞争日益激烈,面试难度之大各位有目共睹,面试前背过几个...

weixin_42365346的博客 2539

5分钟搞定!用Cursor和.NET 9.0快速搭建串口通讯上位机(附VS Code插件配置)

本文分享了如何利用Cursor AI编程助手与.NET 9.0,在5分钟内快速构建一个功能完整的串口通讯上位机程序。通过自然语言描述需求,AI自动生成WinForms界面和核心代码,极大提升了硬件调试工具的定制开发效率。文章详细介绍了环境配置、AI协作编码、功能实现与调试的全过程。

weixin_28366353的博客 277

AWD线下攻防赛总结

在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量。8.Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压。进程线程:netstat / ps -aux/netstat -apt。4.查看/etc/init.d/rc.local中启动服务有无异常。1.不使用默认口令,修改成复杂的,并确保和web环境连接。5.使用脚本开启进程监控、目录监控、流量监控。文件操作监控.exe/御剑文件监控.exe。

XuJL89的博客 631

python 分类变量xgboost_XGBoost、GBDT超详细推导

非原创,已表明出处,不是为了吸粉,仅仅是为了做笔记——————————————————————————————————————0. 【白话机器学习】算法理论+实战之决策树1. 【白话机器学习】算法理论+实战之Xgboost算法2. 【白话机器学习】算法理论+实战之AdaBoost算法 3. 【白话机器学习】算法理论+实战之LightGBM算法 终于有人把XGBoost 和 LightGBM...

weixin_30888681的博客 653

西门子博图编程:使用S7-1500冗余PLC 建立ModbusTCP通信

文章目录1.1 网络结构1.2 系统 IP 介绍1.3 Modbus TCP 通讯编程1.3.1 CPU 做服务器 1.1 网络结构 以 CPU151 7H 为例, 网络结构示意如下图所示: CPU 1517H 冗余 PLC 有 PROFINET X1 接口和 X2 接口, Modbus TCP 通讯可以将设备(例如 Standard PLC)通过交换机接入到任何网络接口中。如果接入 X1 接口,需要通过交换机接入到 MRP 环网中,但是并不需要支持 H-sync 转发。如果接入 X2 接口,只需要使

2万+

XGBoost目标函数公式推导

主要看了以及参考了以下这几篇文章: 通俗理解kaggle比赛大杀器xgboost 机器学习:XGBoost公式推导 xgboost推导 XGBoost的原理 首先大背景是这样的: 对于加法策略可以表示如下: 初始化(模型中没有树时,其预测结果为0): 往模型中加入第一棵树: 往模型中加入第二棵树: … 往模型中加入第t棵树: 其中表示第棵树,表示组合棵树模型对样本的预测结...

yuxeaotao的博客 1457

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

【Kubernetes】怎么根据pod找到关联的deployment呢

在文章中我们删除pod需要删除deployment,那么怎么根据pod找到关联的deployment呢。

九师兄 505

马一下xgboost好文章

XGBoost超详细推导,终于讲明白了! - 云+社区 - 腾讯云

lukeyyanghang的博客 130

OpenCV C++ 图像处理实战 ——《基于轮廓比对的缺陷检测》

本文使用OpenCV C++ 实现基于轮廓比对的缺陷检测。

Zero___Chen的博客 1151

机器学习之XGBoost模型学习

python

老赵的博客 976

华为OD机试 双机位C卷:微服务的集成测试 (C/C++/Py/Java/JS/Go)

华为OD机试 双机位C卷 :微服务的集成测试 ,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 微服务的集成测试 , 华为OD 微服务的集成测试

qq_45776114的博客 2066

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

GBDT和XGboost介绍

前言 GBDT(Gradient Boosting Decision Tree)是一种基于迭代所构造的决策树算法,它又可以简称为MART(Multiple Additive Regression Tree)或GBRT(Gradient Boosting Regression Tree)。虽然名字上又是Gradient又是Boosting的,但它的原理还是很浅显易懂(当然详细的推导还是有一些难

LegenDavid's warehouse 3万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

XGBoost

xgboost

futurewq的博客 622

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Xgboost原理推导

以下内容均转自:https://juejin.im/entry/5b5f0b78f265da0f900e2906,存下来以便日后查阅。 XGBoost全名叫(eXtreme Gradient Boosting)极端梯度提升,经常被用在一些比赛中,其效果显著。它是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包。下面我们将XGBoost的学习分为3步:...

qq_41598851的博客 443

别再瞎补缺失值!XGBoost 原理精讲 + 代码实战,看完彻底吃透

XGBoost是一种基于Boosting思想的集成学习算法,通过多棵决策树串行迭代修正预测误差。相比传统GBDT,它引入了二阶梯度信息优化方向,内置正则化防止过拟合,支持缺失值处理和采样策略。算法通过计算损失函数的一阶和二阶梯度确定最优分裂点,并采用学习率控制更新幅度。本文通过一个水果分类的直观案例,展示了XGBoost如何逐步修正预测偏差,并提供了完整的Python实现代码,包括数据生成、模型训练、评估及多种可视化分析(ROC曲线、特征重要性、部分依赖图等)。XGBoost凭借其精准的误差修正能力和强大的

一个不怎么正经的算法工程师的博客~不定期更新一些我所覆盖领域的干货~~~包你满意噢~~ 985

xgboost算法_左手论文 右手代码 深入理解网红算法XGBoost

本文经授权转载自知乎@贾茹,原文链接:以下为正文这篇文章的起源是上周给同事讲解XGBoost原理+白板手推公式,结果差点翻车,发现有些地方理解还是不够深入,于是又花了一周时间把之前啃过的所有资料和笔记仔细梳理一遍,又想起自己的知乎专栏已经快一年没更新了,所以打算趁着换工作的3天休息间隙完成这篇文章。考虑到网上关于XGBoost资料笔记已经烂大街了,想要写出新意着实要费一番心思。一番思考...

weixin_39935257的博客 382
上一篇: 罗浩.ZJU | 如何看待 2020 届校招算法岗「爆炸」的情况?
下一篇: 清华大学两名博士生被开除:你不吃学习的苦,就要吃生活的苦
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值