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

dicksonjyl dicksonjyl     2022-12-26     429

关键词:

http://blog.itpub.net/31542119/viewspace-2199549/

 

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

一、CART回归树

CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。

技术分享图片

而CART回归树实质上就是在该特征维度对样本空间进行划分,而这种空间划分的优化是一种NP难问题,因此,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:

技术分享图片

因此,当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:

技术分享图片

所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。

二、XGBoost算法思想

该算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。

技术分享图片

注:w_q(x)为叶子节点q的分数,f(x)为其中一棵回归树 

如下图例子,训练出了2棵决策树,小孩的预测分数就是两棵树中小孩所落到的结点的分数相加。爷爷的预测分数同理。

技术分享图片

 

三、XGBoost原理 

XGBoost目标函数定义为:

技术分享图片

技术分享图片

目标函数由两部分构成,第一部分用来衡量预测分数和真实分数的差距,另一部分则是正则化项。正则化项同样包含两部分,T表示叶子结点的个数,w表示叶子节点的分数。γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。

正如上文所说,新生成的树是要拟合上次预测的残差的,即当生成t棵树后,预测分数可以写成: 

技术分享图片

同时,可以将目标函数改写成:

技术分享图片

很明显,我们接下来就是要去找到一个f_t能够最小化目标函数。XGBoost的想法是利用其在f_t=0处的泰勒二阶展开近似它。所以,目标函数近似为:

技术分享图片

其中g_i为一阶导数,h_i为二阶导数:

技术分享图片

由于前t-1棵树的预测分数与y的残差对目标函数优化不影响,可以直接去掉。简化目标函数为:

技术分享图片

上式是将每个样本的损失函数值加起来,我们知道,每个样本都最终会落到一个叶子结点中,所以我们可以将所以同一个叶子结点的样本重组起来,过程如下图:

技术分享图片

因此通过上式的改写,我们可以将目标函数改写成关于叶子结点分数w的一个一元二次函数,求解最优的w和目标函数值就变得很简单了,直接使用顶点公式即可。因此,最优的w和目标函数公式为

技术分享图片

 

四、分裂结点算法 

在上面的推导中,我们知道了如果我们一棵树的结构确定了,如何求得每个叶子结点的分数。但我们还没介绍如何确定树结构,即每次特征分裂怎么寻找最佳特征,怎么寻找最佳分裂点。

正如上文说到,基于空间切分去构造一颗决策树是一个NP难问题,我们不可能去遍历所有树结构,因此,XGBoost使用了和CART回归树一样的想法,利用贪婪算法,遍历所有特征的所有特征划分点,不同的是使用上式目标函数值作为评价函数。具体做法就是分裂后的目标函数值比单子叶子节点的目标函数的增益,同时为了限制树生长过深,还加了个阈值,只有当增益大于该阈值才进行分裂。

同时可以设置树的最大深度、当样本权重和小于设定阈值时停止生长去防止过拟合。

五、Shrinkage and Column Subsampling

XGBoost还提出了两种防止过拟合的方法:Shrinkage and Column Subsampling。Shrinkage方法就是在每次迭代中对树的每个叶子结点的分数乘上一个缩减权重η,这可以使得每一棵树的影响力不会太大,留下更大的空间给后面生成的树去优化模型。Column Subsampling类似于随机森林中的选取部分特征进行建树。其可分为两种,一种是按层随机采样,在对同一层内每个结点分裂之前,先随机选择一部分特征,然后只需要遍历这部分的特征,来确定最优的分割点。另一种是随机选择特征,则建树前随机选择一部分特征然后分裂就只遍历这些特征。一般情况下前者效果更好。

六、近似算法

对于连续型特征值,当样本数量非常大,该特征取值过多时,遍历所有取值会花费很多时间,且容易过拟合。因此XGBoost思想是对特征进行分桶,即找到l个划分点,将位于相邻分位点之间的样本分在一个桶中。在遍历该特征的时候,只需要遍历各个分位点,从而计算最优划分。从算法伪代码中该流程还可以分为两种,全局的近似是在新生成一棵树之前就对各个特征计算分位点并划分样本,之后在每次分裂过程中都采用近似划分,而局部近似就是在具体的某一次分裂节点的过程中采用近似算法。

技术分享图片

七、针对稀疏数据的算法(缺失值处理)

当样本的第i个特征值缺失时,无法利用该特征进行划分时,XGBoost的想法是将该样本分别划分到左结点和右结点,然后计算其增益,哪个大就划分到哪边。

八、XGBoost的优点

之所以XGBoost可以成为机器学习的大杀器,广泛用于数据科学竞赛和工业界,是因为它有许多优点:

1.使用许多策略去防止过拟合,如:正则化项、Shrinkage and Column Subsampling等。

2. 目标函数优化利用了损失函数关于待求函数的二阶导数

3.支持并行化,这是XGBoost的闪光点,虽然树与树之间是串行关系,但是同层级节点可并行。具体的对于某个节点,节点内选择最佳分裂点,候选分裂点计算增益用多线程并行。训练速度快。

4.添加了对稀疏数据的处理。

5.交叉验证,early stop,当预测结果已经很好的时候可以提前停止建树,加快训练速度。

6.支持设置样本权重,该权重体现在一阶导数g和二阶导数h,通过调整权重可以去更加关注一些样本。

 【本文转载自: 磐创AI,作者:Ray,原文链接:https://mp.weixin.qq.com/s/AnENu0i3i5CdUQkZscMKgQ】

一文读懂什么是机器学习--1.机器学习是什么?

一文读懂什么是机器学习--1.机器学习是什么?  一文读懂什么是机器学习--1.机器学习是什么?一文读懂什么是机器学习--2.机器学习的范围?一文读懂什么是机器学习--3.机器学习的方法?一文读懂什么是机器学习--4.机器学习的... 查看详情

windows下快速安装xgboost(无需git或者vs)

   xgboost的全称是eXtremeGradientBoosting,现在已经风靡Kaggle、天池、DataCastle、Kesci等国内外数据竞赛平台,是比赛夺冠的必备大杀器!如果把数据竞赛比作金庸笔下的武林,那么XGBoost可谓屠龙刀,号令天下,莫敢不从!&n... 查看详情

一文读懂机器学习,大数据/自然语言处理/算法全有了……

...错资料,原文连接已不可知,在此就不添加了。一文读懂机器学习,大数据/自然语言处理/算法全有了……2015-01-06计算机的潜意识 数盟【数盟倡导“数据创造价值”,致力于打造最卓越的数据科学交流平台,... 查看详情

一文读懂!异常检测全攻略!从统计方法到机器学习⛵

异常值是偏离数据集中大多数样本点的数据点。出现异常值的原因有很多,例如自然偏差、欺诈活动、人为或系统错误。不过,在我们进行任何统计分析或训练机器学习模型之前,对数据检测和识别异常值都是必不可少的,这个... 查看详情

程序员大杀器?带你玩转chatgpt

...者:京东零售栗鸿宇ChatGPT简介ChatGPT是一款基于AI技术的机器人对话软件,它能够与用户进行智能化的聊天对话,帮助用户解决日常生活中的问题,为用户提供丰富的信息和服务。它集成了海量知识库,能够回答用户的各种问题... 查看详情

一文读懂!最新transformer预训练模型综述!

点击机器学习算法与Python学习,选择加星标精彩内容不迷路机器之心报道在如今的NLP领域,几乎每项任务中都能看见「基于Transformer的预训练语言模型(T-PTLM)」成功的身影。这些模型的起点是GPT和BERT。而这些模... 查看详情

一文读懂!最新transformer预训练模型综述!

点击机器学习算法与Python学习,选择加星标精彩内容不迷路机器之心报道在如今的NLP领域,几乎每项任务中都能看见「基于Transformer的预训练语言模型(T-PTLM)」成功的身影。这些模型的起点是GPT和BERT。而这些模... 查看详情

程序员大杀器?带你玩转chatgpt

ChatGPT是一款基于AI技术的机器人对话软件,它能够与用户进行智能化的聊天对话,帮助用户解决日常生活中的问题,为用户提供丰富的信息和服务。它集成了海量知识库,能够回答用户的各种问题,包括日常生活中的常识性问题... 查看详情

一文读懂遗传算法工作原理(附python实现)

 Datawhale干货 选自:AnalyticsVidhya,编译:机器之心近日,Analyticsvidhya上发表了一篇题为《IntroductiontoGeneticAlgorithm&theirapplicationindatascience》的文章,作者ShubhamJain现身说法,用通俗易懂 查看详情

一文读懂遗传算法工作原理(附python实现)

 Datawhale干货 选自:AnalyticsVidhya,编译:机器之心近日,Analyticsvidhya上发表了一篇题为《IntroductiontoGeneticAlgorithm&theirapplicationindatascience》的文章,作者ShubhamJain现身说法,用通俗易懂 查看详情

一文读懂遗传算法工作原理(附python实现)

 Datawhale干货 选自:AnalyticsVidhya,编译:机器之心近日,Analyticsvidhya上发表了一篇题为《IntroductiontoGeneticAlgorithm&theirapplicationindatascience》的文章,作者ShubhamJain现身说法,用通俗易懂 查看详情

chatgpt强化学习大杀器——近端策略优化(ppo)

ChatGPT强化学习大杀器——近端策略优化(PPO)近端策略优化(ProximalPolicyOptimization)来自ProximalPolicyOptimizationAlgorithms(Schulmanet.al.,2017)这篇论文,是当前最先进的强化学习(RL)算法。这种优雅的算法可... 查看详情

大杀器thefatrat

项目地址:https://github.com/Screetsec/TheFatRat安装TheFatRat[email protected]:/sch01ar#gitclonehttps://github.com/Screetsec/TheFatRat[email protected]:/sch01ar#cdTheFatRat/&&ls[email  查看详情

一文读懂javagc原理和调优(代码片段)

概述本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspotjdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决阅读时长约30分钟,内容主要如下:GC基础原理,涉及调优目标,GC事件分类、JVM内存分配策略... 查看详情

一文读懂层次聚类(python代码)(代码片段)

大家好,我是东哥。本篇想和大家介绍下层次聚类,先通过一个简单的例子介绍它的基本理论,然后再用一个实战案例Python代码实现聚类效果。首先要说,聚类属于机器学习的无监督学习,而且也分很多种方法,比如大家熟知的... 查看详情

java基础学习总结(186)——graalvm是java在云原生时代保持强大竞争力的大杀器吗

前言自1996年诞生以来,Java语言长期在最受欢迎的编程语言排行榜中占据领先地位。除了语言本身的优秀特性之外,Java语言持续演进、不断发展也是它能够保持长盛不衰的重要原因。Java语言的功能和性能都在不断地发展和提高... 查看详情

机器学习集成学习进阶xgboost算法原理

目录1最优模型的构建方法2XGBoost的目标函数推导2.1目标函数确定2.2CART树的介绍2.3树的复杂度定义2.3.1定义每课树的复杂度2.3.2树的复杂度举例2.4目标函数推导3XGBoost的回归树构建方法3.1计算分裂节点3.2停止分裂条件判断4XGBoost与GDB... 查看详情

分布式训练框架

...学习初探[2]分布式机器学习之—SparkMLlib并行训练原理[3]一文读懂「ParameterServer」的分布式机器学习训练原理[4]ParameterServer入门和理解[5]MPI教程介绍 查看详情