什么是 XGBoost?
- 2025-10-15 05:48:00
作者
Eda Kavlakoglu
Business Development + Partnerships
IBM Research
Erika Russi
Data Scientist
IBM
什么是 XGBoost?
XGBoost (eXtreme Gradient Boosting) 是一个分布式的开源机器学习库,它使用了梯度提升 decision trees,这是一种利用梯度下降的监督学习提升算法。它以其速度、效率和可很好地扩展大型数据集的能力而闻名。
XGBoost 由华盛顿大学的 Tianqi Chen 开发,是通用框架相同的梯度提升的 高级实现;也就是说,它通过将残差相加,将弱学习器树组合成强学习器。该库适用于 C++、Python、R、Java、Scala 和 Julia1。
Decision trees与提升
Decision Trees 用于机器学习中的分类或回归任务。它们使用分层树结构,其中内部节点代表一个特征,分支代表决策规则,每个叶节点代表数据集的结果。
由于 Decision Trees 容易过度拟合,集成方法(例如增强方法)通常可用于创建更为稳健的模型。提升将多个单独的弱树(即性能略好于随机机会的模型)组合在一起,以形成强学习器。每个弱学习器都经过顺序训练,以纠正先前模型所犯的错误。经过数百次迭代后,弱学习器转换为强学习器。
随机森林和提升算法都是流行的集成学习技术,它们使用单个学习器树来提高预测性能。随机森林基于 Bootstrapping(Bootstrap 聚合)的概念,独立训练每棵树以组合它们的预测,而提升算法使用加法方法,其中弱学习器按顺序训练以纠正先前模型的错误。
梯度提升 decision trees
梯度提升 Decision Trees 是一种使用 梯度下降的提升算法。 与其他提升方法一样,梯度提升从弱学习器开始进行预测。梯度提升中的第一个 Decision Trees 称为基本学习器。接下来,根据基本学习器的错误以加法方式创建新树。然后,该算法计算每棵树预测的残差 ,以确定模型的预测与现实的偏差有多大。残差是模型预测值和实际值之间的差值。 然后汇总残差,利用损失函数对模型进行评分。
在机器学习中,损失函数用于衡量模型的性能。梯度提升 decision trees 中的梯度指的是梯度下降。梯度下降用于在训练新模型时最小化损失(即提高模型的性能)。梯度下降是一种流行的优化算法,用于尽量减少机器学习问题中的损失函数。一些损失函数的示例包括 regression 问题的均方误差或平均绝对误差、分类问题的交叉熵损失,或者可以为特定用例和数据集开发自定义损失函数。
XGBoost 的功能
以下是 XGBoost 在 Python 中的一些功能,与 scikit-learn 中的普通梯度提升包相比,这些功能使其脱颖而出 2 :
并行和分布式计算: 该库将数据存储在称为块的内存单元中。单独的块可以分布在机器之间,或者使用核外计算存储在外部存储器中。XGBoost 还支持更高级的用例,例如跨计算机集群进行分布式训练以加快计算速度。XGBoost 还可以使用 Apache Spark、Dask 或 Kubernetes 等工具在分布式模式下实施。缓存感知预取算法: XGBoost 使用缓存感知预取算法,有助于缩短大型数据集的运行时间。该库在单台计算机上的运行速度比其他现有框架快十倍以上。 由于其速度令人印象深刻,XGBoost 可以使用更少的资源处理数十亿个示例,这使其成为一个可扩展的树增强系统。内置正则化: XGBoost 将正则化 作为学习目标的一部分,这与常规梯度提升不同。也可以通过超参数调整对数据进行正则化。使用 XGBoost 的内置正则化还可以让该库提供比常规 scikit-learn 梯度提升包更好的结果。处理 missing values: XGBoost 对稀疏数据使用稀疏感知算法。当数据集中缺少某个值时,数据点会被归类到默认方向,算法会学习最佳方向来处理 missing values。
最新的 AI 新闻 + 洞察分析
在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。
立即订阅
XGBoost 的工作原理
在本节中,我们将介绍如何使用 XGBoost 包、如何选择 XGBoost 树加速器的超参数、XGBoost 与其他加速器实现的对比及其一些用例。
拆分数据并转换为 DMatrix 格式
假设已经对数据执行了探索性数据分析,请继续将数据分配到训练数据集和测试数据集之间。接下来,将数据转换为 XGBoost 期望的 DMatrix 格式3。DMatrix 是 XGBoost 的内部数据结构,针对内存效率和训练速度进行了优化4。
生成和评估模型
接下来,实例化 XGBoost 模型,并根据您的用例,通过“对象”超参数选择您要使用的目标函数。例如,如果您有一个多类分类任务,则应将目标设置为“multi:softmax”5。或者,如果您有一个二元分类问题,您可以使用逻辑回归目标“binary:logistic”。现在,您可以使用训练集来训练模型并预测作为测试集的数据集的分类。通过将预测值与测试集的实际值进行比较来评估模型的性能。您可以使用准确性、精确度、召回率或 f-1 分数等指标来评估您的模型。您可能还希望使用混淆矩阵可视化您的真阳性、真阴性、假阳性和假阴性。
超参数调整
接下来,您可能希望迭代超参数的组合,以帮助提高模型的性能。超参数调整是机器学习算法超参数的优化过程。可以使用网格搜索和交叉验证方法找到最佳超参数,这些方法将遍历可能的超参数组合的字典。
XGBoost 中梯度提升树的选定 超参数
以下是 XGBoost 中可用于调整梯度增强树的一些超参数的解释:
学习率(也称为“步长”或“收缩率”)是最重要的梯度提升超参数。在 XGBoost 库中,它被称为“eta”,应该是 0 到 1 之间的数字,默认值为 0.3 6 。学习率确定提升算法从每次迭代中学习的速率。eta 值越低意味着学习速度越慢,因为它降低了集成中每棵树的贡献,从而有助于防止过拟合。相反,较高的 eta 值会加快学习速度,但如果不仔细调整,可能会导致过拟合。n_estimators 超参数指定集成中要构建的树数量。每一轮提升都会向集成中添加一棵新树,模型会慢慢学习纠正前一棵树所犯的错误。N_estimators 决定模型的复杂性,并影响训练时间和模型推广到未知数据的能力。增加 n_estimators 的值通常会增加模型的复杂性,因为它允许模型在数据中捕获更复杂的模式。但是,添加过多的树会导致过拟合。一般来说,随着 n_estimators 的增加,学习率应该降低。伽马(也称为拉格朗日乘数或最小损失减少参数)控制着对树的叶节点进行进一步分割所需的最小损失减少量。值越低意味着 XGBoost 停止得越早,但可能无法找到最佳解决方案;值越大,XGBoost 持续训练的时间越长,有可能找到更好的解决方案,但过度拟合的风险也越大。伽马值没有上限。XGBoost 中的默认值为 0,超过 10 的值都被视为高值。Max_depth表示提升过程中每棵树在训练过程中的生长深度。树的深度是指它从根节点到叶节点的级别数或拆分数。增加该值会使模型更加复杂,更容易出现过拟合。在 XGBoost 中,默认 max_depth 为 6,这意味着允许模型中的每棵树生长到最大深度 6 级。
Mixture of Experts | 8 月 28 日,第 70 集
解码 AI:每周新闻摘要
加入我们世界级的专家小组——工程师、研究人员、产品负责人等将为您甄别 AI 领域的真知灼见,带来最新的 AI 资讯与深度解析。
观看最新播客节目
将 XGBoost 与其他增强算法进行比较
XGBoost 是众多可用的开源加速算法之一。在本节中,我们将 XGBoost 与其他三个助推框架进行比较。
XGBoost 与 AdaBoost
AdaBoost 是由 Yoav Freund 和 Robert Schapire 于 1995 年发明的早期提升算法 7。在 AdaBoost 中,通过权重系统更加重视错误的预测,这些权重系统会对更难预测的数据点产生更大的影响。 首先,数据集中的每个数据点都被分配了一个特定的权重。当弱学习器正确预测一个例子时,该示例的权重就会减轻。但是,如果学习器举错了例子,该数据点的权重就会增加。创建新树时,它们的权重是基于先前学习器树的错误分类。随着学习器数量的增加,未来学习器将会越来越少地使用那些容易预测的样本,而那些较难预测的数据点将会被赋予更大的权重。梯度提升和 XGBoost 由于其准确性和速度,往往能成为 AdaBoost 更强大的替代方案。
XGBoost 与 CatBoost
CatBoost 是另一个梯度提升框架。由 Yandex 于 2017 年开发,专门处理分类特征,无需任何预处理,通常直接可用,无需执行广泛的超参数调整8。与 XGBoost 一样,CatBoost 内置了对处理缺失数据的支持。CatBoost 对于具有许多分类特征的数据集特别有用。据 Yandex 称,该框架可用于搜索、推荐系统、个人助理、自动驾驶汽车、天气预报和其他任务。
XGBoost 与 LightGBM
LightGBM (Light Gradient Boosting Machine) 是我们将要审查的最终梯度提升算法。LightGBM 由 Microsoft 开发,于 2016 年首次发布 9。大多数 Decision Trees 学习算法在深度上生长树木,而 LightGBM 使用逐叶树生长策略 10。与 XGBoost 一样,LightGBM 表现出较快的模型训练速度和准确性,在大型数据集上表现良好。
XGBoost 的应用
XGBoost 和梯度增强decision trees用于各种数据科学应用,包括:
学习排名:XGBoost 算法最流行的用例之一是作为排名器。在信息检索中,学习排名的目标是为用户提供按相关性排序的内容。在 XGBoost 中,XGBRanker 基于 LambdaMART 算法11。广告点击率预测:研究人员使用经过 XGBoost 训练的模型来确定点击数据在 10 天内在线广告的点击频率。该研究的目标是 衡量在线广告的有效性,并确定哪些广告效果良好 12 。门店销售预测: XGBoost 可用于预测建模,如本文所示,其中使用 XGBoost 模型预测了 45 家沃尔玛商店的销售额 13 。恶意软件分类: 使用 XGBoost 分类器,科希策技术大学的工程师能够准确地对恶意软件进行分类,如他们的论文所示 14。Kaggle 竞赛:XGBoost 一直是 Kaggle 竞赛中流行的获胜算法,如 DMLC(分布式 (深度)机器学习社区)页面上所述,该页面列出了最近在参赛作品中使用 XGBoost 的 Kaggle 竞赛获胜者名单15。