XGB-22:XGBoost树方法

在训练提升树模型时,有两个用于选择算法的参数,即 updater 和 tree_method。XGBoost 有三种内置的树方法,分别是 exactapproxhist。除了这些树方法之外,还有一些独立的更新器,包括 refreshprune sync参数 updatertree_method 更为基础,因为后者只是前者的预配置。这种差异主要是由于历史原因,每个更新器都需要一些特定的配置,并且可能缺少某些功能。

精确方法

Exact精确意味着XGBoost考虑从数据中选择所有候选的树分裂点,但其背后的目标仍然被解释为泰勒展开。

  • exact(精确):这是在参考论文中描述的标准梯度提升树算法。在查找分裂点时,它会迭代所有输入数据的条目。它更准确(在其他贪婪方法中)但与其他树方法相比计算速度较慢。此外,其功能集是有限的。不支持需要近似分位数的分布式训练和外部内存等功能。可以使用参数tree_method设置为exact来使用此树方法。

近似方法

由于精确树方法在计算性能上较慢且难以扩展,因此通常采用近似的训练算法。这些算法为每个节点构建一个梯度直方图,并通过直方图迭代,而不是使用真实的数据集。

  • approx树方法:在构建每棵树之前,它会对所有行(属于根节点的行)进行草图处理。在草图处理过程中,Hessian被用作权重。可以通过将tree_method设置为approx来访问此算法。

  • hist树方法:这是LightGBM中使用的一种近似树方法,实现上有些许不同。它在训练之前对用户提供的权重进行草图处理,而不是使用Hessian。随后,基于此全局草图构建每个节点的直方图。这是最快的算法,因为它只运行一次草图处理。可以通过将tree_method设置为hist来访问此算法。

问题

一些目标函数,比如reg:squarederror,具有常数Hessian。在这种情况下,应该首选hist,因为使用常数权重进行草图处理是没有意义的。当使用非常数Hessian目标时,有时approx能够获得更好的准确性,但计算性能较慢。大多数情况下,使用具有更高max_binhist可以实现类似甚至更好的准确性,同时保持良好的性能。然而,由于xgboost在很大程度上是由社区推动的,实际的实现与纯数学描述有一些差异,结果可能与预期略有不同。

其他的更新

  • Prune: 对已建立的树进行修剪。通常prune是作为其他树方法的一部分来使用的。要独立使用pruner,需要将处理类型设置为update by: {"process_type": "update", "updater": "prune"}。使用这组参数进行训练时,XGBoost将根据两个参数min_split_loss(gamma)max_depth修剪现有的树

  • Refresh: 刷新已建树的统计信息,使用新的训练数据集。与pruner一样,要独立使用refresh,需要将处理类型设置为update: {"process_type": "update", "updater": "refresh"}。在训练过程中,更新器将根据新的训练数据集更改统计信息,例如cover和weight。当refresh_leaf也设置为true时,XGBoost将根据新的叶权重更新叶值,但树结构(分割条件)本身不会改变

  • Sync: 在运行分布式训练时,对工作节点之间的树进行同步

已删除的更新

  • Distributed colmaker: 这是 exact tree 方法的分布式版本。它需要为基于列的分裂策略进行专门设计,并且具有不同的预测过程。由于 exact tree 方法本身速度较慢,扩展性更低效,因此完全删除了它。

  • skmakergrow_local_histmaker 使用的每个节点加权草图都很慢,而 skmaker 未经维护,似乎是一种尝试消除直方图创建步骤并直接在分裂评估期间使用草图值的解决方案。它从未经过测试,包含一些未知的错误,现删除它,并将资源集中在更有前途的算法上。就准确性而言,大多数情况下,通过一些参数调整,approxhist 就足够了,因此删除它们不会有任何实际影响。

  • grow_local_histmaker 更新程序:在寻找分裂时,它首先对属于当前节点的数据点运行加权 GK 草图以找到分裂候选项,使用 hessian 作为权重。直方图是根据每个节点的这个草图构建的。在某些应用中,它比 exact 更快,但仍然在计算上较慢。它被删除,因为它依赖于 Rabit 的定制化归约功能,该功能处理可以序列化/反序列化为固定大小缓冲区的所有数据结构,这不受 NCCL 或联邦学习 gRPC 的直接支持,因此很难重构为通用的全局归约接口。

特征矩阵

以下表格总结了4种树方法之间在支持功能方面的一些差异,其中T表示支持,而F表示不支持。

ExactApproxApprox (GPU)HistHist (GPU)
grow_policyDepthwisedepthwise/lossguidedepthwise/lossguidedepthwise/lossguidedepthwise/lossguide
max_leavesFTTTT
sampling methoduniformuniformgradient_based/uniformuniformgradient_based/uniform
categorical dataFTTTT
External memoryFTPTP
DistributedFTTTT

在此未提及的特性/参数在所有3种树方法中都是通用支持的(例如,列采样和约束)。外部内存中的 P 表示特殊处理。请注意,分类数据和外部内存都是实验性的。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值