跳至主要内容

使用 Amazon SageMaker 构建、训练和部署机器学习模型

开始

在本教程中,您将学习如何使用 Amazon SageMaker 构建、训练和部署机器学习 (ML) 模型。我们将使用深受欢迎的 XGBoost ML 算法进行练习。Amazon SageMaker 是一项完全托管的模块化机器学习服务,可帮助开发人员和数据科学家大规模地构建、训练和部署机器学习模型。

将机器学习模型从单纯的概念引入生产通常既复杂又耗时。您必须管理大量数据以训练模型,为之选择最佳的训练算法,在训练时管理计算容量,然后将模型部署到生产环境中。使用 Amazon SageMaker,您可以更轻松地构建和部署机器学习模型,从而降低了这种复杂性。从各种可用选项中选择正确的算法和框架后,它将管理所有底层基础设施,以 PB 规模训练您的模型,并将其部署到生产环境中。

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

为方便起见,数据已贴标,数据集中有一列用于标识客户是否已注册银行提供的产品。此数据集的某个版本可从机器学习存储库公开访问(由加州大学欧文分校管理)。本教程将实施有监督的机器学习模型,因为数据已被标记。(若未标记数据集,则实施无监督学习。)

在本教程中,您将:

  1. 创建笔记本实例

  2. 准备数据

  3. 训练模型以从数据中学习

  4. 部署模型

  5. 评估您的机器学习模型的性能

 

本教程中创建和使用的资源符合亚马逊云科技免费套餐条件。请记得完成第 7 步并终止您的资源。如果您的账户已使用这些资源超过两个月,您的账户需支付的费用将低于 0.50 USD。

general

选择您的 AI 需求:

步骤

全部打开

    导航到 Amazon SageMaker 控制台。

    单击此处之后,亚马逊云科技管理控制台将在新窗口中打开,因此您可以使本分步指南保持打开状态。开始在搜索栏中键入 SageMaker,并选择 Amazon SageMaker 以打开服务控制台。

第 2 步:创建 Amazon SageMaker 笔记本实例

全部打开

    在此步骤中,您将创建一个 Amazon SageMaker 笔记本实例。 

    本教程使用 MySageMakerInstance 作为实例名称,如有需要,您可以选择其他名称。

    在本教程中,您可以保留默认的笔记本实例类型:ml.t2.medium。

    要使笔记本实例能够访问并安全地将数据上传到 Amazon S3,必须指定 IAM 角色。在 IAM 角色字段中,选择创建新角色,让 Amazon SageMaker 创建具有所需权限的角色,并将其分配给您的实例。或者,您也可以在您的账户中选择现有 IAM 角色来达到此目的。

    这让您的 Amazon SageMaker 实例可以访问您账户中的所有 S3 存储桶。在本教程的稍后部分,您将创建一个新的 S3 存储桶。但是,如果您有一个想要使用的存储桶,请选择特定 S3 存储桶并指定相应存储桶的名称。

    选择创建角色。

    在本教程中,我们将为其他字段使用默认值。选择创建笔记本实例。

    您的笔记本实例应在两分钟内从待处理转变为服务中状态。

第 3 步:准备数据

全部打开

    在此步骤中,您将使用 Amazon SageMaker 笔记本预处理训练机器学习模型所需的数据。

    当状态转变为服务中后,选择MySageMakerInstance 并使用操作下拉菜单将其打开,或选择服务中状态旁边的打开 Jupyter。

    将以下代码复制到实例中的代码单元格中,然后选择运行。

    运行代码时,方括号之间会出现 ,如右图第一个屏幕截图所示。几秒钟后,代码执行完成, 将替换为数字 1,而且您将看到一条成功消息,如右图第二个屏幕截图所示。 

    # import libraries

    import boto3, re, sys, math, json, os, sagemaker, urllib.request

    from sagemaker import get_execution_role

    import numpy as np

    import pandas as pd

    import matplotlib.pyplot as plt

    from IPython.display import Image

    from IPython.display import display

    from time import gmtime, strftime

    from sagemaker.predictor import csv_serializer

    # Define IAM role

    role = get_execution_role()

    prefix = 'sagemaker/DEMO-xgboost-dm'

    containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',

    'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',

    'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',

    'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest'} # each region has its XGBoost container

    my_region = boto3.session.Session().region_name # set the region of the instance

    print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + containers[my_region] + " container for your SageMaker endpoint.")

    将以下代码复制到笔记本中的下一个代码单元格中,并更改 S3 存储桶的名称,使之具有唯一性。S3 存储桶名称必须是全局唯一的,并且具有其他一些限制。

    选择运行。如果未收到成功消息,请更改存储桶名称并重试。

    bucket_name = 'your-s3-bucket-name' # <--- CHANGE THIS VARIABLE TO A UNIQUE NAME FOR YOUR BUCKET

    s3 = boto3.resource('s3')

    try:

    if my_region == 'us-east-1':

    s3.create_bucket(Bucket=bucket_name)

    else:

    s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })

    print('S3 bucket created successfully')

    except Exception as e:

    print('S3 error: ',e)

    在模型训练循环中,我们将使用训练数据(70% 的客户)。我们将使用基于梯度的优化来迭代细化模型参数。基于梯度的优化是一种使用模型损失函数的梯度查找模型参数值以最大程度减少模型错误的方法。

    测试数据(剩余 30% 的客户)将用于评估模型的性能,并衡量经过训练的模型对不可见数据的概括程度。

    将以下代码复制到新的代码单元格中,然后选择运行以打乱和划分数据:

    train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))])

    print(train_data.shape, test_data.shape)

第 4 步:根据数据训练模型

全部打开

    在此步骤中,您将使用训练数据集训练您的机器学习模型。 

    将以下代码复制到新的代码单元格中,然后选择运行以重新格式化和加载数据:

    pd.concat([train_data['y_yes'], train_data.drop(['y_no', 'y_yes'], axis=1)], axis=1).to_csv('train.csv', index=False, header=False)

    boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('train.csv')

    s3_input_train = sagemaker.s3_input(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')

    将以下代码复制到新的代码单元格中,然后选择运行:

    sess = sagemaker.Session()

    xgb = sagemaker.estimator.Estimator(containers[my_region],role, train_instance_count=1, train_instance_type='ml.m4.xlarge',output_path='s3://{}/{}/output'.format(bucket_name, prefix),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)

    几分钟后,您应开始看到正在生成的训练日志。

    xgb.fit({'train': s3_input_train})

第 5 步:部署模型

全部打开

    在此步骤中,您将经过训练的模型部署到终端节点,重新格式化,然后加载 CSV 数据,再运行模型以创建预测。

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

    test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array

    xgb_predictor.content_type = 'text/csv' # set the data type for an inference

    xgb_predictor.serializer = csv_serializer # set the serializer type

    predictions = xgb_predictor.predict(test_data_array).decode('utf-8') # predict!

    predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array

    print(predictions_array.shape)

第 6 步:评估模型性能

全部打开

    在此步骤中,您将评估机器学习模型的性能和准确性。

    根据预测,我们可以得出结论,您准确预测了测试数据中 90% 的客户将注册存单,对于已注册客户,预测准确度为 65% (278/429),对于未注册客户,预测准确度为 90% (10785/11928)。

    cm = pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])

    tn = cm.iloc[0,0]; fn = cm.iloc[1,0]; tp = cm.iloc[1,1]; fp = cm.iloc[0,1]; p = (tp+tn)/(tp+tn+fp+fn)*100

    print("\n{0:<20}{1:<4.1f}%\n".format("Overall Classification Rate: ", p))

    print("{0:<15}{1:<15}{2:>8}".format("Predicted", "No Purchase", "Purchase"))

    print("Observed")

    print("{0:<15}{1:<2.0f}% ({2:<}){3:>6.0f}% ({4:<})".format("No Purchase", tn/(tn+fn)*100,tn, fp/(tp+fp)*100, fp))

    print("{0:<16}{1:<1.0f}% ({2:<}){3:>7.0f}% ({4:<}) \n".format("Purchase", fn/(tn+fn)*100,fn, tp/(tp+fp)*100, tp))

第 7 步:终止资源

全部打开

    在此步骤中,您将终止与 Amazon SageMaker 相关的资源。

    重要说明:终止当前未在使用的资源可降低成本,是最佳实践。不终止资源将产生费用。

    sagemaker.Session().delete_endpoint(xgb_predictor.endpoint)

    bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)

    bucket_to_delete.objects.all().delete()

恭喜!

您已了解如何使用 Amazon SageMaker 准备、训练、部署和评估机器学习模型。Amazon SageMaker 提供了快速连接到您的训练数据所需的所有内容,助您轻松构建机器学习模型,并且还可助您为应用程序选择最佳算法和框架,同时管理所有底层基础设施,以便您以 PB 规模训练模型。

建议的后续步骤:

了解更多

Amazon SageMaker 附带预构建的机器学习算法,可用于各种使用案例。了解有关使用 Amazon SageMaker 附带的 内置算法的更多信息。 

深入了解

您可以在 Amazon SageMaker 中使用带有自动模型优化功能的机器学习。这让您可以自动优化模型中的超参数,以获得最佳结果。请查看有关自动模型优化的文档和本博客文章,以深入了解此功能。 

查看实际效果

Amazon SageMaker 提供了许多示例笔记本,可解决机器学习的许多常见使用案例。请在 GitHub 上查看!

general

Amazon Bedrock AgentCore 现已上线中国区域

支持任意框架与模型,助力您安全构建、连接和运行 AI 智能体,加快应用落地

Missing alt text value