XGBoost 内部特性图

以下是对 XGBoost 支持的特性的参考。这不是一份入门指南,而是一份列表,旨在帮助希望向 XGBoost 添加新特性的人了解需要涵盖的内容。

核心特性

核心特性不依赖于语言绑定,任何语言绑定都可以选择支持它们。

数据存储

XGBoost 中用于存储用户输入的主要数据结构是 DMatrix;它是 XGBoost 可以使用的所有数据的容器。QuantileDMatrix 是一种变体,专为 hist 树方法设计。两者都可以接受基于 GPU 的输入。它们接受一个可选参数 missing 来指定应该忽略哪个输入值。关于外部内存支持,请参考使用 XGBoost 外部内存版本

单节点训练

XGBoost 中有两种不同的模型类型:树模型(我们主要关注)和线性模型。对于树模型,我们有各种构建决策树的方法;请参阅树方法获取完整参考。除了树方法,我们还有许多超参数用于调整模型并将先验知识注入训练过程。两个值得注意的例子是单调性约束特征交互约束。这两个约束在树构建过程中需要特殊处理。histapprox 树方法都支持 GPU 加速。此外,XGBoost GPU 支持基于梯度的采样,该采样也支持外部内存数据。

目标函数在训练中扮演重要角色。它不仅提供梯度,还负责估计牛顿优化过程的良好起始点。请注意,用户可以针对特定任务定义自定义目标函数。除了数值特征,XGBoost 还支持分类特征,包含两种不同的算法,包括独热编码和最优划分。更多信息请参考分类特征教程histapprox 树方法支持 CPU 和 GPU 上的分类特征。

目前正在进行对向量叶节点的支持,这些叶节点包含多个值。这种类型的树用于支持高效的多类和多目标模型。

推理

推理特指获取响应变量的模型预测。XGBoost 支持两种推理方法。第一种是在 DMatrix 对象(或其子类 QuantileDMatrix)上进行预测。使用 DMatrix 对象允许 XGBoost 缓存预测结果,因此在相同数据上使用新树进行预测时可以获得更快的性能。第二种方法是 inplace_predict,它跳过了 DMatrix 的构建。它更高效,但不支持缓存预测。除了返回估计的响应值,我们还支持返回叶子索引,这可用于分析模型或作为另一个模型的特征。

模型 IO

我们提供了一组用于不同模型序列化方法的方法,包括完整序列化、保存到文件和保存到缓冲区。更多信息请参考模型 IO 介绍

模型解释

XGBoost 包含旨在提高对模型理解的特性。以下是列表:

  • 全局特征重要性。

  • SHAP 值,包括贡献和干预。

  • 树结构转储。

  • 树可视化。

  • 将树表示为数据框。

对于 GPU 支持,SHAP 值使用了 rapidsai 中的 GPUTreeShap 项目。它们都支持分类特征,而向量叶节点仍在开发中。

评估

XGBoost 内置支持广泛的指标,从基本回归到排序学习和生存模型。它们可以处理分布式训练和基于 GPU 的加速。也支持自定义指标,请参阅自定义目标函数和评估指标

分布式训练

XGBoost 内置支持三种分布式框架,包括 DaskPySparkSpark (Scala)。此外,Java 绑定有 flink 支持,还有一个 ray-xgboost 项目。请参阅相应的教程了解如何使用它们。默认情况下,XGBoost 在分布式训练中使用基于样本的并行。基于列的划分仍在开发中,需要在这些高级框架集成中得到支持。在分布式训练之上,我们还在研究基于样本和基于列划分的联邦学习。

分布式训练也支持自定义目标函数和指标。XGBoost 在训练过程中会自动聚合评估结果。

分布式训练由内置的集合通信库实现。它基于 RABIT 项目,自早期采用以来已显著发展。该集合实现通过 NCCL 支持 GPU,并具有处理联邦学习和 GPU 上的联邦学习的变体。

推理通常不需要特殊处理,因为我们使用基于样本的划分。然而,对于基于列的数据划分,我们也需要初始化通信上下文。

语言绑定

我们有适用于各种语言的绑定列表。在 XGBoost 仓库中,有 Python、R、Java、Scala 和 C。所有语言绑定都构建在 C 版本之上。其他一些语言,如 Julia 和 Rust,有它们自己的仓库。关于添加新绑定的指南,请参阅语言绑定的规范一致性