xgboost: 分割查找算法:贪婪算法、分桶算法
创始人
2024-05-28 18:33:32

1、Basic Exact Greedy Algorithm

树学习的关键问题之一是找到最好的分割,如Eq(7)所示。

贪婪算法:分割查找算法枚举所有特征上的所有可能的分割。精确的贪婪算法如Alg. 1所示。为了高效地完成这一任务,算法必须首先根据特征值对数据进行排序,并按排序顺序访问数据,积累Eq(7)中结构得分的梯度统计量。现有的大多数单个树提升实现都支持精确贪婪算法,如scikit-learn[20]、R的gbm[21]以及XGBoost的单机版本。

Eq(7)在文章:xgboost:算法数学原理_KPer_Yang的博客-CSDN博客
Lsplit=12[(∑i∈ILgi)2∑i∈ILhi+λ+(∑i∈IRgi)2∑i∈IRhi+λ−(∑i∈Igi)2∑i∈Ihi+λ]−γ\mathcal{L}_{split}=\frac{1}{2}\left[\frac{(\sum_{i\in I_L}g_i)^2}{\sum_{i\in I_L}h_i+\lambda}+\frac{(\sum_{i\in I_R}g_i)^2}{\sum_{i\in I_R}h_i+\lambda}-\frac{(\sum_{i\in I}g_i)^2}{\sum_{i\in I}h_i+\lambda}\right]-\gamma Lsplit​=21​[∑i∈IL​​hi​+λ(∑i∈IL​​gi​)2​+∑i∈IR​​hi​+λ(∑i∈IR​​gi​)2​−∑i∈I​hi​+λ(∑i∈I​gi​)2​]−γ
算法的流程如下所示:

在这里插入图片描述

mmm:特征的维度;

sorted(I,byxjk)sorted(I, by \ x_{jk})sorted(I,by xjk​):在特征kkk下的样本特征值进行排序,排序后按照划分点进行特征值划分,计算score。

2、 Approximate Algorithm

精确的贪婪算法非常强大,因为它贪婪地枚举了所有可能的分裂点。然而,当数据太大不能全部放入内存时,全部枚举不能做到。同样的问题也出现在分布式环境中。为了在这两种情况下支持有效的梯度树增强,需要一个近似算法。

**在Alg. 2中,首先根据特征分布的百分位数提出候选分裂点(具体标准将在第3.3节给出)。然后,该算法将连续特征映射到由这些候选点分割的桶中,汇总统计数据,并根据汇总的统计数据在分桶后的数据中找到最佳解决方案。**该算法有两种变体,这取决于给出分桶的时间。在合理的近似水平下,分位数策略可以获得与精确贪婪相同的精度。

  • 全局分桶方法在树构造的初始阶段提出所有候选分割,并在所有级别上使用相同的分割查找分桶。

  • 局部分桶在每次分裂后重新分桶。

在这里插入图片描述

Gkv←=∑j∈{j∣sk,v≥xjk>sk,v−1}gjG_{kv}\leftarrow=\sum_{j\in\{j\mid s_{k,v}\geq\mathbf{x}_{jk}>s_{k,v-1}\}}g_jGkv​←=∑j∈{j∣sk,v​≥xjk​>sk,v−1​}​gj​:按照每个桶计算GGG.

Hkv←=∑j∈{j∣sk,v≥xjk>sk,v−1}hjH_{kv}\leftarrow=\sum_{j\in\{j|s_{k,v}\geq\mathbf{x}_{jk}>s_{k,v-1}\}}h_jHkv​←=∑j∈{j∣sk,v​≥xjk​>sk,v−1​}​hj​:按照每个桶计算HHH.

注:个人理解,分桶其实相当于分裂时就按照每个桶分到左右分支,按照每个桶计算GGG和HHH,而不是一个个样本计算,遍历所有的特征值寻找分裂点。

对比:希格斯10M数据集的AUC收敛性比较。eps参数对应于近似草图的精度。这大致相当于分成1 / eps个桶。相同AUC的情况下,局部分桶需要更少的桶,因为它细化了分裂的候选数据;

在这里插入图片描述

相关内容

热门资讯

2026年中考成绩单|低波策略 (来源:国泰基金微幸福)
消保Tips丨识破非法金融“新... 当前,非法金融活动手段不断翻新,从传统的民间标会、涉农集资,到披着“虚拟货币”“RWA(现实世界资产...
保密小课堂 | 过程稿不标密—... 在日常保密工作中,一部分人存在认识误区:正式文件才需要定密,过程稿不用标密、不用管控。事实是,涉密过...
周动态丨龙江交通一周热点回顾 (来源:黑龙江交通发展股份有限公司)公司本周要闻1图丨活动现场6月26日,哈尔滨龙庆公路养护管理有限...
茉莉奶白急招知识产权法务经理 ...   7月3日下午消息,近日,苏州市中级人民法院一审认定茉莉奶白侵害LV的7件四叶花卉图形商标权,判令...