当前位置: 首页 > 网络应用技术

最近,我研究了 - 深度数据挖掘工件-XGBOOST的算法原理和模型数据结构

时间:2023-03-09 02:03:23 网络应用技术

  指南:从事与数据挖掘相关的工作的人们必须了解XGBoost算法。这一代人在数据挖掘比赛中曾经发光的人工制品是Chen Tianqi在2016年提出的经典算法。本质上,XGBoost被认为是GBDT算法的优化实现,但除了综合算法概念的继承外,具体的设计细节实际上是非常不同的。我已经研究了-Depth,只是探索了底部设计的数据结构,我不禁感觉到算法的微妙之处!学习!

  2016年,陈提奇受邀参加XGBOOST的共享会议

  XGBoost是机器学习中的一种集成算法。它根据三个主要集成而划分,属于增强类型。增强类型也是综合算法中最活跃和最有力的类型。除XGBoost外,还有Adaboost和GBDT,以及LightGBM和Catboost。当然,LightGBM和Catboost和Xgboost通常被视为GBDT的改进和优化实现。

  XGBoost算法的原理实际上非常成熟和完整,并且在Internet上有无数的共享。因此,本文不想重复长篇小说的前辈的工作,但是写作的重点如下:首先,从公式公式的角度分享。个人对XGBoost算法原理的理解;第二个是简单地探索XGBoost底层的数据结构设计。后者类似于上一条推文“数据科学:Sklearn中的决策树,底层是如何设计和存储的?”。

  为了了解XGBoost算法的原理,以下主要共享与算法有关的五个主要公式的推导过程。所有公式主要源自XGBOOST官方文档(https://xgboost.readthed publiss.io.io.io/en/en/laatest)。您还可以找到相关论文。

  该公式非常简单,但是对于理解公式。XGBOOST作为一种增强算法,遵循典型的添加模型,即集成算法的输出等于每个基础学习设备的输出的总和(需要返回问题,并且可以很好地理解。与逻辑回归的方法相似,在后面提到),上公式中的fk(x)代表单个基础学习设备,k表示基本学习设备的数量。如图所示。在下图中,将2个基本学习设备的集成模型用作示例。“儿子”的集成模型输出是两个基本学习设备的总和,即2+0.9 = 2.9;“爷爷”的集成模型输出是创始人的输出的总和,即-1-0.9 = -1.9。

  机器学习的三个要素:模型,策略和算法。该策略包含如何定义或评估模型质量。换句话说,它涉及定义损失功能。与GBDT的连续拟合不同,XGBoost以其基础增加了模型的结构损失,这可以理解为模型学习的成本。残留物对应于经历损失,可以理解为差距和缺乏模型学习能力。

  在上述目标函数中(目标函数比损失函数更高,通常包括两个部分:目标函数=损失+常规项目越大。除了目标函数和损失函数外,还有同样是一个相关性,该术语称为成本函数。从某种意义上说,成本函数可以被大致理解为损失函数。相应的损失函数定义,典型的损耗函数是:回归问题的相应MSE损失,分类问题对应于Logloss损失;和谐的第二部分反映了模型的结构风险,并影响模型的PAN -CHINA能力。如果基本学习设备选择了决策树,则此处的结构风险被定义为:

  其中,γ和λ是常规项目系数,t是决策树中的叶子节点的数量。注意,这是叶子节点的数量,而不是决策树中的节点的数量(卡车时使用的常规项目决策树是CCP,计算节点的数量)。此外,这是通常引入XGBoost原理的公式,也是Chen Tianqi中最早的写作方法。在Python的XGBoost工具包中,除了与这两个参数相对应的伽马和reg_lambda之外,还有reg_alpha参数,目前可以写下第一个订单常规项目:

  理解:泰勒的第二阶 - 大约是XGBOOST的灵魂,它也是最有力的意识和强大性,可以与GBDT.相比,可以更好地解释上述相似性,首先,首先是使用从通常的意义上说:

  当然,上述公式只是接近第二阶。只要f(x)是无限的指导,就可以有更高的近似值。在公式2的第一部分中,再次给出单个表达式:

  在上层公式中,降低I对应于训练浓度的I样品I,而在综合算法中的T-1圆圈对应于上角T和T-1。,谁是△x?在这里,f是一个函数标记,对应于损失函数中的l,重点是理解x和△x。

  在模型培训期间,培训数据集实际上是确定的。每个基础学习设备中的固定值集,因此yi自然也不例外,并且可以将其视为上述公式中的常数。在综合模型训练的t圈T圈中,模型训练的目的是根据目前的前T-1轮的训练结果(目前),以找到最佳的T圈结果,以获得当前可能的最小损失率

  实际上,在综合学习中,第一个基础学习设备通常能够拟合大多数结果。例如,在拟合年龄的通常例子中,100的结果可能是配合的结果,那么第一个基础学习设备的拟合结果很可能是90,而N-很可能是N-1后背后的学习设备不断修改此残差:10.本示例的目的是表达:上述公式中前t-gound的拟合结果y_hat实际上对应于f(x+△x)中的x,并且拟合T-ROUND的值可以被视为就像它一样。将变量ivalible△x铺设。在这一点上,根据泰勒的扩展样式,可以详细扩展上述目标函数:

  其中,GI和HI分别是第一阶和第二级指南:

  此外,请记住y是实际值,y_hat作为拟合值。对于返回问题,最常用的MSE损失,然后其损耗函数以及相应的第一阶和第二阶指导是:

  对于分类问题,以第二分类问题为例,XGBoost中的默认损失函数是Logloss。相应的损耗函数以及相应的第一阶和第二阶指南为:

  XGBoost理论上可以支持任何基本学习设备,但最常用的是使用决策树。Python中的XGBOOST工具库还使用GBTREE作为基础学习设备。在决策树中,T -Round Training获得的最佳决策树实际上是寻求最佳叶子的过程,因此了解这一点很重要的是要了解这一点很重要最佳叶子功率。

  幸运的是,上面的两个公式的解决方案非常容易理解,甚至说这是初中中数学知识的类别,这比Svm.svm.laglangi更容易理解。

  当i是样品序列号时,n是样品的总数。在相等数量转换的第二步中,将叶子节点用作粒度,并且落在同一叶子节点的多个样品被聚集。在这个时间上,每个叶子节点的重量对应于内部板球。

  随着上述近似发育和每个叶节点的收敛性,可以导致以下公式:以下公式:

  其中,GJ和HJS是所有样本的第一个订单指导和所有JJ节点所有样本的两个阶级指导,即:

  上述目标公式可以被视为一个美元的次级表达式的总和,每个一个美元的次级表达式中的变量是ωj。明显地,解决解决最小值的最小问题解决了求解最小值的最小值初中数学的最小值很容易获得最佳ωj的最小值和相应的损失函数。

  一个 - 美元的辅助函数必须具有最小值,因为第二项1/2(HJ+λ)的系数必须是正数!

  Formula 4解决了叶节点的最佳重量,因此它实际上绕过了一个问题:决策树的内部节点如何拆分?如何将内部节点分开实际上可以进一步细分为两个子问题:

  ①选择哪些功能分开?

  ②将什么阈值分为左右树?

  第一个问题非常容易解决。最简单,最有用的做法是拥有所有特征的历史。与哪些特征相比,最大的收益是最大的。

  对于第二个问题,实际上,遍历卓越的方法也用于获得最佳的分裂阈值。至于如何遍历最好的,实际上,它可以进一步细分为两个问题:

  i)选择了哪些候选分配阈值?

  ii)如何衡量哪个分裂阈值更好?

  它涉及候选部门阈值的许多技术。XGBOOST和LIGHTGBM都使用直方图简化了可能的最佳拆分点候选值。这里涉及许多细节。卓越的问题只能在上一个公式4中使用结论 - 在最佳权利下叶子节点的最小损失表达式。基于此,最佳划分阈值的过程如下:

  因此,该节点是否直接将其分为左和右叶节点以减少损失?因此,只需减少划分之前和之后的损失!那么为什么γT部分在减少后变为-γ?实际上,这是因为这是因为该部分的常规项目对应于分裂前的一个叶子节点,两个叶节点对应于分裂后的两个叶子,因此两部分的γT降低了TO-γ。

  以上是对XGBoost中几个核心公式的理解。我相信,了解这五个公式基本上可以理解XGBoost的设计和实现方式。当然,XGBoost的强度和巧妙设计不仅是上述算法的原理。实际上,有许多实践技能和优化,这也构成了XGBoost的可扩展功能。有关详细信息,请参阅论文“ XGBoost:可扩展树的增强系统”。

  第一部分主要引入XGBoost的核心公式部分。以下是在XGBOOST中共享基础数据结构设计的简短。这部分工作仍然是由于某些预研究工作的最新需求,因此我专注于如何存储如何存储所有基础学习设备XGBOOST中线,即每个决策树的训练结果。

  为了了解XGBoost训练后的决策树如何,我们检查了分类器模型培训的模型培训。经过简单的视图后,您可以将以下代码定位:

  换句话说,XGBClassifer模型训练的结果应保留在_Booster属性中。

  当然,上述XGBOOST提供的Sklearln类型接口在其本机培训方法中实际上是一种模型培训,该模型训练称为XGBOOST.TRAIN功能要实现。此时,通过不同的目标区分不同的任务类型。

  为了进一步查看此_booster属性,我们实际上训练XGBoost二类模型使用以下简单代码示例:

  然后,通过DIR属性检查此_Booster的结果:

  实际上,此_booster属性是XGBOOST中定义的类。以上结果还可以直接查看XGBoost中的助推器类的定义。在上述DIR结果中,有几个功能值得关注:

  在这里,首先查看TROEE_TO_DATAFRAME的结果:

  除了最后一个封面和类别字段的含义外,其他字段的含义似乎很明显。

  之后,探索save_model和dump_model的结果。由于dump_model的结果很方便,因此首先检查此结果:

  这是dump_model之后的TXT文件的三个决策树信息。可以看出,dump_model的结果仅保留每个决策树的分区相关信息。以Booster [0]的第一个决策树为例。决策树有三个节点。节点的压痕关系表示子节点的相应关系。内部节点标记标识所选的拆分特性和相应的阈值,但是叶节点背后的值实际上不是其重量。

  然后,探索save_model的JSON文件的结果,首先检查整个JSON的结构关系:

  其中,树的部分是包含100个项目的列表,该列表与100个基本学习设备的信息相对应。进一步查看。与Sklearn中基于数组的树表示类似,此处的决策树的每个节点的信息仍然基于数组,也就节点。主字段和含义如下:

  值得指出的是,在比较了left_childrn和right_children和父母的三个属性的值之后,很容易推断XGBoost中的决策树节点编号是分层遍历,这与Sklearn中使用的初步遍历不同。

  以上只是XGBOOST中基础学习设备信息的一些简单探索。那些感兴趣的人可以进一步尝试查看相应的源代码设计。我希望帮助理解XGBoost的原则。

  原始:https://juejin.cn/post/7096111249175347213