XGBoost原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XGBoost原理相关的知识,希望对你有一定的参考价值。

参考技术A

更好的阅读体验请跳转至 XGBoost原理

一.绪论
在实际应用的机器学习方法里,GradientTree Boosting (GBDT)是一个在很多应用里都很出彩的技术。XGBoost是一套提升树可扩展的机器学习系统。2015年Kaggle发布的29个获胜方法里有17个用了XGBoost。在这些方案里,有8个仅用了XGBoost,另外的大多数用它结合了神经网络。对比来看,第二流行的方法,深度神经网络,只被用了11次。这个系统的成功性也被KDDCup2015所见证了,前十的队伍都用了XGBoost。此外,据胜出的队伍说,很少有别的集成学习方法效果能超过调好参的XGBoost。
主要创新点:
设计和构建高度可扩展的端到端提升树系统。
提出了一个理论上合理的加权分位数略图(weighted quantile
sketch )来计算候选集。
引入了一种新颖的稀疏感知算法用于并行树学习。 令缺失值有默认方向。
提出了一个有效的用于核外树形学习的缓存感知块结构。 用缓存加速寻找排序后被打乱的索引的列数据的过程。

二.算法原理
1.学习目标
首先来看下我们是如何预测的:
XGBoost是一个树集成模型,他将K(树的个数)个树的结果进行求和,作为最终的预测值。即:

最终我们将关于树模型的迭代转化为关于树的叶子节点的迭代,并求出最优的叶节点分数。
将叶节点的最优值带入目标函数,最终目标函数的形式为:

上式可以作为得分函数用来测量树结构q的质量,他类似与决策树的不纯度得分,只是他通过更广泛的目标函数得到

节点划分

而通常情况下,我们无法枚举所有可能的树结构然后选取最优的,所以我们选择用一种贪婪算法来代替:我们从单个叶节点开始,迭代分裂来给树添加节点。节点切分后的损失函数:

上式用来评估切分后的损失函数,我们的目标是寻找一个特征及对应的值,使得切分后的loss reduction最大。γ除了控制树的复杂度,另一个作用是作为阈值,只有当分裂后的增益大于γ时,才选择分裂,起到了预剪枝的作用。

缩减与列采样

除了在目标函数中引入正则项,为了防止过拟合,XGBoost还引入了缩减(shrinkage)和列抽样(column subsampling),通过在每一步的boosting中引入缩减系数,降低每个树和叶子对结果的影响;列采样是借鉴随机森林中的思想,根据反馈,列采样有时甚至比行抽样效果更好,同时,通过列采样能加速计算。

寻找最佳分割点算法
树模型学习的一个关键问题是如何寻找最优分割点。第一种方法称为基本精确贪心算法(exact greedy algorithm):枚举所有特征的所有可能划分,寻找最优分割点。该算法要求为连续特征枚举所有可能的切分,这个对计算机要求很高,为了有效做到这一点,XGBoost首先对特征进行排序,然后顺序访问数据,累计loss reduction中的梯度统计量(式6)。

上述方法是一个非常精确的分割点算法,但是当数据无法完全加载进内存或分布式的情况下,该算法就不是特别有效了。为了支持这两种场景,提出了一种近似算法:根据特征分布的百分位数,提出n个候选切分点,然后将样本映射到对应的两个相邻的切分点组成的桶中,聚会统计值,通过聚会后的统计值及推荐分割点,计算最佳分割点。该算法有两种形式:全局近似和局部近似,其差别是全局近似是在生成一棵树之前,对各个特征计算其分位点并划分样本;局部近似是在每个节点进行分裂时采用近似算法。近似算法的流程:

带权重的分位数略图(weighted quantile sketch)算法
在近似算法中重要的一步是寻找候选分割点,通常情况下,特征的百分位数使数据均匀的分布在数据上。现在我们定义一个数据集Dk = (x1k, h1), (x2k, h2) ... 代表样本的第k个特征及其对应的二阶梯度,现在我们定义一个函数rk:

参考: https://arxiv.org/pdf/1603.02754.pdf
https://www.zhihu.com/question/41354392/answer/98658997

XGBoost原理详解


原文:https://blog.csdn.net/qq_22238533/article/details/79477547


技术分享图片

 



以上是关于XGBoost原理的主要内容,如果未能解决你的问题,请参考以下文章

xgboost原理及应用

XGBoost 原理及应用

xgboost原理

xgboost 原理个人理解解读

XGBoost算法原理简析

xgboost原理