XGBoost 版本演进技术指南:从 2.0 多目标树、device 参数统一到学习排序与分布式新架构
2026/9/19 14:08:54 网站建设 项目流程

XGBoost 版本演进技术指南:从 2.0 多目标树、device 参数统一到学习排序与分布式新架构

【免费下载链接】xgboostScalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library, for Python, R, Java, Scala, C and more. Runs on single machine, Hadoop, Spark, Dask, Flink and DataFlow项目地址: https://gitcode.com/gh_mirrors/xg/xgboost

导读

本文基于仓库根目录的 NEWS.md(即 XGBoost Change Log)整理而成,系统梳理 XGBoost 从 v0.1(2014 年)到 2.0.0(2023 年)的完整版本演进脉络。文章以 2.0.0 的重大架构变革(向量叶子多目标树、device参数统一、hist成为默认树方法、学习排序重写)为主体,结合仓库源码 src/tree/hist/hist_param.h、src/objective/lambdarank_obj.cc、src/context.cc 等实现细节进行验证与展开。读者读完可获得:2.0 迁移所需的完整破坏性变更清单、新参数(devicemax_cached_hist_nodelambdarank_*)的用法与底层原理,以及 1.7 系列引入的QuantileDMatrix、PySpark 接口、分类特征支持等关键能力的演进背景。

说明:按照 NEWS.md 的说明,从 2.1.0 开始,发布说明已迁移到doc/changes/目录下的文档中(如 doc/changes/v2.1.0.rst、doc/changes/v3.0.0.rst 等),本文件继续按时间倒序记录 2.0.0 及更早版本的变更。


一、XGBoost 2.0.0:一次面向未来的大版本重构

2.0.0(2023 年 8 月 16 日发布)是继 1.0.0 之后的又一个里程碑式大版本。它的核心主题可以概括为四个词:统一设备选择、默认算法切换、多目标原生支持、学习排序重写

1.1 新的device参数:统一设备选择入口

在 2.0 之前,用户需要分别通过gpu_idgpu_histgpu_predictorcpu_predictorgpu_coord_descent以及 PySpark 特有的use_gpu等一组参数来控制运行设备,参数繁多且容易混淆。

2.0 引入的device参数将这一组参数统一收编:用户只需通过device指定设备类型与设备序号即可。例如:

params = { "device": "cuda", # 指定在 CUDA 设备上运行 "tree_method": "hist", # 在 GPU 上执行 hist 树方法 }
  • device="cuda", tree_method="hist"表示在 GPU 上运行hist树方法;
  • device="cpu"则退回 CPU;
  • 该参数同样支持设备序号,例如device="cuda:0"(可通过 src/context.cc 中的CUDAOrdinal逻辑看到,XGBoost 会校验可见 GPU 数量,并对超出范围的序号做取模回绕并给出警告)。

从源码看实现:src/context.cc 中定义了kDevice = "device"参数常量,训练、预测、数据构造共用的Context对象据此决定设备与线程配置。旧的gpu_hist行为被保留但标记为弃用;predictor参数则被直接移除(Python 包中同样移除,见 python-package/xgboost/core.py 的参数处理逻辑)。

1.2hist成为默认树方法

从 2.0 开始,hist(基于直方图的近似算法)成为默认tree_method。此前版本会根据输入数据与训练环境在approxexact之间自动选择。新默认值让 XGBoost 训练更高效、行为更一致——直方图算法通过特征分箱(binning)将复杂度与数据规模解耦,是大规模训练事实上的标准路径。

1.3 多目标树(Multi-Target Trees)与向量叶子输出

这是 2.0 中处于"开发中"状态但方向性极强的特性:用一棵树同时为多个目标输出向量叶子(vector leaf),覆盖多目标回归、多标签分类与多分类任务。

此前 XGBoost 为每个目标各建一个独立模型;向量叶子方案则让一棵树同时拟合所有目标,带来的收益包括:

  • 帮助防止过拟合(各目标共享树结构,天然引入正则化);
  • 模型体积更小(树的数量可显著减少);
  • 树结构能显式建模目标之间的相关性(correlation between targets)。

使用方式:训练时通过multi_strategy参数启用,并支持使用回调(callback)在一次训练会话中混合向量叶子树与标量叶子树。限制:目前仅有 CPU 上的hist(默认)树方法支持构建向量叶子树;相关实现分散在 src/gbm/gbtree.cc(训练入口)、src/gbm/gbtree_model.cc(模型存储)以及预测器 src/predictor/cpu_predictor.cc、src/predictor/gpu_predictor.cu 中。该特性的更多背景可参考 doc/tutorials/multioutput.rst(1.6 引入的多输出模型教程)。

1.4 直方图缓存上限参数max_cached_hist_node

为了控制 CPU 端直方图缓存的内存占用,2.0 新增max_cached_hist_node参数,用于限制直方图缓存的节点数上限。

底层原理hist算法会缓存已计算节点的直方图以便复用,而缓存规模随树深度呈指数增长(每层节点数翻倍)。深树场景下缓存可能失控,该参数提供了硬性上限;不设缓存虽然可能略微降低性能,但不会影响模型精度,因此大多数用户无需配置。

从源码看默认值:src/tree/hist/hist_param.h 中HistMakerTrainParam定义:

  • NotSet()默认值(std::numeric_limits<std::size_t>::max());
  • CPU 默认缓存节点数CpuDefaultNodes() = 1 << 16(65536);
  • CUDA 默认缓存节点数CudaDefaultNodes() = 1 << 12(4096,因 GPU 显存更受限而取更小值);
  • 参数下限校验为 1(set_lower_bound(1))。

同时,2.0 在分布式系统上通过把histapprox的缓存减半,进一步压缩了内存占用。

1.5 外部内存(External Memory)支持大幅改进

外部内存(out-of-core)能力在 2.0 中仍标记为实验性,但性能显著提升:

  • memory map(内存映射)替换了旧的文件 IO 逻辑;
  • 降低了 CPU 内存占用;
  • 补充了大量文档(见 doc/tutorials/external_memory.rst)。

使用建议:当QuantileDMatrix的内存节省不足以满足需求时,可以尝试使用hist树方法配合外部内存。底层数据迭代与分页读取逻辑可在 src/data/sparse_page_source.cc、src/data/file_iterator.cc 中查看。

1.6 Learning to Rank:全新实现

2.0 对学习排序任务进行了全新实现,新增/升级的能力包括:

特性参数/说明
配对构造策略新参数lambdarank_pair_method
每组采样对数控制新参数lambdarank_num_pair_per_sample
无偏学习排序(实验性)lambdarank_unbiased
NDCG 自定义增益函数ndcg_exp_gain
GPU 确定性计算所有目标函数与评估指标在 GPU 上确定化
默认目标函数NDCG(原默认rank:pairwise不再默认)
指标性能使用缓存加速评估指标
sklearn 工具XGBRanker获得 scikit-learn 工具链兼容
文档专门的 learning-to-rank 教程 doc/tutorials/learning_to_rank.rst

从源码看实现:src/objective/lambdarank_obj.cc 中可看到lambdarank_unbiasedndcg_exp_gain在梯度计算路径中实际生效的分支(如增益计算处if (param_.ndcg_exp_gain)选择指数型增益);配对构造与分组策略的相关代码位于 src/common/ranking_utils.h 与 src/metric/rank_metric.cc。可运行的排序示例参见 demo/guide-python/learning_to_rank.py。

1.7 自动估计截距(Automatically Estimated Intercept)

此前base_score是用户手工设置的训练常量;2.0 起 XGBoost 会根据输入标签自动估计该参数,以获得更优的初始预测与精度。这意味着大多数场景下用户无需再手工调base_score。相关教程见 doc/tutorials/intercept.rst。

1.8 分位数回归(Quantile Regression)

2.0 正式支持分位数回归,其损失函数为分位数损失(也称 pinball loss)。XGBoost 还允许同时训练多个目标分位数——每个分位数对应一棵树,由quantile_alpha参数(可传列表)控制。例如:

params = { "objective": "reg:quantileerror", "quantile_alpha": [0.25, 0.5, 0.75], # 同时学习三个分位数 }

实现位于 src/objective/quantile_obj.cc。同时,L1(reg:absoluteerror)与分位数回归两类目标因为缺乏有效的 Hessian(二阶导)值而使用自适应树,2.0 中它们支持按学习率缩放叶子值,提升收敛行为。

1.9 导出分箱切分点(Export Cut Value)

通过 Python 或 C 包,用户可以导出hist树方法使用的分位数(quantile)切分点——注意这不同于分位数回归。该能力便于用户理解特征分箱边界,相关接口见 python-package/xgboost/core.py 中 Booster 的数据导出方法。

1.10 列分片与联邦学习(Column-based Split & Federated Learning)

2.0 在列分片(按特征维度切分数据)上取得实质进展:

  • approxhist、以及带向量叶子的hist均可配合按列切分的数据工作;
  • 支持纵向联邦学习(vertical federated learning)(特征在参与者间切分);
  • GPU 支持仍在开发中。

这与 1.7 引入的横向联邦学习(基于 gRPC 联邦服务器聚合 allreduce)形成互补,详见下文 1.7 章节。分布式通信基础设施位于 src/collective/ 目录。

1.11 PySpark 接口成熟

2.0 中 PySpark 接口(python-package/xgboost/spark/)获得一批新特性:

  • GPU 预测(device参数驱动);
  • 数据初始化优化(避免栈操作);
  • 支持预测特征贡献(feature contribution / SHAP);
  • Python 类型标注支持;
  • use_gpu弃用,推荐device
  • eval_metric校验支持字符串列表;
  • 训练日志改进与多项维护性修复。

1.12 其他通用新特性与优化

  • CSC 矩阵改用 array interface:XGBoost 统一线程数使用,并使 CSC 输入在按需类型转换下降低内存占用;
  • CUDA compute 90 纳入默认构建
  • CPU 上 array interface(如 numpy)输入性能显著提升
  • 数据初始化相关的 CUDA 优化:使用最新 thrust 策略避免 GPU 设备同步;XGBoost 改为使用每线程 CUDA stream,防止与其他 stream 互相同步。

1.13 2.0 破坏性变更清单(迁移必读)

变更说明
device统一gpu_idgpu_histgpu_predictorcpu_predictorgpu_coord_descentuse_gpu均被device取代;predictor参数被移除
文本输入必须指定格式必须显式给出文本输入格式;官方建议优先使用numpy.ndarray等第三方数据结构而非文本输入
Python 包移除ntree_limit该参数此前已弃用,2.0 中移除
移除单字符串特征信息特征类型与特征名应使用字符串序列
save_model移除多余参数scikit-learn 接口的save_model不再接受额外参数

升级提示:若你的代码仍使用gpu_hist作为tree_method,2.0 下应改为device="cuda", tree_method="hist",二者在 GPU 上执行的是同一套直方图算法。

1.14 2.0 值得注意的 Bug 修复

  • 线程安全的缓存:某些语言运行时用独立线程做垃圾回收,会破坏 XGBoost 的线程本地缓存;2.0 用轻量锁实现了线程安全缓存取而代之;
  • 修复模型 IO 时未清空预测缓存的问题;
  • 数据构造阶段即检查inf值;
  • 保留已保存 updater 配置的顺序(使用updater参数而非tree_method时可见);
  • 修复分类特征切分时的 GPU 显存分配问题;
  • JSON 模型 dump 中特征名的转义序列(如\t\n)处理;
  • 模型 IO 与文本输入的路径规范化(Windows 短路径、Unix 下含~的路径),且所有路径输入要求 UTF-8 编码;
  • 修复 H100 上的整数溢出;
  • 修复 GPU 上带分类特征的加权 sketching;
  • 修复指标序列化(此前可能导致评估时部分指标丢失);
  • 修复 MSVC x86 目标编译错误。

1.15 Python / R / JVM 包要点

Python 包(python-package/xgboost/):

  • 支持 pyarrow 后端 pandas DataFrame 的原始类型;
  • 警告消息改用 Pythonwarnings机制发出;
  • plot_importance支持自定义条形图旁数值的格式化;
  • float16 半精度支持增强(pandas、cupy、cuDF,GPU 输入走 CUDA__half,零拷贝);
  • inplace_predictQuantileDMatrix支持Series与 Python 原生类型;
  • 支持全部 pandas 可空整数类型;
  • sklearn 接口的自定义指标支持sample_weight
  • 采用现代 Python 打包规范(PEP 517/518/621)setup.py被 python-package/pyproject.toml 取代,并支持 Python 3.11;
  • QuantileDMatrix缓存转换后的数据提升效率;
  • DataIter只接受关键字参数;best_iteration仅在启用早停时定义(与文档行为一致)。

R 包(R-package/):

  • 使用新的数据消费接口处理 CSR/CSC,线程数控制更好、性能提升;
  • 训练时接受多个评估指标;
  • 修复整数输入含NA的问题;大量重构(感谢 @jameslamb 等贡献者)。

JVM 包(jvm-packages/):

  • 预测不再使用 Rabit;
  • 设置feature_namesfeature_types(为分类特征支持做准备);
  • 支持 Scala 2.13;
  • 训练阶段从ResultStage调整为ShuffleMapStage
  • 早停自动设置最优分数的最大/最小方向;
  • 破坏性变更:移除 Scala 版 tracker;DeviceQuantileDmatrix更名为QuantileDMatrix
  • 采用依赖机器人(dependabot)持续更新依赖。

二、1.7 系列:PySpark、QuantileDMatrix 与联邦学习的奠基

2.1 v1.7.0:特性密集的一次发布

1.7.0(2022 年 10 月)是 2.0 之前的"蓄力"版本,许多 2.0 特性的地基都源于此。

PySpark 初始支持:1.7 引入 PySpark 集成(实验性),接口改编自 databricks 的 PySpark XGBoost,并额外支持QuantileDMatrix与 rapidsai 插件(GPU 流水线)。用户可以在分布式集群上用 Python 定义自定义目标、回调用与指标。限制:分类特征与多输出模型暂不支持。教程见 doc/tutorials/spark_estimator.rst。

分类特征支持推进:1.7 中分类特征可以处理缺失值,并新增max_cat_threshold参数——该参数在使用分区算法(partition-based split)时启用,限制参与切分评估的类别数量,防止过拟合。sklearn 接口新增feature_types参数,允许为非 DataFrame 数据类型声明分类特征。完整教程见 doc/tutorials/categorical.rst。

实验性联邦学习与新通信模块collective

  • 联邦学习以 gRPC 联邦服务器实现,服务器聚合 allreduce 调用,联邦客户端在本地数据上训练,可使用approxhistgpu_hist等现有树方法;
  • 目前仅支持横向联邦学习(样本在参与者间切分,各方拥有全部特征与标签);
  • 未来计划包括纵向联邦学习以及同态加密、差分隐私等更强的隐私保障;
  • 作为配套,1.7 用新的collective模块替换了旧rabit模块作为网络通信接口,支持运行时选择后端rabitfederated),此前后端在编译期固定不可改。相关代码见 src/collective/ 目录。

QuantileDMatrix:XGBoost 将内部的DeviceQuantileDMatrix(及其分布式版本)扩展支持 CPU 并更名为QuantileDMatrix。它针对hist/gpu_hist优化内存使用,对稠密数据尤其能显著降低 CPU 内存。特性要点:

  • 可由 CPU 或 GPU 数据构造,且无论数据来源,构造出的实例都能被 CPU 与 GPU 算法用于训练与预测(设备不匹配时有一定转换开销);
  • 新增ref参数,可用它构造验证/测试数据集(复用训练数据的分箱结构,无需重新扫描);
  • 在 sklearn 接口中,当用户指定了受支持的树方法时默认使用。

参考实现:python-package/xgboost/data.py 中的QuantileDMatrix类,以及 src/data/quantile_dmatrix.cc。配套演示见 demo/guide-python/quantile_data_iterator.py。

平均绝对误差(MAE)目标reg:absoluteerror加入目标函数家族。其特殊之处在于 MAE 的 Hessian 恒为零——而 XGBoost 依赖牛顿优化,缺少有效 Hessian 时收敛可能很慢。为此 XGBoost 在训练算法中引入了线性搜索(line search)。实现可参考 src/objective/absolute_error_obj.cc。

XGBoost 跑在浏览器里:借助 pyodide 项目,XGBoost 现在可以在浏览器中运行。

Dask 接口实验性支持 IPv6

hist与 GPU Hist 优化

  • CPUhist支持按列构建直方图(可选,依据输入数据条件自动配置),更好地适配不同形状的数据集;直方图内核更好地利用 CPU 寄存器;
  • GPU hist 对宽数据集(wide dataset)性能显著提升,支持批处理节点构建(batched node build),降低内核延迟、提高吞吐,深树 +depthwise策略下提升尤为明显。

1.7 破坏性变更

  • 移除grow_local_histmakerupdater(极少使用且无测试);
  • 移除单精度直方图(浮点误差大且危险);
  • 发布二进制不再支持已弃用的 CUDA 架构;
  • rabit模块被collective模块替换(drop-in replacement,支持运行时后端选择)。

其他亮点DMatrix/QuantileDMatrix新增get_data方法(Python 与 C)取回数据;修复 GPU 上缺失值的"幽灵梯度"(浮点误差导致);参数校验不再是实验特性;支持 IBM i 操作系统;Python 最低版本升至 3.8;XGBoostError的 sklearn 兼容性改进;scikit-learn 接口feature_names_in_属性等。

2.2 v1.7.6 / v1.7.5 / v1.7.4 / v1.7.3 / v1.7.2 / v1.7.1:补丁维护

  • 1.7.6:修复混合稠密/稀疏分区的分布式训练;修复大树的 CPU 单调约束;Spark 模型 UID 与 estimator 一致;QuantileDMatrix预测优化。CRAN 上 R 包保持在 1.7.5。
  • 1.7.5:C++ 标准升至 C++-17,默认 CTK 为 CUDA 11.8;修复 pyspark ranker 导入、Windows wheel 与 Poetry 兼容性、GPU hist 列采样等。
  • 1.7.4:R 包 macOS OpenMP 检测修复;numpy 数组对齐检查;gpu_hist 评估器列采样下的特征交互修复等。
  • 1.7.3get_params不再返回内部配置值(Breaking);修复 L1 误差崩溃、CPU-only 构建加载 GPU pickle 模型、未见类别推理等。
  • 1.7.2:适配更新的 thrust/libcudacxx;CUDA array interface 支持空值;AIX 平台getsockname替换;pyspark 按 qid 排序等。
  • 1.7.1:恢复xgboost.rabit以保持向后兼容。

三、1.6 与 1.5:分类特征、外部内存与序列化格式变革

3.1 v1.6.0(2022 年 4 月)

分类特征支持全面化:Python 与 C 包中,histapproxgpu_hist全部支持分类数据训练。更重要的是引入了基于分区的分类切分(partition-based categorical split)——此前只支持 one-hot 式切分(形如x ∈ {c},特征与单个类别比较),新版本支持更富表达力的x ∈ S(特征与多个候选类别比较)。相关代码见 src/common/categorical.h 与 src/tree/hist/evaluate_splits.h。

多输出模型实验性支持:包括多输出回归与多标签分类;XGBClassifier支持 base margin 而无需用户手动展平输入。初始版本为每个目标各建一个模型(类似 sklearn 的 meta estimator)。教程见 doc/tutorials/multioutput.rst。

外部内存特性完备:基于迭代器接口,histapprox在训练与预测时逐批迭代数据,移除了此前hist把所有 batch 拼成内部表示的逻辑,数据规模可扩展性更高(磁盘 IO 可能带来性能下降)。

重写approx:基于hist重写,消除功能差距并提升性能。用户可见变化包括:支持max_leavesmax_depth、支持grow_policy、单调约束、特征权重;用max_bin取代sketch_eps;支持分类数据;分布式训练性能与鲁棒性提升;depthwise策略下外部内存性能显著改善。

新序列化格式(UBJSON):在 JSON 基础上引入 UBJSON 作为更高效的备选,并计划逐步淘汰旧二进制模型格式。用户可在序列化函数中通过扩展名jsonubj选择格式;save_raw新增格式参数(jsonubjdeprecated);默认内部序列化格式改为 UBJSON(影响 Python pickle 与 R RDS)。模型 IO 相关实现见 include/xgboost/json_io.h,文档见 doc/tutorials/saving_model.rst。

其他:新增huber_slope参数(Pseudo-Huber 目标);aucpr指标重写并支持 GPU;指标计算改双精度;max_leavemax_depth默认行为统一;评估指标与线性模型结果确定性;num_parallel_tree从训练超参改为模型参数(修复随机森林模型 IO);Dask 接口不再视为实验性;Python 最低版本 3.7;Apple Silicon 预编译 wheel;R 包load.raw可返回 booster 等。

3.2 v1.5.0(2021 年 10 月)

分类特征:1.3 引入的原生分类特征(免 one-hot)在此版本得到全面完善——预测、SHAP、特征重要性、模型绘图均原生支持分类切分(形式仍为x ∈ {v});numpy/cupy、cuDF/pandas/modin 等数据结构全部支持。当时的启用条件为:Python 包 +gpu_hist+ JSON 模型格式。

外部内存新接口:全新的迭代器式外部内存实现(沿用DeviceQuantileDMatrix的数据迭代器),同时移除 lz4 压缩。该接口当时仍属实验性,官方建议从旧的"URL 后缀"式接口迁移。

其他min_delta加入早停回调;Python 支持约束按特征名配置;R 包predict新增iteration_range;JVM 包支持 GPU dataframe 与DeviceQuantileDMatrix;CUDA compute capability 86 纳入默认构建;GPU 直方图构建提速(大数据集训练时间 2–3 倍提升)、移除deterministic_histogram参数(GPU 算法总是确定性);n_gpus移除;C API 的 Quantile DMatrix 与外部内存接口对齐。


四、1.0 ~ 1.4:现代化与生态扩展的关键阶段

4.1 v1.4.x(2021 年)

  • R 包 GPU 预编译二进制R CMD INSTALL ./xgboost_r_gpu_linux.tar.gz即可安装带 GPU 支持的 R 包;
  • 预测函数统一重构:C API 与 Python API 预测接口统一,sklearn 接口默认使用 inplace predict,所有树模型预测线程安全,新增strict_shape参数;
  • Dask 接口功能完备:支持学习排序(qid 分组)、SHAP、随机森林、安全 pickle、类型提示;预测显著加速;
  • ROC-AUC 重实现:支持多分类与更广的排序任务,分布式平均语义更清晰;
  • 全局配置:Python/R/C 接口支持全局参数(verbosityuse_rmm);
  • array interface 增强:接受任意数组 strides(列主序支持、零拷贝),支持__cuda_array_interface__v3;
  • 破坏性变更:预测函数的data参数更名为X;不再生成伪特征名;binary:logitraw默认指标改为logloss

4.2 v1.3.0(2020 年 12 月)

  • GPUTreeSHAP:CUDA 加速 TreeSHAP,GPU 上计算 SHAP 特征归因;
  • 新风格 Python 回调 API:可用惯用 Python 设计训练扩展,支持 Dask 原生 API 早停(python-package/xgboost/callback.py);
  • 大型数据DeviceQuantileDMatrix:绕过 >2^31 元素的 CUB/Thrust 整数溢出;
  • 模型切片[start, end)区间切分树集成;早停回调支持save_best
  • 加权列采样:按特征权重采样,权重为 0 的特征永不参与切分(demo/guide-python/feature_weights.py);
  • 分类特征直接切分(实验性):测试节点条件形如feature_value ∈ match_set,须配合 JSON 模型序列化;
  • RMM 插件:共享 GPU 内存池(demo/rmm_plugin/README.md);
  • oneAPI 实验性插件
  • 破坏性变更:分类默认指标改为logloss/mlogloss(与binary:logistic目标在统计上一致);skmaker移除;JSON 模型不再存储叶子子节点数;要求 macOS 10.14+;
  • 性能:DMatrix 构建提速至 3.7x、CPU 预测 3.6x、BuildHist线程本地内存分配 1.7x、JSON 序列化 1.5–2x(intrusive pointer)。

4.3 v1.2.0(2020 年 8 月)

  • XGBoost4J-Spark 支持 GPU 训练;支持 CUDA 11 构建;
  • R 环境模型持久化指引:推荐xgb.save()/xgb.save.raw()而非saveRDS()(旧 RDS 兼容层仅为临时措施);
  • 新目标/指标:reg:pseudohubererror(指标mphe);survival:aftGPU 加速;
  • sklearn 集成:n_features_in_XGBoostError继承ValueError
  • Dask:异步接口、DaskDeviceQuantileDMatrix零拷贝 GPU 阵列摄入、预测返回 GPU Series;
  • 外部数据类型处理逻辑集中重构;
  • JSON 序列化增强:更快更小、Ryū 算法保证 round-trip 可复现与 locale 无关、支持从 S3 等远程源加载;
  • 破坏性变更:DaskXGBClassifier.predict()改为输出类别(概率用predict_proba());自定义评估指标接收原始(未变换)预测;XGBoost4J-Spark 要求 Spark 3.0 / Scala 2.12;Python 要求 3.6+;采用 C++14 标准。

4.4 v1.1.0(2020 年 5 月)

  • 多核 CPU 性能缩放修复(Intel CPU 上效果显著);GPU 回归/分类算法确定化(单 GPU);
  • GPU 外部内存:基于梯度的采样(gradient-based sampling)智能选择子集拷入显存;
  • 参数校验:拼写错误的参数不再被静默忽略(sklearn 与 R 绑定同样生效);
  • 线程安全的inplace_predict():无需构造DMatrix,直接对numpy.ndarray/scipy.sparse.csr_matrix/cupy.ndarray/cudf.DataFrame/pd.DataFrame就地预测,可用共享模型对象服务并发请求;
  • 生存分析目标survival:aft(加速失效时间模型),支持区间标签(doc/tutorials/aft_survival_analysis.rst);
  • macOS 安装简化:brew install libomp+pip install xgboost
  • DeviceQuantileDMatrix:直接从 GPU 内存摄入数据(与 cuDF、cuPy、PyTorch 互通);
  • 破坏性变更:要求 Pip 19.0+;GPU 算法要求 CUDA 10.0+;移除silent(用verbosity);自定义目标默认output_margin=True;移除 Makefile(统一 CMake);移除distcolupdater。

4.5 v1.0.x(2020 年 2–3 月)

1.0.0 是项目现代化里程碑:

  • Apache 风格治理与语义化版本(semantic versioning)——主版本号变更即代表序列化格式不兼容;
  • 多核 CPU 性能缩放重大改进;macOS 安装体验彻底改善;
  • Kubernetes 分布式训练教程;Ruby 绑定原生 Dask 接口(多 GPU/多节点,比上版本快 20%);
  • cuDF/cuPy 一等公民支持:数据全程留在 GPU 显存,接受任何暴露__array_interface__的结构;
  • 特征交互约束扩展到approxgpu_hist;学习排序 GPU 加速(NDCG/MAP/Pairwise);
  • 外部内存 GPU 训练(实验性);
  • JSON 模型序列化(实验性引入):拆分"模型"与"内部配置",save_model只保存模型,保证模型文件可在任意机器加载(修复 GPU 模型在无 GPU 机器上无法加载的问题);
  • 参数校验:未使用/拼写错误参数给出警告;save_config()可检查全部生效训练参数;
  • 单个 worker 故障恢复(实验性);
  • 破坏性变更:要求 Python 3.5+、CUDA 9.0+;移除n_gpus(多 GPU 训练需分布式框架);移除gpu_exactlearning_ratesnum_roots、GPU 前缀目标(如gpu:reg:linear);XGBoosterPredict()新增training参数;统一使用 CMake 构建。

五、0.x 时代:从初版到 GPU 与分布式生态成型

5.1 v0.90(2019 年 5 月)

  • Python 包放弃 Python 2.x;XGBoost4J-Spark 要求 Spark 2.4.x(缺失值处理一致性修复);
  • sklearn 风格随机森林 API:XGBRFClassifier/XGBRFRegressor
  • GPU 预测器支持外部内存输入(见 demo/c-api/basic/ 等 C 示例);CMake 提供xgboost::xgboost目标方便嵌入 C/C++ 应用;
  • 多分类指标merror/mloglossGPU 化;reg:linear弃用,改用reg:squarederror

5.2 v0.82(2019 年 3 月)

  • 分布式hist算法;多节点多 GPU 训练(rabit AllReduce 传递 GPU 信息);
  • colsample_bynode节点级列采样(与colsample_bytree/colsample_bylevel累积生效);
  • verbosity日志级别(0 静默 / 1 警告 / 2 信息 / 3 调试),silentdebug_verbose弃用;
  • 外部内存多项重大修复;XGBoost4J 系列早停语义与 Python 对齐。

5.3 v0.81 / v0.80(2018 年)

  • 特征交互约束(feature interaction constraints);sklearn 接口学习排序(XGBRanker);R 接口 SHAP 交互;
  • GPU 预测器支持多 GPU 并行预测;大规模集群扩展(1.5k executors、120 亿行数据集);
  • 新 GPU 目标函数:hingemulti:softmaxmulti:softprobcount:poissonreg:gammareg:tweedie
  • XGBoost4J-Spark 重大重构(Spark ML Pipeline 风格 API、camelCase 与下划线双风格参数);
  • GPU:NCCL2 多 GPU、共享内存原子操作加速、动态显存分配;LIBSVM 文件支持 qid 列;binary:hinge目标;datatable 输入;total_gain/total_cover重要性指标。

5.4 v0.7x(2017–2018)

  • v0.72:GPU 加速坐标下降;sklearn API 全面参数化(n_jobsrandom_state、booster 选择、sample_weight、训练续跑xgb_model);
  • v0.71pip install可用性大幅提升;gblinear重构支持多坐标下降 updater;hist/gpu_hist近似分位数 sketch 修复;L1/L2 正则按样本数归一化(与 sklearn/glmnet 一致)为破坏性变更;
  • v0.7(2017 年末,距 v0.6 一年半):直方图树算法hist、GPU 树算法gpu_hist/gpu_exact、DART、单调约束、AVX、JSON 模型导出、Tweedie 回归、模型原地更新;sklearn 兼容层;JVM 包支持 Spark/Flink 分布式训练、早停、排序任务。

5.5 v0.6 及更早(2014–2016)

  • v0.6:核心库大规模重构(模块化、C++11、std::mt19937、插件注册机制);tree_method参数正式化;libxgboost.so;JVM 包支持 Flink 与 Spark;DART booster;CMake 构建系统;
  • v0.47:R 包缺失值语义切换(0 → NA);Python 包异常化、重要性/树绘图、逐轮学习率、训练续跑、CV 早停、pip 安装;Java API 可用;
  • v0.4:YARN 分布式版本(十亿级样本)、S3/HDFS 直读、R 特征重要性可视化、泊松回归、早停、R/Python 原生保存加载、sklearn wrapper、实验性外部内存;
  • v0.3:列采样(bst:col_samplebytree)、从初始预测提升、LambdaRank 实验版、并行线性提升器、R 模块;
  • v0.2x / v0.1:Python 模块、样本加权、pairwise rank 初版(2014 年 3 月首次发布)。

六、总结:如何根据版本演进规划你的升级路线

关注点建议版本与配置
新项目默认配置2.0+,使用tree_method="hist",GPU 场景加device="cuda"
老代码迁移重点处理device参数替换(1.7 的gpu_hist写法 →device="cuda", tree_method="hist")、predictor移除、文本输入格式显式化
内存受限场景2.0 的max_cached_hist_node+QuantileDMatrixref参数复用分箱)
排序/搜索业务2.0 的lambdarank_*参数族与 NDCG 默认目标,参考 doc/tutorials/learning_to_rank.rst
多输出/多标签2.0 向量叶子多目标树(实验性,CPUhist),或 1.6 起的多输出模型(doc/tutorials/multioutput.rst)
分布式生态Dask(doc/tutorials/dask.rst)、PySpark(doc/tutorials/spark_estimator.rst)、JVM(jvm-packages/)、联邦学习(collective后端,src/collective/)

最后提醒:发布说明自 2.1.0 起迁移至 doc/changes/ 目录,查看最新版本特性请直接阅读该目录下的对应版本文件(如 doc/changes/v3.4.0.rst),仓库根目录 NEWS.md 继续按时间倒序保留 2.0.0 及更早版本的历史记录。

【免费下载链接】xgboostScalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library, for Python, R, Java, Scala, C and more. Runs on single machine, Hadoop, Spark, Dask, Flink and DataFlow项目地址: https://gitcode.com/gh_mirrors/xg/xgboost

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询