XGBoost 版本 0.72 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

XGBoost 版本 0.72

重要

0.72 已由 XGBoost 弃用。Amazon SageMaker您仍可以通过拉取映像 URI 来使用 XGBoost(作为内置算法)的此旧版本,如以下代码示例所示。对于 XGBoost,以 :1 结尾的映像 URI 适用于旧版本。

SageMaker Python SDK v1
import boto3 from sagemaker.amazon.amazon_estimator import get_image_uri xgb_image_uri = get_image_uri(boto3.Session().region_name, "xgboost", repo_version="1")
SageMaker Python SDK v2
import boto3 from sagemaker import image_uris xgb_image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "1")

如果要使用较新版本,则必须明确指定映像 URI 标签(请参阅支持的版本)。

Amazon SageMaker XGBoost 算法的此早期版本基于 0.72 版本。XGBoost (eXtreme Gradient Boosting) 是梯度提升树算法的一种流行且高效的开源实施。梯度提升是一种指导式学习算法,它尝试将一组较简单、较弱的模型的估计值结合在一起,从而准确地预测目标变量。XGBoost 在机器学习竞赛中表现出色,因为它能够强健处理各种数据类型、关系和分布,并且由于大量的超参数(可进行优化和调整来改进拟合)。这种灵活性使 XGBoost 成为回归、分类(二进制和多类)和排名问题的一个可靠选择。

客户应考虑使用 XGBoost 算法 的新版本。他们可以将其用作 SageMaker 内置算法或框架,以便在其本地环境中运行脚本,就像通常使用 Tensorflow 深度学习框架一样。新实施占用内存更少,并且具有更好的日志记录、改进的超参数验证以及一组扩展的指标。如果客户需要推迟迁移到新版本,则以前的 XGBoost 实施仍可供客户使用。但是,以前的实施将保持与 0.72 版本的 XGBoost 相关联。

版本 0.72 的输入/输出接口XGBoost

梯度提升对表格数据进行操作,其中行表示观察、一个列表示目标变量或标签,其余列表示特征。

的 SageMaker 实施支持使用 CSV 和 libsvm 格式进行训练和推理:XGBoost

  • 对于训练 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,...)。

版本 0.72 的 EC2 实例建议XGBoost

SageMaker XGBoost 当前仅使用 CPUs 进行训练。 它是一种内存绑定(而不是计算绑定)算法。因此,一般用途的计算实例 (例如 M4) 是比计算优化的实例 (例如 C4) 更适合的选择。此外,我们建议您在选定的实例中有足够的总内存来保存训练数据。尽管它支持使用磁盘空间来处理无法放入主内存的数据 (libsvm 输入模式下可用的内核外功能),但在磁盘上写入缓存文件会减慢算法处理时间。

XGBoost 版本 0.72 示例笔记本

有关演示如何使用最新版本的 SageMaker XGBoost 作为内置算法来训练和托管回归模型的示例笔记本,请参阅使用 Amazon SageMaker XGBoost 算法回归。要使用 0.72 版本的 XGBoost,您需要将示例代码中的版本更改为 0.72。有关如何创建和访问可用于在 SageMaker 中运行示例的 Jupyter 笔记本实例的说明,请参阅使用 Amazon SageMaker 笔记本实例。创建笔记本实例并打开该实例后,选择 SageMaker Examples (AWS 示例) 选项卡以查看所有 SageMaker 示例的列表。使用 XGBoost 算法的主题建模示例笔记本位于 Amazon 算法简介部分中。要打开笔记本,请单击其 Use (使用) 选项卡,然后选择 Create copy (创建副本)

XGBoost 版本 0.72 超参数

下表包含 XGBoost 算法的超参数。这些是由用户设置的参数,以便于从数据中评估模型参数。首先,按字母顺序列出必须设置的所需超参数。接下来,也按字母顺序列出可以设置的可选超参数。SageMaker 算法是开源 XGBoost 程序包的实施。XGBoost当前 SageMaker 支持版本 0.72。有关此版本的 XGBoost 的超参数配置的详细信息,请参阅 XGBoost 参数

参数名称 描述
num_class

类的数量。

如果 设置为 objectivemulti:softmaxmulti:softprob,则必需

有效值:整数

num_round

运行训练的轮数。

必需

有效值:整数

alpha

权重上的 L1 正则化项。增加此值会使模型更加保守。

可选

有效值:浮点值

默认值:0

base_score

所有实例的初始预测分数,全局偏移。

可选

有效值:浮点值

默认值:0.5

booster

要使用的助推程序。gbtreedart 值使用基于树的模型,而 gblinear 使用线性函数。

可选

有效值:字符串。、gbtreegblinear 之一。dart

默认值:gbtree

colsample_bylevel

每个级别中每个拆分的列的子样本比率。

可选

有效值:浮点值。范围:[0,1]。

默认值:1

colsample_bytree

构造每个树时列的子样本比率。

可选

有效值:浮点值。范围:[0,1]。

默认值:1

csv_weights

启用此标记后,XGBoost 将通过获取训练数据中的第二列(标签后的一列)作为实例权重,来区分实例对于 csv 输入的重要性。

可选

有效值:0 或 1

默认值:0

early_stopping_rounds

模型会一直训练直到验证分数停止改善。验证错误需要至少在每个 early_stopping_rounds 减少才能继续训练。SageMaker 托管使用最佳模型进行推理。

可选

有效值:整数

默认值: -

eta

在更新中用于防止过度适合的步骤大小收缩。在每个提升步骤之后,您可以直接获得新特征的权重。eta 参数实际上缩小了特征权重,使提升过程更加保守。

可选

有效值:浮点值。范围:[0,1]。

默认值:0.3

eval_metric

验证数据的评估指标。根据目标分配默认指标:

  • rmse:用于回归

  • error:用于分类

  • map:用于排名

有关有效输入的列表,请参阅 XGBoost 参数

可选

有效值:字符串

默认值:根据目标默认。

gamma

在树的叶节点上进行进一步分区所需的最小损失减少。该值越大,算法越保守。

可选

有效值:浮点值。范围:[0,∞)。

默认值:0

grow_policy

控制将新节点添加到树中的方式。目前,仅在 tree_method 设置为 hist 时受支持。

可选

有效值:字符串。或 depthwiselossguide

默认值:depthwise

lambda

权重上的 L2 正则化项。增加此值会使模型更加保守。

可选

有效值:浮点值

默认值:1

lambda_bias

偏移上的 L2 正则化项。

可选

有效值:浮点值。范围:[0.0, 1.0]。

默认值:0

max_bin

离散分箱到存储桶连续特征的最大数量。仅在 tree_method 设置为 hist 时才会使用。

可选

有效值:整数

默认值:256

max_delta_step

每个树的权重估计允许的最大增量步骤。当使用正整数时,它有助于使更新更加保守。首选选项是在逻辑回归中使用它。将其设置为 1-10 可帮助控制更新。

可选

有效值:整数。范围:[0,∞)。

默认值:0

max_depth

树的最大深度。增加该值会使模型更复杂,并可能过度拟合。0 表示没有限制。当 grow_policy=depth-wise 时,需要限制。

可选

有效值:整数。范围:[0,∞)

默认值:6

max_leaves

要添加的最大节点数。仅当 grow_policy 设为 lossguide 时相关。

可选

有效值:整数

默认值:0

min_child_weight

子项中所需的最小实例权重总和 (hessian)。如果树分区步骤导致叶节点的实例权重总和小于 min_child_weight 的总和,则生成过程会放弃进一步的分区。在线性回归模型中,这只是对应于每个节点中所需的最小实例数。算法越大,就越保守。

可选

有效值:浮点值。范围:[0,∞)。

默认值:1

normalize_type

标准化算法的类型。

可选

有效值:树

默认值:tree

nthread

用于运行 xgboost 的并行线程数量。

可选

有效值:整数

默认值:最大线程数。

objective

指定学习任务和相应的学习目标。示例:reg:logisticreg:softmaxmulti:squarederror。 有关有效输入的完整列表,请参阅 XGBoost 参数

可选

有效值:字符串

默认值:reg:squarederror

one_drop

启用此标记后,在丢弃期间至少会丢弃一个树。

可选

有效值:0 或 1

默认值:0

process_type

要运行的提升过程的类型。

可选

有效值:字符串。或 defaultupdate

默认值:default

rate_drop

丢弃比率,指定在丢弃期间要丢弃的一小部分以前的树。

可选

有效值:浮点值。范围:[0.0, 1.0]。

默认值:0.0

refresh_leaf

这是“刷新”更新者插件的参数。当设置为 true (1) 时,树叶和树节点统计数据会更新。当设置为 false (0) 时,只有树节点统计数据会更新。

可选

有效值:0/1

默认值:1

sample_type

采样算法的类型。

可选

有效值:或 uniformweighted

默认值:uniform

scale_pos_weight

控制正负权重的平衡。它对不平衡的类很有用。要考虑的典型值:sum(negative cases)/sum(positive cases)

可选

有效值:浮点值

默认值:1

seed

随机数种子。

可选

有效值:整数

默认值:0

silent

0 表示打印运行消息,1 表示静默模式。

有效值:0 或 1

可选

默认值:0

sketch_eps

仅用于近似贪婪算法。这会转换为 O(1 / sketch_eps) 分箱数。与直接选择分箱数相比,这附带了具有草图准确率的理论保证。

可选

有效值:Float, Range:[0, 1]。

默认值:0.03

skip_drop

在提升迭代期间跳过丢弃过程的概率。

可选

有效值:浮点值。范围:[0.0, 1.0]。

默认值:0.0

subsample

训练实例的子样本比率。将其设置为 0.5 意味着 XGBoost 随机收集一半数据实例来让树长大。这会防止过度适合

可选

有效值:浮点值。范围:[0,1]。

默认值:1

tree_method

中使用的树构造算法。XGBoost

可选

有效值:下列值之一:autoexactapproxhist

默认值:auto

tweedie_variance_power

控制 Tweedie 分布的方差的参数。

可选

有效值:浮点值。范围:(1, 2)。

默认值:1.5

updater

一个逗号分隔的字符串,它定义要运行的树更新者序列。这提供了构造和修改树的模块化方法。

有关有效输入的完整列表,请参阅 XGBoost 参数

可选

有效值:逗号分隔的字符串。

默认值:grow_colmaker ,修剪

优化 XGBoost 版本 0.72 模型

自动模型优化(也称为超参数优化)通过运行很多在训练和验证数据集上测试一系列超参数的作业来查找模型的最佳版本。您可以选择三种超参数类型:

  • 学习 objective 函数,用于在模型训练期间进行优化

  • ,用于在验证期间评估模型性能eval_metric

  • 一组超参数以及每个超参数在自动优化模型时要使用的值范围

您可以从算法计算的评估指标集中选择评估指标。自动模型优化搜索所选超参数以查找导致优化评估指标的模型的值组合。

有关模型优化的更多信息,请参阅执行自动模型优化

版本 0.72 算法计算的指标XGBoost

基于版本 0.72 的 XGBoost 算法计算以下九个指标以用于模型验证。在优化模型时,请选择这些指标之一来评估模型。有关有效 eval_metric 值的完整列表,请参阅学习任务参数XGBoost。

指标名称 描述 优化方向
validation:auc

曲线下方的区域。

最大化

validation:error

二进制分类错误率,计算方式为错误用例数/所有用例数。

最小化

validation:logloss

负对数似然。

最小化

validation:mae

平均绝对误差。

最小化

validation:map

平均查准率。

最大化

validation:merror

多类别分类错误率,计算方式为错误用例数/所有用例数。

最小化

validation:mlogloss

多类别分类的负对数似然。

最小化

validation:ndcg

标准化折扣累积收益。

最大化

validation:rmse

均方根误差。

最小化

可优化 XGBoost 版本 0.72 超参数

使用以下超参数优化 XGBoost 模型。对优化 XGBoost 评估指标具有最大效果的超参数包括:alphamin_child_weightsubsampleetanum_round

参数名称 参数类型 建议的范围
alpha

ContinuousParameterRanges

MinValue:0、MaxValue:1000

colsample_bylevel

ContinuousParameterRanges

MinValue:0.1、MaxValue:1

colsample_bytree

ContinuousParameterRanges

MinValue:0.5、MaxValue:1

eta

ContinuousParameterRanges

MinValue:0.1、MaxValue:0.5

gamma

ContinuousParameterRanges

MinValue:0、MaxValue:5

lambda

ContinuousParameterRanges

MinValue:0、MaxValue:1000

max_delta_step

IntegerParameterRanges

[0, 10]

max_depth

IntegerParameterRanges

[0, 10]

min_child_weight

ContinuousParameterRanges

MinValue:0、MaxValue:120

num_round

IntegerParameterRanges

[1, 4000]

subsample

ContinuousParameterRanges

MinValue:0.5、MaxValue:1