XGBoost 内部特性图
以下是对 XGBoost 支持的特性的参考。这不是一份入门指南,而是一份列表,旨在帮助希望向 XGBoost 添加新特性的人了解需要涵盖的内容。
核心特性
核心特性不依赖于语言绑定,任何语言绑定都可以选择支持它们。
数据存储
XGBoost 中用于存储用户输入的主要数据结构是 DMatrix
;它是 XGBoost 可以使用的所有数据的容器。QuantileDMatrix
是一种变体,专为 hist
树方法设计。两者都可以接受基于 GPU 的输入。它们接受一个可选参数 missing
来指定应该忽略哪个输入值。关于外部内存支持,请参考使用 XGBoost 外部内存版本。
单节点训练
XGBoost 中有两种不同的模型类型:树模型(我们主要关注)和线性模型。对于树模型,我们有各种构建决策树的方法;请参阅树方法获取完整参考。除了树方法,我们还有许多超参数用于调整模型并将先验知识注入训练过程。两个值得注意的例子是单调性约束和特征交互约束。这两个约束在树构建过程中需要特殊处理。hist
和 approx
树方法都支持 GPU 加速。此外,XGBoost GPU 支持基于梯度的采样,该采样也支持外部内存数据。
目标函数在训练中扮演重要角色。它不仅提供梯度,还负责估计牛顿优化过程的良好起始点。请注意,用户可以针对特定任务定义自定义目标函数。除了数值特征,XGBoost 还支持分类特征,包含两种不同的算法,包括独热编码和最优划分。更多信息请参考分类特征教程。hist
和 approx
树方法支持 CPU 和 GPU 上的分类特征。
目前正在进行对向量叶节点的支持,这些叶节点包含多个值。这种类型的树用于支持高效的多类和多目标模型。
推理
推理特指获取响应变量的模型预测。XGBoost 支持两种推理方法。第一种是在 DMatrix
对象(或其子类 QuantileDMatrix
)上进行预测。使用 DMatrix
对象允许 XGBoost 缓存预测结果,因此在相同数据上使用新树进行预测时可以获得更快的性能。第二种方法是 inplace_predict
,它跳过了 DMatrix
的构建。它更高效,但不支持缓存预测。除了返回估计的响应值,我们还支持返回叶子索引,这可用于分析模型或作为另一个模型的特征。
模型 IO
我们提供了一组用于不同模型序列化方法的方法,包括完整序列化、保存到文件和保存到缓冲区。更多信息请参考模型 IO 介绍。
模型解释
XGBoost 包含旨在提高对模型理解的特性。以下是列表:
全局特征重要性。
SHAP 值,包括贡献和干预。
树结构转储。
树可视化。
将树表示为数据框。
对于 GPU 支持,SHAP 值使用了 rapidsai 中的 GPUTreeShap 项目。它们都支持分类特征,而向量叶节点仍在开发中。
评估
XGBoost 内置支持广泛的指标,从基本回归到排序学习和生存模型。它们可以处理分布式训练和基于 GPU 的加速。也支持自定义指标,请参阅自定义目标函数和评估指标。
分布式训练
XGBoost 内置支持三种分布式框架,包括 Dask
、PySpark
和 Spark (Scala)
。此外,Java 绑定有 flink
支持,还有一个 ray-xgboost
项目。请参阅相应的教程了解如何使用它们。默认情况下,XGBoost 在分布式训练中使用基于样本的并行。基于列的划分仍在开发中,需要在这些高级框架集成中得到支持。在分布式训练之上,我们还在研究基于样本和基于列划分的联邦学习。
分布式训练也支持自定义目标函数和指标。XGBoost 在训练过程中会自动聚合评估结果。
分布式训练由内置的集合通信库实现。它基于 RABIT 项目,自早期采用以来已显著发展。该集合实现通过 NCCL 支持 GPU,并具有处理联邦学习和 GPU 上的联邦学习的变体。
推理通常不需要特殊处理,因为我们使用基于样本的划分。然而,对于基于列的数据划分,我们也需要初始化通信上下文。
语言绑定
我们有适用于各种语言的绑定列表。在 XGBoost 仓库中,有 Python、R、Java、Scala 和 C。所有语言绑定都构建在 C 版本之上。其他一些语言,如 Julia 和 Rust,有它们自己的仓库。关于添加新绑定的指南,请参阅语言绑定的规范一致性。