在本教程中,您将学习如何使用 Amazon SageMaker 构建、训练和部署机器学习 (ML) 模型。我们将使用深受欢迎的 XGBoost ML 算法进行练习。Amazon SageMaker 是一项完全托管的模块化机器学习服务,可帮助开发人员和数据科学家大规模地构建、训练和部署机器学习模型。
将机器学习模型从单纯的概念引入生产通常既复杂又耗时。您必须管理大量数据以训练模型,为之选择最佳的训练算法,在训练时管理计算容量,然后将模型部署到生产环境中。使用 Amazon SageMaker,您可以更轻松地构建和部署机器学习模型,从而降低了这种复杂性。从各种可用选项中选择正确的算法和框架后,它将管理所有底层基础设施,以 PB 规模训练您的模型,并将其部署到生产环境中。
在本教程中,您将扮演在银行工作的机器学习开发人员的角色。您接到任务,负责开发机器学习模型,预测客户是否会注册存单 (CD)。您将使用市场营销数据集对该模型进行训练,该数据集包含有关客户人口统计数据、市场营销活动响应情况和外部因素的信息。
为方便起见,数据已贴标,数据集中有一列用于标识客户是否已注册银行提供的产品。此数据集的某个版本可从机器学习存储库公开访问(由加州大学欧文分校管理)。本教程将实施有监督的机器学习模型,因为数据已被标记。(若未标记数据集,则实施无监督学习。)
在本教程中,您将:
- 创建笔记本实例
- 准备数据
- 训练模型以从数据中学习
- 部署模型
- 评估您的机器学习模型的性能
第 1 步:进入 Amazon SageMaker 控制台
导航到 Amazon SageMaker 控制台。
单击此处之后,亚马逊云科技管理控制台将在新窗口中打开,因此您可以使本分步指南保持打开状态。开始在搜索栏中键入 SageMaker,并选择 Amazon SageMaker 以打开服务控制台。
第 2 步:创建 Amazon SageMaker 笔记本实例
在此步骤中,您将创建一个 Amazon SageMaker 笔记本实例。
第 3 步:准备数据
在此步骤中,您将使用 Amazon SageMaker 笔记本预处理训练机器学习模型所需的数据。
3c.要准备数据,训练机器学习模型并进行部署,您需要导入一些库并在 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.")
3d.在此步骤中,您将创建一个 S3 存储桶,用于存储本教程的数据。
将以下代码复制到笔记本中的下一个代码单元格中,并更改 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)
3e.接下来,您需要将数据下载到您的 Amazon SageMaker 实例并将其加载到 dataframe 中。复制并运行以下代码:
try:
urllib.request.urlretrieve ("https://d1.awsstatic.com/tmt/build-train-deploy-machine-learning-model-sagemaker/bank_clean.27f01fbbdf43271788427f3682996ae29ceca05d.csv", "bank_clean.csv")
print('Success: downloaded bank_clean.csv.')
except Exception as e:
print('Data load error: ',e)
try:
model_data = pd.read_csv('./bank_clean.csv',index_col=0)
print('Success: Data loaded into dataframe.')
except Exception as e:
print('Data load error: ',e)
3f.现在,我们将打乱数据,并将其分为训练数据和测试数据。
在模型训练循环中,我们将使用训练数据(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 步:根据数据训练模型
在此步骤中,您将使用训练数据集训练您的机器学习模型。
4a.要使用 Amazon SageMaker 预构建的 XGBoost 模型,您需要重新格式化训练数据的标题和第一列,并从 S3 存储桶加载数据。
将以下代码复制到新的代码单元格中,然后选择运行以重新格式化和加载数据:
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')
4b.接下来,您需要设置 Amazon SageMaker 会话,创建 XGBoost 模型(估算器)的实例,并定义模型的超参数。将以下代码复制到新的代码单元格中,然后选择运行:
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)
第 5 步:部署模型
在此步骤中,您将经过训练的模型部署到终端节点,重新格式化,然后加载 CSV 数据,再运行模型以创建预测。
5b.要预测测试数据中的客户是否已注册银行产品,请将以下代码复制到下一个代码单元格中,然后选择运行:
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 步:评估模型性能
在此步骤中,您将评估机器学习模型的性能和准确性。
6a.复制并粘贴以下代码,然后选择运行以比较名为 混淆矩阵的表中的实际值与预测值。
根据预测,我们可以得出结论,您准确预测了测试数据中 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 相关的资源。
重要说明:终止当前未在使用的资源可降低成本,是最佳实践。不终止资源将产生费用。
恭喜!
您已了解如何使用 Amazon SageMaker 准备、训练、部署和评估机器学习模型。Amazon SageMaker 提供了快速连接到您的训练数据所需的所有内容,助您轻松构建机器学习模型,并且还可助您为应用程序选择最佳算法和框架,同时管理所有底层基础设施,以便您以 PB 规模训练模型。
建议的后续步骤:
本教程对您是否有帮助?
免责声明:前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。