训练和部署

我们将使用训练数据集来训练机器学习模型,该数据集是在上一个节中上传到 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')

image-20231230094423144

注意这里要将原来代码中的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 分钟,直至训练作业完成,状态变为“已完成”。

image-20231229231236714

image-20231230094529033

现在成功训练了 XGBoost 模型!

部署模型

在此步骤中,会把经过训练的模型部署到实时HTTPS 端点。此过程可能需要大约 6-8 分钟。

xgb_predictor = xgb.deploy(initial_instance_count=1,
                           instance_type='ml.m5.xlarge')

现在,我们在 AWS 控制台视图中检查 SageMaker 端点部署:

image-20231230094816613

然后等待转换为“InService”状态。