本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
XGBoost 算法
XGBoost
您可以使用新版本的 XGBoost 算法作为Amazon SageMaker内置算法或作为框架以在本地环境中运行训练脚本。与原始版本相比,此实施占用内存更少,并且具有更好的日志记录、改进的超参数验证以及一组扩展的指标。它提供了一个
XGBoost estimator
,用于在托管的 XGBoost 环境中执行训练脚本。当前版本的 SageMaker XGBoost 基于原始 XGBoost 版本 0.90、1.0 和 1.2。
支持的版本
-
框架(开源)模式:0.990-1、0.990-2、0-1、2-1
-
算法模式:0.990-1、90-2、0-1、2-1
在 上不支持 XGBoost SageMaker 1.1,因为 XGBoost 1.1 在测试输入具有的功能少于 LIBSVM 输入中的训练数据时,无法运行预测。已在 XGBoost 1.2 中恢复此功能。考虑使用 SageMaker XGBoost 2-1。
如何使用 SageMaker XGBoost
借助 SageMaker,您可以使用 XGBoost 作为内置算法或框架。通过将 XGBoost 用作框架,您可以自定义自己的训练脚本,从而具有更大的灵活性并可以访问更高级的方案(例如 k 折交叉验证)。
-
使用 XGBoost 作为框架
使用 XGBoost 作为框架来运行可以将附加数据处理合并到训练作业中的自定义训练脚本。在下面的代码示例中,您可以找到 SageMaker Python 开发工具包如何以它提供其他框架 API(如 TensorFlow、MXNet 和 PyTorch)的方式提供 XGBoost API 作为框架。
有关使用 SageMaker XGBoost 作为框架的端到端示例,请参阅使用 XGBoostAmazon SageMaker
回归 -
使用 XGBoost 作为内置算法
使用 XGBoost 内置算法构建 XGBoost 训练容器,如以下代码示例所示。您可以使用 SageMaker
image_uris.retrieve
API(或get_image_uri
API,如果使用Amazon SageMaker Python SDK版本 1)自动发现 XGBoost 内置算法映像 URI。如果要确保 image_uris.retrieve
API 找到正确的 URI,请参阅内置算法的常用参数,并从内置算法映像 URI 和可用区域的完整列表中查找xgboost
。指定 XGBoost 映像 URI 后,您可以使用 XGBoost 容器通过 Estimator API 构造SageMaker评估程序并启动训练作业。此 XGBoost 内置算法模式不包含您自己的 XGBoost 训练脚本,而是直接在输入数据集上运行。
有关如何将 XGBoost 设置为内置算法的更多信息,请参阅以下笔记本示例。
XGBoost 算法的输入/输出接口
梯度提升对表格数据进行操作,其中行表示观察、一个列表示目标变量或标签,其余列表示特征。
SageMaker 的 XGBoost 实施支持使用 CSV 和 libsvm 格式进行训练和推理:
-
对于训练 ContentType,有效输入是 text/libsvm(默认值)或 text/csv。
-
对于推理 ContentType,有效的输入是 text/libsvm(默认值)或 text/csv。
对于 CSV 训练,算法假定目标变量在第一列中,而 CSV 没有标头记录。
对于 CSV 推理,算法假定 CSV 输入没有标签列。
对于 libsvm 训练,算法假定标签在第一列中。后续的列包含特征的索引值对(从零开始)。因此,每一行的格式为:<label> <index0>:<value0> <index1>:<value1> ... 对于 libsvm 的推理请求可能没有 libsvm 格式的标签。
这与其他 SageMaker 算法不同,其他算法使用 protobuf 训练输入格式来保持与标准 XGBoost 数据格式更高的一致性。
对于 CSV 训练输入模式,可用于算法的总内存 (实例计数 * InstanceType
中的可用内存) 必须能够容纳训练数据集。对于 libsvm 训练输入模式,它不是必需的,但我们建议使用它。
SageMaker XGBoost 使用 Python pickle 模块序列化/反序列化模型,可用于保存/加载模型。
在开源 SageMaker XGBoost 中使用通过 XGBoost 训练的模型
-
使用以下 Python 代码:
import pickle as pkl import tarfile import xgboost t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(
model_file_path
, 'rb')) # prediction with test data pred = model.predict(dtest
)
使用实例权重支持区分标记数据点的重要性
-
SageMaker XGBoost 允许客户通过向各个实例分配权重值来区分标记数据点的重要性。对于 text/libsvm 输入,客户可以通过在标签之后附加权重值,将权重值分配给数据实例。例如,
label:weight idx_0:val_0 idx_1:val_1...
。对于 text/csv 输入,客户需要在参数中打开csv_weights
标志,并将权重值附加到标签之后的列中。例如:label,weight,val_0,val_1,...
)。
XGBoost 算法的 EC2 实例推荐
SageMaker XGBoost 0-1 或更早版本当前仅使用 CPUs进行训练。它是一种内存限制型(而不是计算限制型)算法。因此,通用计算实例(例如 M5)是比计算优化的实例(例如 C4)更适合的选择。此外,我们建议您在选定的实例中有足够的总内存来保存训练数据。尽管它支持使用磁盘空间来处理无法放入主内存的数据 (libsvm 输入模式下可用的内核外功能),但在磁盘上写入缓存文件会减慢算法处理时间。
SageMaker XGBoost 版本 1.2 或更高版本支持单实例 GPU 训练。尽管每实例成本较高,但 GPU 训练的速度更快,因此更经济高效。要利用 GPU
训练,请将实例类型指定为 GPU 实例之一(例如 P3并在现有 XGBoost 脚本tree_method
中将 gpu_hist
超参数设置为 。 SageMaker 当前不支持多 GPU 训练。
XGBoost 示例笔记本
下表概述了各种用于处理 Amazon SageMaker XGBoost 算法的不同使用案例的示例笔记本。
笔记本标题 | 描述 |
---|---|
此笔记本说明如何使用Amazon SageMaker批量转换构建自定义 XGBoost 容器。 |
|
此笔记本说明了如何使用 Spark 特征转换器构建 Machine Learning (ML) 管道,以及如何使用Amazon SageMaker批量转换执行实时推理。 |
|
此笔记本说明如何使用 Parquet 中的 Abalone 数据集训练 XGBoost 模型。 |
|
此笔记本演示如何使用 MNIST 数据集来训练和托管多类别分类模型。 |
|
此笔记本说明如何训练模型以预测移动客户离开,以便确定不满意的客户。 |
|
此笔记本向您演示如何使用 Spot 实例通过 XGBoost 容器进行训练。 |
|
此笔记本说明如何使用Amazon SageMaker调试程序监控训练作业以检测不一致性。 |
|
此笔记本说明如何使用 MNIST 数据集和Amazon SageMaker调试程序在训练作业运行时对 XGBoost 训练作业执行实时分析。 |
有关如何创建和访问可用于在 SageMaker 中运行示例的 Jupyter 笔记本实例的说明,请参阅使用 Amazon SageMaker 笔记本实例。创建笔记本实例并将其打开后,选择 SageMaker Examples (示例) 选项卡以查看所有SageMaker示例的列表。使用线性学习算法的主题建模示例笔记本位于 Amazon 算法简介部分中。要打开笔记本,请选择其 Use (使用) 选项卡,然后选择 Create copy (创建副本)。