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
的构建。这种方法更高效,但不支持缓存预测。除了返回估计的响应外,我们还支持返回叶索引,这可以用于分析模型,并作为另一个模型的特征。
模型输入输出
我们有一组用于不同模型序列化方法的方法,包括完整序列化、保存到文件和保存到缓冲区。更多信息,请参阅 模型输入输出简介。
模型解释
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,则有自己的仓库。有关添加新绑定的指南,请参阅 语言绑定的统一性。