XGBoost 版本 0.72 - Amazon SageMaker

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

XGBoost 版本 0.72

重要

XGBoost 0.72 已被亚马逊弃用。 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 标签(请参阅支持的版本)。

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

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

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

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

xgBoost 的 SageMaker 实现支持用于训练和推理的 CSV 和 libsvm 格式:

  • 对于训练 ContentType,有效的输入是文本/libsvm(默认)或文本/cs v。

  • 对于推理 ContentType,有效的输入是文本/libsvm 或(默认)文本/cs v。

注意

对于 CSV 训练,算法假定目标变量在第一列中,而 CSV 没有标头记录。对于 CSV 推理,算法假定 CSV 输入没有标签列。

对于 libsvm 训练,算法假定标签在第一列中。后续的列包含特征的索引值对(从零开始)。因此,每一行的格式为:<label> <index0>:<value0> <index1>:<value1> ... libsvm 的推理请求可能有也可能没有 libsvm 格式的标签。

这与其他 SageMaker 算法不同,后者使用 protobuf 训练输入格式来保持与标准 XGBoost 数据格式的更大一致性。

对于 CSV 训练输入模式,可用于算法的总内存 (实例计数 * InstanceType 中的可用内存) 必须能够容纳训练数据集。对于 libsvm 训练输入模式,它不是必需的,但我们建议使用它。

SageMaker XGBoost 使用 Python pickle 模块对模型进行序列化/反序列化,该模块可用于保存/加载模型。

在开源 XGBoost 中使用使用 SageMaker 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 版本 0.72 的 EC2 实例推荐

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

XGBoost 版本 0.72 示例笔记本

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

XGBoost 版本 0.72 超参数

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

参数名称 描述
num_class

类的数量。

objective 设置为 multi:softmaxmulti:softprob必需

有效值:整数

num_round

运行训练的轮数。

必填

有效值:整数

alpha

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

可选

有效值:浮点值

默认值:0

base_score

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

可选

有效值:浮点值

默认值:0.5

booster

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

可选

有效值:字符串。gbtreegblineardart

默认值:gbtree

colsample_bylevel

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

可选

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

默认值:1

colsample_bytree

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

可选

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

默认值:1

csv_weights

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

可选

有效值: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

标准化算法的类型。

可选

有效值:treeforest

默认值: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) 分箱数。与直接选择分箱数相比,这附带了具有草图准确率的理论保证。

可选

有效值:浮点型,范围:[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、prune

调整 XGBoost 版本 0.72 模型

自动模型调整也称作超参数调整,是指通过在您的训练数据集和验证数据集上运行多个作业来测试一系列超参数,从而查找模型的最佳版本。您可以选择三种类型的超参数:

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

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

  • 自动调整模型时要使用的一组超参数和一系列值,供每个参数使用

您可以从算法计算的评估指标集合中选择一个评估指标。自动模型优化将搜索所选超参数,以找到值组合,获得能够对评估指标进行优化的模型。

有关模型优化的更多信息,请参阅自动调整模型 SageMaker

由 XGBoost 版本 0.72 算法计算的指标

基于版本 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