亚马逊AWS官方博客

Amazon SageMaker Autopilot – 在完全控制和可见的情况下,自动创建高质量的机器学习模型

今天,我们非常高兴地推出 Amazon SageMaker Autopilot,它可以在完全控制和可见的情况下,自动创建最佳分类和回归机器学习模型。

1959 年,Arthur Samuel 将机器学习定义为让计算机能够无需明确编程而进行学习。在实践中,这意味着找到一种算法,可以从现有数据集中提取模式,然后使用这些模式来构建可很好地泛化到新数据的预测模型。从那时起,人们发明了许多机器学习算法,为科学家和工程师提供了充足地选择,帮助他们构建了惊人的应用程序。

但是,丰富的算法也带来了一个难题:应该选择哪种算法? 如何可靠地找出哪一种算法在您的特定业务问题上表现最佳? 此外,机器学习算法通常会列出很长的训练参数(也称为超参数),如果您想从模型中获得所有额外的精度,则需要将其设置为“刚好合适”。更糟糕的是,算法还需要以特定方式(也称为特征工程)准备和转换数据,才能实现最佳学习…并且您需要选择最佳实例类型。

如果您认为这听起来像是大量实验,反复试验,那么您绝对说对了。机器学习绝对是硬科学和烹饪食谱的混合,这使非专家很难迅速获得良好的结果。

如果可以依靠完全托管的服务为您解决该问题会怎样? 调用 API 并完成作业? 进入 Amazon SageMaker Autopilot

Amazon SageMaker Neo 简介
通过使用单个 API 调用或在Amazon SageMaker Studio 中单击几下,SageMaker Autopilot 首先检查您的数据集,并运行大量候选项以找出数据预处理步骤、机器学习算法和超参数的最佳组合。然后,它使用这种组合来训练推断管道,您可以轻松地将其部署在实时终端节点上或进行批处理。与 Amazon SageMaker 一样,所有这些操作都在完全托管的基础设施上进行。

最后但同样重要的一点是,SageMaker Autopilot 还会生成Python 代码,确切显示数据的预处理方式:您不仅可以了解 SageMaker Autopilot 的工作方式,如果您原因,还可以重新使用该代码进行进一步的手动调整。

迄今为止,SageMaker Autopilot 支持:

  • 表格格式的输入数据,以及自动数据清理和预处理
  • 用于线性回归、二进制分类和多级分类的自动算法选择,
  • 自动超参数优化,
  • 分布式训练,
  • 自动实例和集群大小选择。

我将向您展示这有多简单。

将 AutoML 与 Amazon SageMaker Autopilot 配合使用
让我们以这个笔记本示例为起点:它建立一个二进制分类模型,预测客户是接受还是拒绝营销报价。请花几分钟阅读:正如您会看到的,业务问题本身很容易理解,数据集既不大也不复杂。但是,需要几个非直观的预处理步骤,还需要挑选算法及其参数…SageMaker Autopilot 可以解决这一难题!

首先,我获取数据集的副本,快速浏览前几行。

然后,我将其上传到 Amazon Simple Storage Service (S3) 中,无需进行任何预处理。

sess.upload_data(path="automl-train.csv", key_prefix=prefix + "/input")

's3://sagemaker-us-west-2-123456789012/sagemaker/DEMO-automl-dm/input/automl-train.csv'

现在,让我们配置 AutoML 作业:

  • 设置数据集的位置,
  • 选择我希望模型预测的目标属性:在本例中,“y”列显示客户是否接受了报价,
  • 设置训练工件的位置。
input_data_config = [{
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': 's3://{}/{}/input'.format(bucket,prefix)
        }
      },
      'TargetAttributeName': 'y'
    }
  ]

output_data_config = {
    'S3OutputPath': 's3://{}/{}/output'.format(bucket,prefix)
  }

就这么简单! 当然,随着您了解有关数据和模型的更多信息,SageMaker Autopilot 的许多选项会派上用场,例如:

  • 设置要训练的问题类型:线性回归、二进制分类或多级分类。如果不确定,SageMaker Autopilot 会通过分析目标属性值自动找出类型。
  • 使用特定指标进行模型评估。
  • 定义完成标准:最长运行时间等

有一件事不需要做,那就是调整训练集群的大小,因为 SageMaker Autopilot 使用基于数据大小和算法的启发式方法。太棒了!

不用进行配置,我可以使用 CreateAutoMl API 启动该作业。

auto_ml_job_name = 'automl-dm-' + timestamp_suffix
print('AutoMLJobName: ' + auto_ml_job_name)

sm.create_auto_ml_job(AutoMLJobName=auto_ml_job_name,
                      InputDataConfig=input_data_config,
                      OutputDataConfig=output_data_config,
                      RoleArn=role)

AutoMLJobName: automl-dm-28-10-17-49

作业分四个步骤运行(您可以使用DescribeAutoMlJob API 进行查看)。

  1. 将数据集分为训练集和验证集,
  2. 分析数据,以便建议应在数据集上试用的管道,
  3. 特征工程,将转换应用于数据集和单个特征,
  4.  管道选择和超参数调整,选择性能最高的管道以及用于训练算法的最佳超参数。

达到最大候选项数量(或其中一种停止条件)后,作业完成。我可以使用 ListCandidatesForAutoMlJob API 获取有关所有候选项的详细信息,也可以在 AWS 控制台中查看它们。

candidates = sm.list_candidates_for_auto_ml_job(AutoMLJobName=auto_ml_job_name, SortBy='FinalObjectiveMetricValue')['Candidates']
index = 1
for candidate in candidates:
  print (str(index) + "  " + candidate['CandidateName'] + "  " + str(candidate['FinalAutoMLJobObjectiveMetric']['Value']))
  index += 1

1 automl-dm-28-tuning-job-1-fabb8-001-f3b6dead 0.9186699986457825
2 automl-dm-28-tuning-job-1-fabb8-004-03a1ff8a 0.918304979801178
3 automl-dm-28-tuning-job-1-fabb8-003-c443509a 0.9181839823722839
4 automl-dm-28-tuning-job-1-ed07c-006-96f31fde 0.9158779978752136
5 automl-dm-28-tuning-job-1-ed07c-004-da2d99af 0.9130859971046448
6 automl-dm-28-tuning-job-1-ed07c-005-1e90fd67 0.9130859971046448
7 automl-dm-28-tuning-job-1-ed07c-008-4350b4fa 0.9119930267333984
8 automl-dm-28-tuning-job-1-ed07c-007-dae75982 0.9119930267333984
9 automl-dm-28-tuning-job-1-ed07c-009-c512379e 0.9119930267333984
10 automl-dm-28-tuning-job-1-ed07c-010-d905669f 0.8873512744903564

目前,我只对最佳试验感兴趣:验证准确率为 91.87%。让我们将其部署到 SageMaker 终端节点,就像部署任何模型一样:

model_arn = sm.create_model(Containers=best_candidate['InferenceContainers'],
                            ModelName=model_name,
                            ExecutionRoleArn=role)

ep_config = sm.create_endpoint_config(EndpointConfigName = epc_name,
                                      ProductionVariants=[{'InstanceType':'ml.m5.2xlarge',
                                                           'InitialInstanceCount':1,
                                                           'ModelName':model_name,
                                                           'VariantName':variant_name}])

create_endpoint_response = sm.create_endpoint(EndpointName=ep_name,
                                              EndpointConfigName=epc_name)

几分钟后,终端节点开始运行,我可以使用它进行预测。SageMaker 正常运行!

现在,我敢打赌,您对模型的构建方式以及其他候选项感到好奇。我将向您展示。

使用 Amazon SageMaker Autopilot 实现完全可见和控制
SageMaker Autopilot 将训练工件存储在 S3 中,包括两个自动生成的笔记本

job = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)
job_data_notebook = job['AutoMLJobArtifacts']['DataExplorationNotebookLocation']
job_candidate_notebook = job['AutoMLJobArtifacts']['CandidateDefinitionNotebookLocation']

print(job_data_notebook)
print(job_candidate_notebook)

s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotCandidateDefinitionNotebook.ipynb
s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotDataExplorationNotebook.ipynb

第一个包含有关数据集的信息。

第二个包含有关 SageMaker Autopilot 作业的完整详细信息:候选项、数据预处理步骤等。所有代码均可用,您可以更改“旋钮”以进行进一步的实验。

如您所见,您可以完全控制和查看模型的构建方式。

现已推出!
我对 Amazon SageMaker Autopilot 感到非常兴奋,因为它使机器学习比以往任何时候都更加简单易用。无论您是刚开始机器学习,还是经验丰富的从业者,SageMaker Autopilot 都可以帮助您使用以下任一途径更快更好地构建模型:

现在轮到您了。您可以立即在以下区域使用 SageMaker Autopilot

  • 美国东部(弗吉尼亚北部)美国东部(俄亥俄)美国西部(加利福尼亚北部)美国西部(俄勒冈)
  • 加拿大(中部)南非(圣保罗)
  • 欧洲(爱尔兰)欧洲(伦敦)欧洲(巴黎)欧洲(法兰克福)
  • 中东(巴林)
  • 亚太地区(孟买)亚太地区(首尔)亚太地区(新加坡)亚太地区(悉尼)亚太地区(东京)

请通过 Amazon SageMaker 的 AWS 平台或您常用的 AWS Support 联系方式向我们发送反馈。

Julien