使用 Amazon SageMaker Autopilot

自动创建机器学习模型

Amazon SageMaker 是一项完全托管的服务,可以帮助开发人员和数据科学家快速构建、训练和部署机器学习 (ML) 模型。

在本教程中,您无需编写一行代码就可以自动创建机器学习模型! 您可以使用 Amazon SageMaker Autopilot(一种 AutoML 功能)自动创建最佳分类和回归机器学习模型,同时享有完全控制性和可见性。

在本教程中,您将学习如何完成以下各项:

  1. 创建 AWS 账户
  2. 设置 Amazon SageMaker Studio 以访问 Amazon SageMaker Autopilot
  3. 使用 Amazon SageMaker Studio 下载公共数据集
  4. 使用 Amazon SageMaker Autopilot 创建训练实验
  5. 了解训练实验的不同阶段
  6. 基于训练实验识别和部署性能最佳的模型
  7. 利用您已部署的模型进行预测

在本教程中,您将扮演在银行工作的开发人员的角色。您接到任务,负责开发一种机器学习模型,用来预测客户是否会注册存单 (CD)。您将使用市场营销数据集对该模型进行训练,该数据集包含有关客户人口统计数据、市场营销活动响应情况和外部因素的信息。

为方便起见,数据已贴标,数据集中有一列用于标识客户是否已注册银行提供的产品。此数据集的某个版本可从机器学习存储库 公开访问(由加州大学欧文分校管理)。
关于本教程
时间 10 分钟                                           
费用 低于 10 USD
使用案例 Machine Learning
产品 Amazon SageMaker
受众 开发人员
级别 新手
上次更新日期 2020 年 5 月 12 日

步骤 1.创建 AWS 账户

本操作的成本低于 10 USD。有关更多信息,请参阅 Amazon SageMaker Studio 定价

已拥有账户? 登录

第 2 步:设置 Amazon SageMaker Studio

完成以下步骤,载入 Amazon SageMaker Studio,以访问 Amazon SageMaker Autopilot。

注:有关更多信息,请参阅 Amazon SageMaker 文档中的开始使用 Amazon SageMaker Studio


a.登录到 Amazon SageMaker 控制台。 

注:在右上角,确保选择已推出 Amazon SageMaker Studio 的 AWS 区域。有关区域清单,请参阅载入 Amazon SageMaker Studio


b.在 Amazon SageMaker 导航窗格,选择 Amazon SageMaker Studio
 
注:如果您是第一次使用 Amazon SageMaker Studio,请一定要完成 Studio 载入流程。 载入时,您可以选择使用 AWS Single Sign-On (AWS SSO) 或 WS Identity and Access Management (IAM) 进行身份验证。当您使用 IAM 身份验证时,您可以选择快速启动或标准设置流程。如果您不确定选择哪种方式,请参阅 载入 Amazon SageMaker Studio,并咨询您的 IT 管理员寻求帮助。为简单起见,本教程采用了 快速启动流程。

c.在 开始使用对话框中,选择 快速启动并指定用户名。

d.有关 执行角色,请选择 创建一个 IAM 角色。在出现的对话框中,选择 任何 S3 存储桶,然后选择 创建角色

Amazon SageMaker 将创建一个具有所需权限的角色,并将其分配给您的实例。 


e.单击 提交

第 3 步:下载数据集

完成以下步骤,下载并浏览数据集。

注:有关更多信息,请参阅 Amazon SageMaker 文档中的 Amazon SageMaker Studio 介绍


a.在 Amazon SageMaker Studio 控制面板中,选择 打开 Studio

b.在 文件菜单的 JupyterLab 中,选择 新建,然后选择 笔记本。在 选择内核对话框中,选择 Python 3(数据科学)
 

c.要下载并提取代码,请将以下代码复制并粘贴到代码单元格中,然后选择 运行
 
注:运行代码时,方括号之间会出现 *。几秒钟后,代码执行完成,* 会由一个数字替换。
%%sh
apt-get install -y unzip
wget https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip
unzip -o bank-additional.zip

d.将以下代码复制并粘贴到新的代码单元格中,然后选择运行

CSV 数据集加载并显示前十行。

import pandas as pd
data = pd.read_csv('./bank-additional/bank-additional-full.csv')
data[:10]

将其中一个数据集列命名为 y,代表每个样本的标签:即该客户是否接受此服务?

在这一步中,数据科学家将开始浏览数据、创建新特性等等。使用 Amazon SageMaker Autopilot,您无需采取任何额外步骤。您只需将表格数据(例如,从电子表格或数据库中)上传到带有逗号分隔值的文件中,选择要预测的目标列,Autopilot 就会为您构建一个预测模型。


d.将以下代码复制并粘贴到新的代码单元格中,然后选择运行

这一步会将 CSV 数据集上传到 Amazon S3 存储桶。您无需创建 Amazon S3 存储桶;当您上传数据时,Amazon SageMaker 会自动在您的账户中创建一个默认存储桶。

import sagemaker

prefix = 'sagemaker/tutorial-autopilot/input'
sess   = sagemaker.Session()

uri = sess.upload_data(path="./bank-additional/bank-additional-full.csv", key_prefix=prefix)
print(uri)

完成了! 代码输出显示 S3 存储桶 URI,如下例所示:

s3://sagemaker-us-east-2-ACCOUNT_NUMBER/sagemaker/tutorial-autopilot/input/bank-additional-full.csv

跟踪印在您自己笔记本中的 S3 URI。下一步中,您需要用到它。

第 4 步:创建 SageMaker Autopilot 实验

现在,您已经在 Amazon S3 中下载并暂存了数据集,您可以开始创建 Amazon SageMaker Autopilot 实验。实验是与同一机器学习项目相关的处理和训练作业的集合。

完成以下步骤以创建新的实验。

注:有关更多信息,请参阅 Amazon SageMaker 文档中的在 SageMaker Studio 中创建 Amazon SageMaker Autopilot 实验


a.在 Amazon SageMaker Studio 左侧的导航窗格中,选择实验(烧瓶样的图标),然后选择创建实验


b.按如下方式填写作业设置字段:

  • 实验名称: tutorial-autopilot
  • 输入数据的 S3 位置:您上面打印的 S3 URI
    (例如 s3://sagemaker-us-east-2-123456789012/sagemaker/tutorial-autopilot/input/bank-additional-full.csv)
  • 目标属性名称y
  • 输出数据的 S3 位置s3://sagemaker-us-east-2-[ACCOUNT-NUMBER]/sagemaker/tutorial-autopilot/output
    (确保用您自己的账号替换 [ACCOUNT-NUMBER])

c.其余设置请保留默认设置,然后选择创建实验

成功! 这样就创建了 Amazon SageMaker Autopilot 实验! 该过程将生成一个模型和统计数据,您可以在实验运行过程中实时查看这些统计数据。实验完成后,您可以查看它的试运行,按客观指标排序,然后右键单击部署模型以在其他环境中使用。

第 5 步:浏览 SageMaker Autopilot 实验阶段

实验运行过程中,您可以了解和浏览 SageMaker Autopilot 实验的不同阶段。 

本节将提供有关 SageMaker Autopilot 实验阶段的更多详细信息:

  1. 分析数据
  2. 特征工程
  3. 模型调优

注:有关更多信息,请参阅 SageMaker Autopilot 笔记本输出


分析数据

分析数据阶段确定要解决的问题类型(线性回归、二分类、多类别分类)。然后,它会提供十个候选管道。管道使用与问题类型相符的 ML 算法将数据预处理步骤(处理缺失值、设计新特征等)和模型训练步骤结合起来。完成此步骤后,作业将转移到特征工程。 


特征工程

特征工程阶段,实验为每个候选管道创建训练和验证数据集,将所有构件存储在 S3 存储桶中。在特征工程阶段,您可以打开并查看两个自动生成的笔记本:

  • 数据浏览笔记本包含有关数据集的信息和统计数据。
  • 候选生成笔记本包含十个管道的定义。事实上,这是一个可运行的笔记本:您可以准确地再现 AutoPilot 作业所完成的工作,了解不同模型的构建方式,甚至可以根据需要不断对其进行微调。

通过这两个笔记本,您可以详细了解数据的预处理方式,以及模型的构建和优化方式。透明度是 Amazon SageMaker Autopilot 的一个重要特征。


模型调优

模型调优阶段,对于每个候选管道及其预处理数据集,SageMaker Autopilot 都会启动一个超参数优化作业;相关的训练作业会浏览各种超参数值,并快速汇集到高性能模型中。

本阶段结束后,SageMaker Autopilot 作业也就完成了。您能够查看和浏览 SageMaker Studio 中的所有作业。

第 6 步:部署最佳模型

现在您已完成实验,可以选择最佳的调优模型,并将该模型部署到由 Amazon SageMaker 管理的终端节点。

按照以下步骤选择最佳的调优作业并部署模型。

注:有关更多信息,请参阅选择和部署最佳模型


a.在实验的试运行列表中,选择目标旁边的胡萝卜标志,按降序对调优作业进行排序。用星号标出最佳调优作业。


b.选择最佳调优作业(用星号表示),然后选择部署模型。 


c.在部署模型对话框中,为您的终端节点命名(如 tutorial-autopilot-best-model),并将所有设置保留为默认设置。选择部署模型

您的模型将部署到由 Amazon SageMaker 管理的 HTTPS 终端节点。


d.在左侧工具栏中,选择终端节点图标。您可以看到您的模型正在创建,这将需要几分钟的时间。当终端节点的状态变为可用时,您就可以发送数据和接收预测了!

第 7 步:用您的模型进行预测

现在已经部署了模型,您可以预测数据集的前 2000 个样本。为此,您将使用 boto3 SDK 中的 invoke_endpoint API。在此过程中,您将计算重要的机器学习指标:准确率精确率召回率F1 分数

按照以下步骤使用您的模型进行预测。

注:有关更多信息,请参阅借助 Amazon SageMaker 实验管理机器学习


在您的 Jupyter 笔记本中,复制并粘贴以下代码,然后选择运行

import boto3, sys

ep_name = 'tutorial-autopilot-best-model'
sm_rt = boto3.Session().client('runtime.sagemaker')

tn=tp=fn=fp=count=0

with open('bank-additional/bank-additional-full.csv') as f:
    lines = f.readlines()
    for l in lines[1:2000]:   # Skip header
        l = l.split(',')      # Split CSV line into features
        label = l[-1]         # Store 'yes'/'no' label
        l = l[:-1]            # Remove label
        l = ','.join(l)       # Rebuild CSV line without label
                
        response = sm_rt.invoke_endpoint(EndpointName=ep_name, 
                                         ContentType='text/csv',       
                                         Accept='text/csv', Body=l)

        response = response['Body'].read().decode("utf-8")
        #print ("label %s response %s" %(label,response))

        if 'yes' in label:
            # Sample is positive
            if 'yes' in response:
                # True positive
                tp=tp+1
            else:
                # False negative
                fn=fn+1
        else:
            # Sample is negative
            if 'no' in response:
                # True negative
                tn=tn+1
            else:
                # False positive
                fp=fp+1
        count = count+1
        if (count % 100 == 0):   
            sys.stdout.write(str(count)+' ')
            
print ("Done")

accuracy  = (tp+tn)/(tp+tn+fp+fn)
precision = tp/(tp+fp)
recall    = tn/(tn+fn)
f1        = (2*precision*recall)/(precision+recall)

print ("%.4f %.4f %.4f %.4f" % (accuracy, precision, recall, f1))

您应该能看到以下输出:

100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 Done
0.9830 0.6538 0.9873 0.7867

该输出相当于一个进度指示器,显示已预测的样本数量!

第 8 步:清除

在这一步中,您将终止在本实验中使用的资源。

重要说明:终止当前未在使用的资源可降低成本,是最佳做法。不终止资源可能会在您的账户下产生费用。


删除您的终端节点:在您的 Jupyter 笔记本中,复制并粘贴以下代码,然后选择运行

sess.delete_endpoint(endpoint_name=ep_name)

如果您想要清除所有训练构件(模型、预处理数据集等等),请将以下代码复制并粘贴到您的代码单元格中,然后选择运行

注:确保用您自己的账号替换 ACCOUNT-NUMBER。

%%sh
aws s3 rm --recursive s3://sagemaker-us-east-2-ACCOUNT_NUMBER/sagemaker/tutorial-autopilot/

恭喜

您已使用 Amazon SageMaker Autopilot 自动创建具有最佳准确率的机器学习模型。

本教程对您是否有帮助?

了解 Amazon SageMaker Studio

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

如果您想了解更多,请阅读博客文章或观看 Autopilot 系列视频