本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
XGBoost 版本 0.72
XgBoost 0.72 已被 Amazon SageMaker 弃用。您仍然可以通过拉取 XgBoost 的图像 URI 来使用这个旧版本的 xgBoost(作为内置算法),如下面的代码示例所示。对于 xgBoost,图像 URI 以:1
适用于旧版本。
如果你想使用较新的版本,你必须明确指定图像 URI 标签(请参阅支持的版本)。
Amazon SageMaker XGBoost 算法的此早期版本基于 0.72 版本。XGBoost
客户应考虑使用 XGBoost 算法 的新版本。他们可以将其用作 SageMaker 内置算法或者用作框架在其本地环境中运行脚本,例如,他们通常使用 Tensorflow 深度学习框架执行操作。新实施占用内存更少,并且具有更好的日志记录、改进的超参数验证以及一组扩展的指标。如果客户需要推迟迁移到新版本,则以前的 XGBoost 实施仍可供客户使用。但是之前的此实施仍然与 XGBoost 的 0.72 版本保持关联。
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 模块来序列化/反序列化模型,这可用于保存/加载模型。
在开源 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 输入模式下可用的内核外功能),但在磁盘上写入缓存文件会减慢算法处理时间。
XGBoost 版本 0.72 示例笔记本
有关如何使用最新版本的 SageMaker XGBoost 作为内置算法来训练和托管回归模型的示例笔记本,请参阅。使用 Amazon SageMaker XGBoost 算法进行回归
XGBoost 版本 0.72 超参数
下表包含 XGBoost 算法的超参数。这些是由用户设置的参数,以便于从数据中评估模型参数。首先,按字母顺序列出必须设置的所需超参数。接下来,也按字母顺序列出可以设置的可选超参数。SageMaker XGBoost 算法是开源 XGBoost 程序包的实现。目前 SageMaker 支持版本 0.72。有关此 XGBoost 版本的超参数配置的详细信息,请参阅 XGBoost 参数
参数名称 | 描述 |
---|---|
num_class |
类的数量。 必需如果 有效值:整数 |
num_round |
运行训练的轮数。 必填 有效值:整数 |
alpha |
权重上的 L1 正则化项。增加此值会使模型更加保守。 可选 有效值:浮点值 默认值:0 |
base_score |
所有实例的初始预测分数,全局偏移。 可选 有效值:浮点值 默认值:0.5 |
booster |
要使用的助推程序。 可选 有效值:字符串。 默认值: |
colsample_bylevel |
每个级别中每个拆分的列的子样本比率。 可选 有效值:浮点。Range (范围):[0,1]。 默认值:1 |
colsample_bytree |
构造每个树时列的子样本比率。 可选 有效值:浮点。Range (范围):[0,1]。 默认值:1 |
csv_weights |
启用此标志时,对于 csv 输入,XGBoost 通过获取训练数据中的第二列(标签后的一列)作为实例权重,以此来区分实例的重要性。 可选 有效值:0 或 1 默认值:0 |
early_stopping_rounds |
模型会一直训练直到验证分数停止改善。至少需要每减少验证错误 可选 有效值:整数 默认值: - |
eta |
在更新中用于防止过度适合的步骤大小收缩。在每个提升步骤之后,您可以直接获得新特征的权重。 可选 有效值:浮点。Range (范围):[0,1]。 默认值:0.3 |
eval_metric |
验证数据的评估指标。根据目标分配默认指标:
有关有效输入的列表,请参阅 XGBoost 参数 可选 有效值:字符串 默认值:默认根据目标进行默认。 |
gamma |
在树的叶节点上进行进一步分区所需的最小损失减少。该值越大,算法越保守。 可选 有效值:浮点。Range (范围):[0, ∞)。 默认值:0 |
grow_policy |
控制将新节点添加到树中的方式。目前,仅在 可选 有效值:字符串。 默认值: |
lambda |
权重上的 L2 正则化项。增加此值会使模型更加保守。 可选 有效值:浮点值 默认值:1 |
lambda_bias |
偏移上的 L2 正则化项。 可选 有效值:浮点。Range (范围):[0.0, 1.0]。 默认值:0 |
max_bin |
离散分箱到存储桶连续特征的最大数量。仅在 可选 有效值:整数 默认值:256 |
max_delta_step |
每个树的权重估计允许的最大增量步骤。当使用正整数时,它有助于使更新更加保守。首选选项是在逻辑回归中使用它。将其设置为 1-10 可帮助控制更新。 可选 有效值:整数。Range (范围):[0, ∞)。 默认值:0 |
max_depth |
树的最大深度。增加此值会使模型更复杂,并可能会过度拟合。当 可选 有效值:整数。Range (范围):[0, ∞) 默认值:6 |
max_leaves |
要添加的最大节点数。仅当 可选 有效值:整数 默认值:0 |
min_child_weight |
子项中所需的最小实例权重总和 (hessian)。如果树分区步骤导致叶节点的实例权重总和小于 可选 有效值:浮点。Range (范围):[0, ∞)。 默认值:1 |
normalize_type |
标准化算法的类型。 可选 有效值:或者树要么森林. 默认值:tree |
nthread |
用于运行 xgboost 的并行线程数量。 可选 有效值:整数 默认值:最大线程数。 |
objective |
指定学习任务和相应的学习目标。示例: 可选 有效值:字符串 默认值: |
one_drop |
启用此标记后,在丢弃期间至少会丢弃一个树。 可选 有效值:0 或 1 默认值:0 |
process_type |
要运行的提升过程的类型。 可选 有效值:字符串。 默认值: |
rate_drop |
丢弃比率,指定在丢弃期间要丢弃的一小部分以前的树。 可选 有效值:浮点。Range (范围):[0.0, 1.0]。 默认值:0.0 |
refresh_leaf |
这是“刷新”更新者插件的参数。当设置为 可选 有效值:0/1 默认值:1 |
sample_type |
采样算法的类型。 可选 有效值: 默认值: |
scale_pos_weight |
控制正负权重的平衡。它对不平衡的类很有用。可考虑的典型值: 可选 有效值:浮点值 默认值:1 |
seed |
随机数种子。 可选 有效值:整数 默认值:0 |
silent |
0 表示打印运行消息,1 表示静默模式。 有效值:0 或 1 可选 默认值:0 |
sketch_eps |
仅用于近似贪婪算法。这会转换为 O(1 / 可选 有效值:Float, 范围:[0, 1]。 默认值:0.03 |
skip_drop |
在提升迭代期间跳过丢弃过程的概率。 可选 有效值:浮点。Range (范围):[0.0, 1.0]。 默认值:0.0 |
subsample |
训练实例的子样本比率。将其设置为 0.5 意味着 XGBoost 随机收集一半数据实例来让树长大。这会防止过度适合 可选 有效值:浮点。Range (范围):[0,1]。 默认值:1 |
tree_method |
在 XGBoost 中使用的树构造算法。 可选 有效值:以下值之一: 默认值: |
tweedie_variance_power |
控制 Tweedie 分布的方差的参数。 可选 有效值:浮点。Range (范围):(1, 2)。 默认值:1.5 |
updater |
一个逗号分隔的字符串,它定义要运行的树更新者序列。这提供了构造和修改树的模块化方法。 有关有效输入的完整列表,请参阅 XGBoost 参数 可选 有效值:逗号分隔的字符串。 默认值: |
调整 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 评估指标影响最大的超参数包括:alpha
、min_child_weight
、subsample
、eta
, 和num_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 |