3.1.0 (2025 年 9 月 22 日)

我们很高兴分享 XGBoost 最新的 3.1.0 更新。

分类重新编码器

此版本通过引入重新编码器对分类数据支持进行了重大更新。此重新编码器将类别保存在训练好的模型中,并在推理过程中对数据进行重新编码,以保持分类编码的一致性。除了整数等基本类型,它还支持基于字符串的类别。此实现适用于所有支持的 Python DataFrame 实现。(#11609#11665#11605#11628#11598#11591#11568#11561#11650#11621#11611#11313#11311#11310#11315#11303#11612#11098#11347) 更多信息请参阅自动重新编码(数据一致性)。(#11297

此外,现在支持 Polars 数据帧的分类支持(#11565)。

最后,在此版本中,我们移除了分类特征支持的实验性标签。(#11690

外部内存

我们继续在 3.1 中进行外部内存支持的工作。在此版本中,XGBoost 具有 CUDA 外部内存的自适应缓存。改进后的缓存可以根据底层硬件和数据大小将数据拆分到 CPU 内存和 GPU 内存之间。(#11556#11465#11664#11594#11469#11547#11339#11477#11453#11446#11458#11426#11566#11497

此外,还有一个可选支持(选择加入),用于使用 nvcomp 和 GB200 解压引擎处理稀疏数据(需要 nvcomp 作为插件)(#11451#11464#11460#11512#11520)。我们改进了外部内存下分位数素描的内存使用(#11641),并优化了训练预测器(#11548)。为了帮助确保训练性能,最新的 XGBoost 具有 NUMA(非统一内存访问)节点检测功能(#11538#11576),用于检查跨套接字数据访问。我们正在开发额外的工具来增强 NUMA 节点性能。除了功能之外,我们还添加了各种文档改进。(#11412#11631

最后,已移除文本文件输入的外部内存支持(#11562)。展望未来,我们将专注于迭代器输入。

多目标/多类别截距

从 3.1 开始,当模型有多个输出时,无论是多目标回归还是多类别分类,基线分数(截距)都被估计并存储为向量。这一改变增强了多输出模型的初始估计,并将成为未来向量叶工作的基础。(#11277#11651#11625#11649#11630#11647#11656#11663

特点

  • 支持 CPU 上 QDM 的叶预测。(#11620

  • 改进首次迭代的均值采样种子。(#11639

  • 可选地在 CMake 构建中包含 git 哈希。(#11587

移除已弃用功能

此版本移除了一些已弃用的功能,特别是二进制 IO 格式,以及在 2.0 中已弃用的功能。

  • 二进制序列化格式已在 3.1 中移除。该格式已在 1.6 中正式弃用。(#11307#11553#11552#11602

  • 移除了旧的 GPU 相关参数,包括 use_gpu (pyspark)、gpu_idgpu_histgpu_coord_descent。这些参数已在 2.0 中弃用。请改用 device 参数。(#11395#11554#11549#11543#11539#11402

  • 移除已弃用的 C 函数:XGDMatrixCreateFromCSRExXGDMatrixCreateFromCSCEx。(#11514#11513

  • XGBoost 开始对文本输入发出警告。(#11590

优化

  • 使用基于数组的树遍历优化 CPU 推理(#11519

  • 针对 GPU 密集直方图进行专门化。(#11443

  • [sycl] 改进直方图构建的 L1 缓存局部性。(#11555

  • [sycl] 减少预测器内存消耗并改进 L2 局部性(#11603

修复

  • 修复 macOS 上 C++ 库的静态链接问题(#11522

  • 将 param.hh/cc 重命名为 hist_param.hh/cc 以修复 xcode 构建(#11378

  • [sycl] 修复使用更新的编译器进行构建的问题(#11618

  • [sycl] 针对仅支持 fp32 的设备的各种修复。(#11527#11524

  • 修复 Android API 26 之前版本的编译问题(#11366

  • 修复从 1.3 版本加载 Gamma 模型的问题。(#11377

Python 包

  • 支持 skl 接口混合使用 Python 指标和内置指标。(#11536

  • PyPI 对 CUDA 13 的支持,通过新的 xgboost-cu13 包提供。(#11677#11662

  • 移除 manylinux2014 的 wheel 包。(#11673

  • 变体 wheel 包的初步构建支持(#11531#11645#11294

  • 最低 PySpark 版本现已设置为 3.4(#11364)。此外,PySpark 接口现在检查验证指示器列类型,并修复了 None 列输入问题。(#11535#11523

  • [dask] 对 predict 函数进行小范围清理。(#11423

R 包

鉴于此版本中已移除大部分已弃用的功能,我们将尝试将最新的 R 包重新发布到 CRAN。

  • 实现 Booster 重置。(#11357

  • 文档改进,包括在 XGBoost 的 sphinx 文档侧添加代码示例,以及 R-universe 版本的注释。(#11369#11410#11685#11316

JVM 包

文档

一般文档的变更

CI 和维护