首页  »  AWS 教程

自动构建机器学习模型

Amazon SageMaker Autopilot
ML
Olawale Olaleye
亚马逊云科技使用经验
初级
完成所需时间
45 分钟
前提条件

注册 / 登录 亚马逊云科技账户

所需费用

请根据 SageMaker 定价预估本实验所需资源费用。

上次更新时间
2023 年 4 月 25 日

概述

在本教程中,您将学习如何使用 Amazon SageMaker Autopilot 自动构建、训练和调参机器学习 (ML) 模型,以及如何部署模型,实现预测。

Amazon SageMaker Autopilot 能根据您的数据帮助您自动构建、训练和调参最佳机器学习模型,消除您构建机器学习模型的重负。使用 SageMaker Autopilot,您只需提供表格式的数据集,指定要预测的目标列。SageMaker Autopilot 会自动探索您的数据,选择与您的问题类型相关的算法,准备用于模型训练的数据,测试多种模型,并选择表现最佳的模型。然后,您可以在候选模型中选择一个模型进行部署,或进一步迭代这些模型以提高预测质量。

学习目标

在本指南中,您将:

  • 使用 SageMaker Autopilot 创建训练实验
  • 探索训练实验的各个阶段
  • 确定和部署训练实验中表现最佳的模型
  • 使用部署好的模型进行预测

前提条件

开始本指南之前,您需要先满足以下条件:

  • 拥有 AWS 账户:如果您还没有 AWS 账户,请先创建和配置账户。更多信息,请参阅 设置 AWS 环境

操作步骤

在本实验工作流中,我们将使用一份综合生成的汽车保险理赔数据集。原始输入数据是两个保险数据表:理赔表和客户表。理赔表中,有一个 fraud 列,这列数据表示理赔是否具有欺诈性。本教程实验仅使用数据集的一小部分。使用大数据集的操作步骤与本教程实验的操作步骤相同。

步骤 1:设置 Amazon SageMaker Studio 域

一个 AWS 账户在每个 AWS 区域中可以拥有一个 SageMaker Studio 域。如果您已经在一个美国东部(弗吉尼亚州北部)区域创建了一个 SageMaker Studio 域,请按照 SageMaker Studio 设置指南将所需的 AWS IAM 策略附加到您的 SageMaker Studio 账户,然后跳过步骤 1,直接进行步骤 2。 

如果没有可用的 SageMaker Studio 域,请继续执行步骤 1,运行 AWS CloudFormation 模板,创建 SageMaker Studio 域,并添加本教程后续步骤所需的权限。

勾选 I acknowledge that AWS CloudFormation might create IAM resources(我了解 AWS CloudFormation 可能创建 IAM 资源),然后点击 Create stack(创建堆栈)。

CloudFormation 面板上,选择 Stacks(堆栈)。堆栈创建成功后,堆栈的状态应从 CREATE_IN_PROGRESS 更改为 CREATE_COMPLETE

在 CloudFormation 控制台搜索栏中输入 SageMaker Studio,然后点击 SageMaker Studio

从 SageMaker 控制台右上角的 Region(区域)下拉菜单中选择 US East (N. Virginia)(美国东部(弗吉尼亚州北部))。从 Launch app(启动应用程序)下拉菜单中选择 Studio,选择使用 studio-user 用户打开 SageMaker Studio。

步骤 2:新建 SageMaker Autopilot 实验

开发和测试大量候选模型对机器学习项目至关重要。Amazon SageMaker Autopilot 可根据您的数据提供不同的候选模型,并自动选择最佳模型。在此步骤中,我们将配置一个 SageMaker Autopilot 实验,用于预测某金融服务营销活动是否成功。此数据集内容是一家大型金融服务机构为推广存款开户而开展的大型营销活动的数据。

新建 SageMaker Autopilot 实验。在 Launcher(启动器)窗口中,向下滚动至 ML tasks and components(ML 任务和组件),然后点击 New Autopilot experiment(新建 Autopilot 实验)选项卡中的 + 图标。

或者,您也可以依次点击顶部菜单中的 File(文件) > New(新建) > Experiment(实验)。

然后,为此实验命名。在 Experiment name(实验名称)输入框中,输入 autopilot-experiment 作为实验名称。然后将暂存在 S3 中的数据接入实验。在 Enter S3 bucket location(输入 S3 存储桶位置)输入框中,粘贴数据在 S3 中的存储路径: s3://sagemaker-sample-files/datasets/tabular/uci_bank_marketing/bank-additional-full.csv。

保持清单文件选项为 Off 状态。在 Target(目标)下拉列表中,选择 y 作为模型要预测的目标特征。

对于 Output data(输出数据),您可以切换为 Auto create output data location(自动创建输出数据位置)标志,并在 Output data (S3 bucket)(输出数据(S3 存储桶))中指定 S3 存储桶。这样,您就可以指定存储输出数据的 S3 存储桶。但在此实验中,我们保持默认设置:由 Sagemaker Studio 创建一个输出数据存储桶。然后点击 Next: Training method(下一步:训练方式)。

对于训练方式,您可以保持默认选项 Auto (自动),或者可以选择 Ensembling or Hyperparameter optimization(HPO)(集成或超参数优化 (HPO))。然后点击 Next: Deployment and advanced settings
(下一步:部署和高级设置)。
对于 Deployment and advanced settings(部署和高级设置),您可以全部保持默认设置。或者,您可以在 Auto deploy endpoint name(自动部署端点名称)中指定端点名称,并从 Select the machine learning problem(选择机器学习问题)的下拉菜单中选择问题类型。然后点击 Next: Review and create(下一步:检查并创建)。

您可以检查实验摘要。如果您想修改的某个选项,您可以点击 previous(上一步)按钮,然后进行修改。点击 Create Experiment(创建实验)按钮,开启 SageMaker Autopilot 实验的首个阶段。SageMaker Autopilot 将开始进行实验的各个阶段。在实验窗口中,您可以跟踪预处理、候选模型定义、特征工程、模型调参、可解释性实验和洞察阶段的进度。

SageMaker Autopilot 作业完成后,会生成一份报告。您可以在其中查看候选模型、候选模型状态、客观值、F1 分数和准确率。SageMaker Autopilot 将自动部署此端点。

步骤 3:分析模型性能

实验结束并选定模型后,下一步就是分析模型性能。您将学习如何使用 SageMaker Autopilot 分析模型性能。

SageMaker Autopilot 实验现已结束,您可以打开排名第一的模型,获取有关模型性能和元数据的更多详细信息。在模型列表中,选中第一个模型,右键点击此模型,展开更多选项。然后点击 Open in model details(查看模型详细信息),检查有关模型性能的统计信息。

在新窗口中,点击 Explainability(可解释性)。您看到的第一个视图是 Feature Importance(特征重要性),其中展示了数据集中每个实例的每个特征的聚合 SHAP 值。特征重要性分数是模型可解释性的重要部分,因为特征重要性分数表示数据集中对预测影响最大的是哪些特征。在该案例中,客户持续期(也称为客户保有期)和就业变化率对应的字段是对模型结果影响最大的两个字段。

现在,点击 Performance(性能)选项卡。屏幕上会显示与模型性能有关的详细信息,包括 recall(召回率)、precision(精确率)和 accuracy(准确率)。您也可以分析模型性能,然后确定是否需要进行其他调参。

系统会提供可视化模式以进一步展示模型性能。首先来看混淆矩阵。混淆矩阵通常用于了解预测类别和真实类别之间如何划分模型标签。在此例中,对角线上的元素表示正确预测的标签数量,而不在对角线上的元素则表示错误分类记录的数量。混淆矩阵有助于分析由于误报和漏报而导致的错误分类。

接着来看精确率 - 召回率曲线。该曲线中,将标签作为概率阈值,展示了模型精确率和召回率在各种概率阈值下进行的平衡。SageMaker Autopilot 会自动优化这两个参数来提供最佳模型。

然后来看接收者操作特征 (ROC) 曲线。该曲线展示了在各种潜在概率阈值中的真阳性率和假阳性率之间的关系。对角线表示基于随机猜测的假设模型。ROC 曲线越靠近图表的左上方,就说明模型的性能越好。

虚线代表没有预测值的模型,通常被称为空值模型。空值模型会随机分配 0/1 标签。该模型在 ROC 曲线下方的面积应为 0.5,代表该模型准确预测的概率为 50%。

点击 Artifacts(构件)选项卡。您可以在此处看到支持 SageMaker Autopilot 实验的资源,包括特征工程代码、输入数据位置和可解释性构件。

最后,点击 Network(网络)选项卡。您将看到有关网络隔离和容器流量加密的信息。

步骤 4:测试 SageMaker 模型端点

您已完成模型详细信息检查,可以开始测试端点了。

点击 + 图标,新建 Python 笔记本。选择 Python3 作为内核。

如需查看发送请求的目标端点,请根据模型端点的名称查找。在左侧窗格上,点击 SageMaker Resources (SageMaker 资源)图标,然后在显示的面板中选择 Endpoints(端点)。然后点击前面步骤创建的实验名称对应的端点。在打开的 Endpoint Details(端点详细信息)窗口中,查看并记录端点名称,然后返回 Python 3 笔记本。

复制以下代码片段并将其粘贴到笔记本的单元格中,然后按下 Shift+Enter,运行当前单元格。此代码将设置环境变量 ENDPOINT_NAME 和运行推理。代码运行完成后,您将看到一个结果,其中包括模型标签和相关的概率分数。

import os
import io
import boto3
import json
import csv

#: Define the endpoint's name.
ENDPOINT_NAME = 'autopilot-experiment-6d00f17b55464fc49c45d74362f284ce'
runtime = boto3.client('runtime.sagemaker')

#: Define a test payload to send to your endpoint.
payload = {
    "data":{
        "features": {
            "values": [45,"blue-collar","married","basic.9y",'unknown',"yes","no","telephone","may","mon",461,1,999,0,"nonexistent",1.1,93.994,-36.4,4.857,5191.0]
        }
    }
}

#: Submit an API request and capture the response object.
response = runtime.invoke_endpoint( 
EndpointName=ENDPOINT_NAME, 
ContentType='application/json', 
Body=json.dumps(payload)
)

#: Print the model endpoint's output.
print(response['Body'].read().decode())

恭喜您!您已学习如何使用 SageMaker Autopilot 自动训练和部署机器学习模型。

步骤 5:清理 AWS 资源

对于不再使用的资源,最好的做法是及时删除,以免产生不必要的费用。

如果您在步骤 1 运行了 CloudFormation 模板来创建新的 SageMaker Studio 域,请继续执行以下步骤来删除域、用户以及根据 CloudFormation 模板创建的资源。

在 AWS 控制台搜索栏中输入 CloudFormation,然后从搜索结果中选择 CloudFormation,打开 CloudFormation 控制台

在 CloudFormation 左侧导航窗格中,选择 Stacks(堆栈)。从状态下拉菜单中,选择 Active(运行中)。在 Stack name(堆栈名称)下,选择 CFN-SM-IM-Lambda-catalog,打开对应的堆栈详细信息页面。

CFN-SM-IM-Lambda-catalog 堆栈详细信息页面上,选择 Delete(删除)即可删除此堆栈及其在步骤 1 中创建的资源。

总结

恭喜您!您已完成自动构建机器学习模型教程的学习。

您已成功使用 SageMaker Autopilot 自动构建、训练和调参模型,并部署了最佳候选模型进行预测。

推荐的后续步骤

了解有关 Amazon SageMaker Autopilot 的更多信息

访问该网页

阅读 SageMaker Autopilot 文档

了解如何使用 Amazon SageMaker Autopilot

查找更多实践教程

查找更多实践教程,学习如何使用机器学习