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的情况下,局部分桶需要更少的桶,因为它细化了分裂的候选数据;

在这里插入图片描述

相关内容

热门资讯

宁波精达(603088.SH)... 格隆汇12月18日丨宁波精达(603088.SH)公布,公司于2025年12月18日收到股东郑功出具...
传壁仞科技拟圣诞节前启动港股I... 观点网讯:12月18日,国产GPU企业壁仞科技计划于圣诞节前启动港股IPO程序,拟集资5亿至6亿美元...
黑牡丹(600510.SH)子... 黑牡丹(600510.SH)发布公告,近日,公司全资子公司常州黑牡丹置业有限公司以总价 6.77亿元...
豆包大模型联合润欣科技、老凤祥...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! (来源:IT之家)I...
万物云回购24万股 总金额46... 万物云(02602)发布公告,2025年12月18日,公司回购股份24万股,回购金额为461万港元。...