XGBoost原理简介

时间:2021-02-16 05:27:36

XGBoost是GBDT的改进和重要实现,主要在于:

  1. 提出稀疏感知(sparsity-aware)算法。
  2. 加权分位数快速近似学习算法。
  3. 缓存访问模式,数据压缩和分片上的实现上的改进。
  4. 加入了Shrinkage和列采样,一定程度上防止过拟合。

提升算法

  XGBoost也是一个加法模型,首先其在目标函数中加入了正则化项:

XGBoost原理简介

  泰勒级数

XGBoost原理简介

  yi(t)是第i个实例在第t次迭代的预测值,需要加入 ft来最小化以下目标

XGBoost原理简介

  通过泰勒二阶展开近似来快速优化目标函数

XGBoost原理简介

  其中

XGBoost原理简介

  即l的一阶和二阶导数。移除常数项得到:

XGBoost原理简介

  定义 Ij = {i|q(xi)=j}作为叶子结点j的实例集合。将上式展开为:

XGBoost原理简介

  计算权重公式:

XGBoost原理简介

  带入目标函数得(一阶和二阶导数合并成了一项):

XGBoost原理简介

  这一项算出的值就是第t棵树要优化目标函数,使其尽量小。下图展示计算过程,目标函数越小越好。

XGBoost原理简介

  枚举所有可能结构的树是不可能的,通过贪心算法从叶节点开始迭代得添加分支,IL、IR分别是分割点左右分支的实例集,分割的损失下降定义为:

XGBoost原理简介

Weighted Quantile Sketch-加权分位

  近似算法通过特征百分位点作为划分候选。使集合XGBoost原理简介代表样本点的第k个特征值和二阶导数。定义排序函数:

XGBoost原理简介

  上式表示特征值小于z的样本占整体的比例。目标是找到候选切分点{sk1, sk2, ···,skl}使得:

XGBoost原理简介

  其中ε是近似因子,这意味着有1/ε个候选点,每个数据点权重是hi,下式说明为什么用它做权重:

XGBoost原理简介

  其中hi即为平方损失的权重,对于大数据集,找到满足条件的候选分裂是非常重要的。以前的分位算法中没有权重,因为加权数据集没有分位数。

  为了解决这个问题,XGBoost提出了新颖的分布式加权的分位数算法,作者理论证明它可以处理加权的数据。总的思路是提出一个支持合并和修剪操作的数据结构,每个操作都被证明保持一定的准确性水平。 证明见xgboost-supp.pdf

Sparsity-aware Split Finding

  真实数据很多都是稀疏的数据,有很多原因:1.数据中有缺失值。2.统计中频繁出现0条目。3.人工特征工程造成,例如one-hot。为了算法稀疏感知,XGBoost每个树节点加入了默认方向,如图:

XGBoost原理简介

  当数据值缺失的时候,样本被划分到默认方向,默认方向是通过学习数据获得的,其算法如下图,关键提升在于只看不缺失的实例进入Ik,所提出的算法将不存在作为缺失值处理,并学习处理缺失值的最佳方向。 通过将枚举限制为恒定的解决方案,当不存在对应于用户指定的值时,也可以应用相同的算法。

XGBoost原理简介

  大多数现有的树学习算法或者只是针对密集数据进行优化,或者需要特定的程序来处理有限的情况,如分类编码。 XGBoost以统一的方式处理所有的稀疏模式。 更重要的是,作者的方法利用稀疏性使计算复杂度与输入中非缺失条目的数量成线性关系。 下图显示了稀疏感知和对Allstate-10K数据集简单实现的比较。 作者发现稀疏感知算法的运行速度比原始版本快50倍。这证实了稀疏感知算法的重要性。

XGBoost原理简介

参考

XGBoost原理-XGBoost A Scalable Tree Boosting System