Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

XGBoost

XGBoost 是一个梯度提升库,它逐个添加经过正则化的决策树,是表格数据的热门选择。介绍其工作原理并附代码。

XGBoost(极端梯度提升)是一个开源库,用于梯度提升决策树,也是表格数据领域使用最广泛的工具之一。Tianqi Chen 在华盛顿大学将其作为研究项目启动,并于 2014 年发布;2016 年与 Carlos Guestrin 合著的 KDD 论文 XGBoost:一种可扩展的树提升系统介绍了其正则化目标和系统设计。这个由 DMLC 社区维护的库可通过 Python、R、JVM 和 C 处理分类、回归及排序任务,可在 CPU 和 GPU 上运行,并可借助 Dask 和 Spark 扩展。论文报告称,Kaggle 博客在 2015 年公布的 29 个竞赛获胜方案中,有 17 个使用了 XGBoost。

XGBoost 的工作原理#

XGBoost 通过顺序方式构建集成模型:从一个常数预测开始,每轮提升增加一棵树,每棵树都针对之前树留下的损失进行优化。最终预测是各棵树输出的总和,每个输出都会乘以学习率(eta,默认值为 0.3)进行缩减,以避免某一棵树占主导地位。论文中的两个理念定义了每棵树的构建方式:

  • 二阶目标:对于每一行,XGBoost 都会计算损失相对于当前预测的一阶和二阶导数,即梯度 g 和 Hessian h。如果某个叶节点中各行的梯度总和为 G、Hessian 总和为 H,则该叶节点的权重为 -G / (H + λ),这与二阶优化器采用的牛顿步相同。
  • 正则化树:目标函数会为每个叶节点添加惩罚项 γ,并对叶节点权重添加 L2 惩罚项 λ,还可选添加 L1 惩罚项 α。只有当分裂增益 ½ [G_L²/(H_L + λ) + G_R²/(H_R + λ) − (G_L + G_R)²/(H_L + H_R + λ)] − γ 为正时才保留该分裂,这就在树的构建过程中加入了正则化,并限制了过拟合。

树的深度有限制(max_depth,默认值为 6),除非 grow_policy="lossguide" 将生长方式切换为按叶节点生长,否则树会逐层生长。训练通常会在验证集上使用早停:

缺失值、速度和规模#

XGBoost 的稀疏感知分裂查找无需执行插补步骤,即可在存在缺失值的表格上训练。每次分裂时,它都会尝试将缺失值所在的行分别分配到左侧和右侧,并将增益较高的方向设为该节点的默认分支。同一机制还让它能够只扫描稀疏矩阵中实际存储的条目,例如独热编码矩阵。以下示例在 scikit-learn 的乳腺癌数据集中隐藏 30% 的特征值,并直接用缺失数据进行训练:

import numpy as np
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Hide 30% of all values; each split learns a default branch for missing ones
rng = np.random.default_rng(0)
X_train_nan = np.where(rng.random(X_train.shape) < 0.3, np.nan, X_train)
X_test_nan = np.where(rng.random(X_test.shape) < 0.3, np.nan, X_test)

for name, train, test in [("complete", X_train, X_test), ("30% missing", X_train_nan, X_test_nan)]:
    model = xgb.XGBClassifier(n_estimators=200, max_depth=4, learning_rate=0.1)
    model.fit(train, y_train)
    print(f"{name}: accuracy {model.score(test, y_test):.3f}")

在完整数据上,它输出的测试准确率为 0.972;当训练集和测试集中都有 30% 的值缺失时,准确率为 0.951。

默认的 hist 树方法会将每个特征划分到至多 256 个分箱(max_bin),并在分箱边界上搜索分裂点,采用的方式与 LightGBM 相同;而 exact 会枚举每个排序后的值。设置 device="cuda" 可将训练移至 NVIDIA GPU,enable_categorical=True 可原生拆分类别列,而外存模式则能在大于 RAM 的数据集上训练。从 2.1 版开始,模型默认保存为二进制 UBJSON 格式。

  • LightGBM: Microsoft 于 2016 年推出的提升框架,默认按叶节点生长树,并加入基于梯度的行采样和稀疏特征捆绑。如今两个库默认都使用直方图,并共享大多数技术。
  • CatBoost: Yandex 的提升库,可构建对称树,并使用有序目标统计量编码类别特征。
  • 随机森林: 一种装袋方法,在自助采样样本上独立训练深树并对结果求平均,可降低方差,且几乎不需要调参。
  • 深度学习: 处理图像、音频和文本等非结构化输入的标准方法,网络能够从原始数据中学习特征。对于经过特征工程的表格数据,提升树仍是通常需要超越的基准;而 TabPFN 等表格基础模型如今也能在小型数据集上与之竞争。

实际应用#

  • 欺诈检测和信用风险: 支付公司会根据金额、商户、地点、设备和账户历史等特征为每笔交易评分。这是预测建模的核心任务之一,而 XGBoost 的快速推理适合实时决策。
  • 视觉检测:制造业质量系统会融合摄像头和传感器数据。Ultralytics YOLO26的预测结果提供摄像头侧的数据:result.summary()会返回每个检测到的缺陷类别、置信度和边界框坐标;工厂可以按零件汇总这些结果,并与温度和压力读数关联,作为 XGBoost 故障预测模型的特征。
  • 排序和点击预测: XGBRanker 默认使用 rank:ndcg 目标函数进行训练,以排列搜索结果;二分类器则用于预测广告点击率。
  • 竞赛获胜类问题: KDD 论文列出了 2015 年获胜方案所解决的任务,包括商店销售额预测、高能物理事件分类、恶意软件分类,以及大规模在线课程辍学预测。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来