XGBoost原理

article/2025/9/13 5:45:46

前言
之前接触并实现过Adaboost和Random Forest。作为去年开始很火爆的,对结构化数据效果极佳的XGBoost,当然也需要了解一下了。下面将分段叙述XGBoost原理,以及与GBDT的关系等等内容。


①、XGBoost vs GBDT

说到XGBoost,不得不说GBDT,两者都是boosting方法。GBDT可以看成是Adaboost的前向逐步递增推导形式(——因为直接找到最优的模型 f f f是有难度的,所以采取每次递增的方式。)

GBDT对分类问题基学习器是二叉分类树,对回归问题基学习器是二叉决策树

N为样本个数。下面为训练第m个基学习器的过程。

  • 损失函数: L ( f ( x ) , y ) L(f(x),y) L(f(x),y)

  • 目标函数: m i n 1 N ∑ i = 1 N L ( f ( x i ) , y i ) min\frac {1}{N}\sum_{i=1}^{N}L(f(\mathbb x_i),y_i) minN1i=1NL(f(xi),yi)

  • 前向算法
    这里写图片描述

  • 指数损失对outliers比较敏感,而且,这种损失函数也不是二分类问题中的类别(label)取log后的表示。

  • 因此另一种选择是负log似然损失,即得到logitBoost。此外,还可以取损失函数为L2损失,得到L2Boost。

为了便于推导,当采用平方误差损失函数时:
这里写图片描述

对于平方损失函数,拟合的就是残差;对于一般损失函数(梯度下降),拟合的就是残差的近似值。见下图(此图转自雪伦的博客):
这里写图片描述


②、XGBoost推导

好了,说了半天GBDT,那什么是XGBoost呢?让我直接上图吧!哈哈

由于GBDT除了L2损失函数之外,对其它的损失函数推导比较复杂。而XGBoost采用对损失函数进行二阶Taylor展开来近似。简化了求解与推导。

这里写图片描述

由于函数在点x的泰勒展开形式为( n > = 3 n >= 3 n>=3):
f ( x + Δ x ) ≃ f ( x ) + f ′ ( x ) Δ x + 1 2 ! f ′ ′ ( x ) Δ x 2 + o ( x ( n ) ) f(x+\Delta x) \simeq f(x) + f^{'}(x) \Delta x + \frac {1}{2!}f^{''}(x)\Delta x^2 + o(x^{(n)}) f(x+Δx)f(x)+f(x)Δx+2!1f(x)Δx2+o(x(n))
这里写图片描述
ps: β \beta β 为1,所以 g m , i g_{m,i} gm,i后面的$\beta $可加可不加

  • 树的定义:把树拆分成结构部分 q q q叶子分数部分 w w w
  • ϕ ( x ) = w q ( x ) , w ∈ R T , q ∈ R D → 1 , 2 , 3 , . . . , T \phi(x) = w_{q(\mathbf x)}, w \in \mathbf R^T, q \in \mathbf R^D \to {1,2,3,...,T} ϕ(x)=wq(x),wRT,qRD1,2,3,...,T
  • 结构函数 q q q把输入映射到叶子的索引号
  • 叶子分数函数 w w w给出每个索引号对应的叶子的分数
  • T为树中叶子结点的数目,D为特征维数

这里写图片描述这里写图片描述

树的复杂度

树的复杂度定义为(不是唯一方式,不过下面的定义方式学习出的树效果一般都比较不错。)
这里写图片描述
其中, γ \gamma γ L 1 L1 L1正则的惩罚项, λ \lambda λ L 2 L2 L2正则的惩罚项。

目标函数

设目标函数为 J ( θ ) J(\theta) J(θ)
这里写图片描述

这一个目标函数中,包含了T个相互独立的单变量二次函数。我们可以定义:
G t = ∑ i ∈ I t g m , i G_t = \sum_{i \in I_t} g_{m,i} Gt=iItgm,i
H t = ∑ i ∈ I t h m , i H_t = \sum_{i \in I_t} h_{m,i} Ht=iIthm,i

将其代入上式中,得到简化的代价函数 J ( θ ) = ∑ t = 1 T [ G t w t + 1 2 ( H t + λ ) w t 2 ] + γ T J(\theta) = \sum_{t=1}^{T}[G_tw_t+\frac{1}{2}(H_t+\lambda)w_t^2]+\gamma T J(θ)=t=1T[Gtwt+21(Ht+λ)wt2]+γT

这里写图片描述

树的分数示例

O b j Obj Obj代表了当我们指定一个树的结构的时候,我们在目标函数上面最多减少多少。我们可以把它叫做结构分数(structure score)
这里写图片描述


③、建树(分裂节点)

  • 枚举可能的树结构
  • 计算结构分数
    J ( θ ) = − 1 2 ∑ t = 1 T [ G t 2 H t + λ ] + γ T J(\theta) = -\frac {1} {2}\sum_{t=1}^{T}[\frac {G_t^2}{H_t + \lambda}]+\gamma T J(θ)=21t=1T[Ht+λGt2]+γT
  • 选择分数最小树结构,并且运用最优的权重
  • 但是,树结构有很多可能,所以对精确搜索的情况,可采用贪心算法

(1) 贪心算法

实践中,我们贪婪的增加树的叶子结点数目:
(1)从深度为0的树开始
(2)对于树的每个叶子节点,尝试增加一个分裂点:
这里写图片描述

对于每次扩展,我们还是要穷举所有可能的分割方案
一、 对每个特征,通过特征值将实例进行排序
二、 运用线性扫描来寻找该特征的最优分裂点
三、 对所有特征,采用最佳分裂点

如何高效地枚举所有的分割呢?我假设我们要枚举所有x < a 这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。
这里写图片描述

我们可以发现对于所有的a,我们只要做一遍从左到右的扫描就可以枚举出所有分割的梯度和 G L G_L GL G R G_R GR。然后用上面的公式计算每个分割方案的分数就可以了。

深度为k的树的时间复杂度
– 对于一层排序,需要时间Nlog(N),N为样本数目
– 对有D个特征,k层的二叉树,有复杂度为kDNlog(N)

伪代码如下:
这里写图片描述

(2) 近似搜索算法

算法产生原因:当数据太多不能装载到内存时,不能进行精确搜索分裂,只能近似。
根据特征分布的百分位数,提出特征的一些候选分裂点
将连续特征值映射到里(候选点对应的分裂),然后根据桶里
样本的统计量,从这些候选中选择最佳分裂点

根据候选提出的时间,分为:
全局近似:在构造树的初始阶段提出所有的候选分裂点,然后对下面的各个层次采用相同的候选特征分裂点

特点:提出候选的次数少,但每次的候选数目多(因为候选不更新)

局部近似:在每次分裂都重新提出候选特征分裂点

特点:对层次较深的树更适合

伪代码如下:
这里写图片描述

之后还会补充的更全一些。。
参考资料:

1、雪伦的博客
2、冒老师的XGBoost课程
3、xgboost导读和实战
4、Tianqi Chen 的论文:XGBoost: Reliable Large-scale Tree Boosting System


http://chatgpt.dhexx.cn/article/JLrpmTS3.shtml

相关文章

XGBoost算法原理以及实现

想问&#xff1a;在CSDN如何编辑数学公式呢&#xff1f; XGBoost算法是由GBDT算法演变出来的&#xff0c;GBDT算法在求解最优化问题的时候应用了一阶导技术&#xff0c;而XGBoost则使用损失函数的一阶导和二阶导&#xff0c;不但如此&#xff0c; 还可以自己定义损失函数&…

XGBoost原理介绍------个人理解版

本人第一次写博客&#xff0c;这是篇算法总结的文章&#xff0c;希望能对大家的学习有所帮助。有什么错误之处&#xff0c;还望留言指出&#xff0c;希望能与大家一起进步。 XGBoost全名叫&#xff08;eXtreme Gradient Boosting&#xff09;极端梯度提升&#xff0c;经常被用…

XGBoost原理及目标函数推导详解

前言 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;全名叫极端梯度提升&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle及工业界都有广泛的应用并取得了较好的成绩&#xff0c;本文较详细的介绍了XGBoost的算法原理及目标函数公式推导。 一、XGBoo…

机器学习——XGboost原理及python实现

XGboost原理及实战 原理1 xgb是什么1.1 CART 回归树1.2 应用1.3 目标函数 2 xgb数学推导2.1 回归树2.2 加法模型2.3 前向分步算法2.4 目标函数2.5 正则项处理2.6 损失函数的处理 3 确定树的结构3.1 精确贪心法 4 具体算法流程&#xff1a;5 优化思路&#xff1a;5.1 压缩特征数…

XGBoost简单介绍

1. 概述 XGBoost本身的核心是基于梯度提升树实现的集成算法&#xff0c;整体来说可以有三个核心部分&#xff1a;集成算法本身&#xff0c;用于集成的弱评估器&#xff0c;以及应用中的其他过程。 1.1 提升集成算法&#xff1a; XGBoost的基础是梯度提升算法&#xff0c;因此…

XGBoost算法原理及基础知识

XGBoost原理——理论基础、公式推导、单机实现 前言一.简述XGBoost1.1算法类型&#xff1a;集成学习、监督学习1.2应用场景&#xff1a;回归、分类、排序1.3模型原理&#xff1a;串行方法、加法模型 二.集成学习及主要方法2.1Boosting 串行方法2.2Bagging 并行方法2.3Stacking …

xgboost算法原理

xgboost算法原理 1.xgboost的介绍 xgboost的全称&#xff08;extreme gradient boosting)极限梯度提升&#xff0c;经常被用在一些比赛中&#xff0c;其效果显著。它是大规模并行boosted tree 的工具&#xff0c;是目前最快最好的开源Boosted tree工具包。xgboost所应用的算法…

Xgboost算法之原理+代码

https://blog.csdn.net/kwame211/article/details/81098025 这里有一套系统的XGBoost学习方法&#xff0c;结合学习吧&#xff01; 1. XGBoost简介 xgboost一般和sklearn一起使用&#xff0c;但是由于sklearn中没有集成xgboost&#xff0c;所以才需要单独下载安装。xgboost是…

xgboost算法原理与实战

xgboost算法原理与实战 之前一直有听说GBM&#xff0c;GBDT&#xff08;Gradient Boost Decision Tree&#xff09;渐进梯度决策树GBRT&#xff08;Gradient Boost RegressionTree&#xff09;渐进梯度回归树是GBDT的一种&#xff0c;因为GBDT核心是累加所有树的结果作为最终结…

【原创】XGBoost分类器原理及应用实战

本文结合作者对xgboost原理的理解及使用xgboost做分类问题的经验&#xff0c;讲解xgboost在分类问题中的应用。内容主要包括xgboost原理简述、xgboost_classifier代码、xgboost使用心得和几个有深度的问题 XGBoost原理简述 xgboost并没有提出一种新的机器学习算法&#xff0c…

xgboost 算法原理

1、xgboost是什么 全称&#xff1a;eXtreme Gradient Boosting 作者&#xff1a;陈天奇(华盛顿大学博士) 基础&#xff1a;GBDT 所属&#xff1a;boosting迭代型、树类算法。 适用范围&#xff1a;分类、回归 优点&#xff1a;速度快、效果好、能处理大规模数据、支持多种…

xgboost入门与实战(原理篇)

xgboost入门与实战(原理篇) 前言: xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案。在工业界规模方面,x…

xgboost原理分析以及实践

摘要 本文在写完GBDT的三篇文章后本来就想写的&#xff0c;但一直没有时间&#xff0c;终于刚好碰上需要&#xff0c;有空来写这篇关于xgboost原理以及一些实践的东西&#xff08;这里实践不是指给出代码然后跑结果&#xff0c;而是我们来手动算一算整个xgboost流程&#xff0…

机器学习—XGboost的原理、工程实现与优缺点

文章目录 一、xgboost简介二、xgboost原理1.从目标函数生成一棵树1.1学习第t颗树1.2xgboost的目标函数1.3泰勒公式展开1.4定义一棵树1.5定义树的复杂度1.6叶子节点归组1.7树结构打分 2.一棵树的生成细节2.1最优切分点划分算法2.1.1贪心算法2.1.2近似算法 2.2加权分位数缩略图2.…

XGBoost原理介绍

1. Introduction 在这篇文章中&#xff0c;我将介绍XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;&#xff0c;一种tree boosting的可扩展机器学习系统。这个系统可以作为开源的软件包使用。该系统的影响已经在大量的机器学习和数据挖掘挑战中被广泛地认可。这些…

XGBoost算法介绍

XGBoost算法介绍 一、简介二、基本原理三、目标函数三、节点分裂3.1 贪心算法3.2 近似算法 四、其它特点4.1 缺失值处理4.2 防止过拟合 五、总结 一、简介 XGBoost(eXtreme Gradient Boosting)又叫极度梯度提升树&#xff0c;是boosting算法的一种实现方式。针对分类或回归问题…

xgboost原理(无推导就轻易理解)

一、模型训练过程 贪心优化算法。多颗决策树串行训练&#xff0c;第一棵树拟合训练目标、第二颗树拟合前面的残差、第三棵树拟合前两棵树留下的残差。 1、残差来源&#xff1a; &#xff08;1&#xff09;第k颗树训练时&#xff0c;行采样列采样&#xff08;即仅有部分样本、…

一文读懂机器学习大杀器XGBoost原理

【导读】XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。讲解其原理前,先讲解一下CART回归树…

XGBoost详解(原理篇)

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、XGBoost简介 二、XGBoost原理 1、基本组成元素 2、整体思路 &#xff08;1&#xff09;训练过程——构建XGBoost模型…

XGBoost 原理介绍

1.简介 XGBoost的全称是eXtreme Gradient Boosting&#xff0c;它是经过优化的分布式梯度提升库&#xff0c;旨在高效、灵活且可移植。XGBoost是大规模并行boosting tree的工具&#xff0c;它是目前最快最好的开源 boosting tree工具包&#xff0c;比常见的工具包快10倍以上。…