本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
XGBoost 版本 0.72
重要
XGBoost 0.72 已被亚马逊弃用。 SageMaker您仍然可以通过拉取其映像 URI 来使用这个旧版本的 XGBoost(作为内置算法),如以下代码示例所示。对于 XGBoost,以 :1
结尾的映像 URI 针对的是旧版本。
如果您要使用较新的版本,则必须明确指定图像 URI 标签(请参阅支持的版本)。
先前版本的亚马逊 SageMaker XGBoost 算法基于 0.72 版本。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 算法进行回归
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 |
每个级别中每个拆分的列的子样本比率。 可选 有效值:浮点值。范围:[0,1]。 默认值:1 |
colsample_bytree |
构造每个树时列的子样本比率。 可选 有效值:浮点值。范围:[0,1]。 默认值:1 |
csv_weights |
启用此标志时,对于 csv 输入,XGBoost 通过获取训练数据中的第二列(标签后的一列)作为实例权重,以此来区分实例的重要性。 可选 有效值:0 或 1 默认值:0 |
early_stopping_rounds |
模型会一直训练直到验证分数停止改善。要继续训练,验证错误至少需要在每 可选 有效值:整数 默认值: - |
eta |
在更新中用于防止过度适合的步骤大小收缩。在每个提升步骤之后,您可以直接获得新特征的权重。 可选 有效值:浮点值。范围:[0,1]。 默认值:0.3 |
eval_metric |
验证数据的评估指标。根据目标分配默认指标:
有关有效输入的列表,请参阅 XGBoost 参数 可选 有效值:字符串 默认值:根据目标默认。 |
gamma |
在树的叶节点上进行进一步分区所需的最小损失减少。该值越大,算法越保守。 可选 有效值:浮点值。范围:[0,∞)。 默认值:0 |
grow_policy |
控制将新节点添加到树中的方式。目前,仅在 可选 有效值:字符串。 默认值: |
lambda |
权重上的 L2 正则化项。增加此值会使模型更加保守。 可选 有效值:浮点值 默认值:1 |
lambda_bias |
偏移上的 L2 正则化项。 可选 有效值:浮点值。范围:[0.0, 1.0]。 默认值:0 |
max_bin |
离散分箱到存储桶连续特征的最大数量。仅在 可选 有效值:整数 默认值:256 |
max_delta_step |
每个树的权重估计允许的最大增量步骤。当使用正整数时,它有助于使更新更加保守。首选选项是在逻辑回归中使用它。将其设置为 1-10 可帮助控制更新。 可选 有效值:整数。范围:[0,∞)。 默认值:0 |
max_depth |
树的最大深度。增加这个值会使模型更复杂,并可能会过度拟合。0 表示没有限制。当 可选 有效值:整数。范围:[0,∞) 默认值:6 |
max_leaves |
要添加的最大节点数。仅当 可选 有效值:整数 默认值:0 |
min_child_weight |
子项中所需的最小实例权重总和 (hessian)。如果树分区步骤导致叶节点的实例权重总和小于 可选 有效值:浮点值。范围:[0,∞)。 默认值:1 |
normalize_type |
标准化算法的类型。 可选 有效值:tree 或 forest。 默认值:tree |
nthread |
用于运行 xgboost 的并行线程数量。 可选 有效值:整数 默认值:最大线程数。 |
objective |
指定学习任务和相应的学习目标。示例: 可选 有效值:字符串 默认值: |
one_drop |
启用此标记后,在丢弃期间至少会丢弃一个树。 可选 有效值:0 或 1 默认值:0 |
process_type |
要运行的提升过程的类型。 可选 有效值:字符串。 默认值: |
rate_drop |
丢弃比率,指定在丢弃期间要丢弃的一小部分以前的树。 可选 有效值:浮点值。范围:[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 / 可选 有效值:浮点型,范围:[0, 1]。 默认值:0.03 |
skip_drop |
在提升迭代期间跳过丢弃过程的概率。 可选 有效值:浮点值。范围:[0.0, 1.0]。 默认值:0.0 |
subsample |
训练实例的子样本比率。将其设置为 0.5 意味着 XGBoost 随机收集一半数据实例来让树长大。这会防止过度适合 可选 有效值:浮点值。范围:[0,1]。 默认值:1 |
tree_method |
在 XGBoost 中使用的树构造算法。 可选 有效值: 默认值: |
tweedie_variance_power |
控制 Tweedie 分布的方差的参数。 可选 有效值:浮点值。范围:(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 |