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

在这里插入图片描述

相关内容

热门资讯

柴宝良到市自然资源和规划局调研... 转自:承德发布1月7日,市委书记柴宝良到市自然资源和规划局调研并主持召开座谈会,听取市直相关部门和部...
【头条】设备运行时间比以往任何... (来源:华印纸箱彩盒)设备运行时间比以往任何时候都更加至关重要!BWP马贵新建汉堡中心,以强化欧洲、...
聚焦包容性适应性 资本市场新一... (来源:经参证券)2026年是“十五五”开局之年,以投融资综合改革为引领,资本市场进一步全面深化改革...
漫步于城市:都市世界主义中的殖... 本文摘录自《21世纪美国小说的城市化表征》,杨金才 等著,上海外语教育出版社,2026年1月“这些诗...
楚江新材:投资者质疑市值管理,... 投资者提问:董秘,您好,公司中国500强企业,市值才210亿,一涨股东就跑,一涨员工持股就抛售,一问...