我们将使用训练数据集来训练机器学习模型,该数据集是在上一个节中上传到 Amazon S3 存储桶中的。
现在我们知道,我们的大多数特征都有偏态分布,有些特征彼此高度相关,有些特征似乎与我们的目标变量具有非线性关系。此外,为了瞄准未来的潜在客户,良好的预测准确性比能够解释为什么该潜在客户成为目标更重要。总而言之,这些方面使梯度提升树 - gradient boosted trees
成为一个很好的候选算法。
理解该算法有几个复杂之处,但在较高的层次上,梯度提升树
通过结合许多简单模型的预测来工作,每个模型都试图解决以前模型的弱点。通过这样做,简单模型的集合实际上可以胜过大型复杂模型。
xgboost
是一个非常流行的、用于梯度提升树的开源包。它计算能力强大、功能齐全,并已成功应用于许多机器学习竞赛中。让我们从一个简单的xgboost
模型开始,使用SageMaker 的托管分布式训练框架进行训练。
首先,我们需要为 SageMaker 的 XGBoost 指定 ECR 容器位置:
container = sagemaker.image_uris.retrieve(region=boto3.Session().region_name, framework='xgboost', version='1.0-1')
注意这里要将原来代码中的version=latest
更改为1.0.1
!否则训练结果会报错。 XGBoost的版本参考: https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html#xgboost-sample-notebooks
指定训练和验证数据集位置:
# cell 16
s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/train'.format(bucket, prefix), content_type='csv')
s3_input_validation = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/validation/'.format(bucket, prefix), content_type='csv')
我们需要为estimator指定训练参数:
sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(container, # xgboost算法容器
role, # 要使用的 IAM 角色
instance_count=1, # 训练实例类型和数量
instance_type='ml.m4.xlarge',
output_path='s3://{}/{}/output'.format(bucket, prefix), # 输出数据的 S3 位置
sagemaker_session=sess)
# 算法超参数
xgb.set_hyperparameters(max_depth=5,
eta=0.2,
gamma=4,
min_child_weight=6,
subsample=0.8,
silent=0,
objective='binary:logistic',
num_round=100)
# 然后调用“fit”方法来训练模型
xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})
还可以从 AWS 控制台检查以验证训练作业是否已启动并等待状态变为“已完成”。
单击左侧窗格并选择“training jobs”。将首先看到处于“InProgress”状态的作业。等待 3-5 分钟,直至训练作业完成,状态变为“已完成”。
现在成功训练了 XGBoost 模型!
在此步骤中,会把经过训练的模型部署到实时HTTPS 端点。此过程可能需要大约 6-8 分钟。
xgb_predictor = xgb.deploy(initial_instance_count=1,
instance_type='ml.m5.xlarge')
现在,我们在 AWS 控制台视图中检查 SageMaker 端点部署:
然后等待转换为“InService”状态。