AWS-认证机器学习专项认证指南第二版-全-
AWS 认证机器学习专项认证指南第二版(全)
原文:
annas-archive.org/md5/a4f594b0ede74d7e70fdcbce5c192e37译者:飞龙
前言
AWS 机器学习专业认证考试测试您在 AWS 基础设施上执行机器学习(ML)的能力。本书通过使用实际示例深入覆盖整个考试大纲,以帮助您在 AWS 上进行实际的机器学习项目。
从 AWS 机器学习的介绍开始,您将学习机器学习的基础知识,并探索重要的 AWS 服务,用于人工智能(AI)。然后您将了解如何使用多个 AWS 服务,如 S3 和 EMR,来存储和处理机器学习数据。
您还将学习如何为机器学习准备数据,并发现针对不同类型变量的数据操作和转换的不同技术。本书涵盖了处理缺失数据和异常值,并带您通过各种机器学习任务,如分类、回归、聚类、预测、异常检测、文本挖掘和图像处理,以及您需要了解以通过考试的具体机器学习算法。最后,您将探索模型评估、优化和部署,并掌握在生产环境中部署模型和监控它们的方法。
在本书结束时,您将掌握机器学习所有关键领域的知识,以及 AWS 为每个领域发布的解决方案,包括每个 AWS 机器学习领域常用的工具、方法和技术。本书不仅旨在支持您通过 AWS 机器学习专业认证考试,而且还能使您的机器学习专业旅程变得更加容易。
本书面向对象:
这本书旨在为准备参加 AWS 认证机器学习专业考试的学生和专业人士提供帮助,同时也能增强他们对机器学习的理解,特别强调 AWS。建议读者熟悉机器学习基础知识以及 AWS 服务,以便充分利用本书。
本书涵盖内容:
第一章**,机器学习基础,涵盖了机器学习的定义、不同的建模方法类型,以及构建机器学习产品所需的所有步骤。
第二章**,AWS 数据存储服务,介绍了用于机器学习数据存储的 AWS 服务。您将了解多种不同的 S3 存储类别及其适用场景。您还将学习如何处理数据加密,以及如何在静态和传输过程中保护您的数据。最后,您还将了解其他值得了解的考试相关数据存储服务类型。
第三章**,AWS 数据迁移和处理服务,介绍了用于机器学习数据处理 AWS 服务。您将学习如何处理批处理和实时处理,如何直接查询 Amazon S3 上的数据,以及如何在 EMR 上创建大数据应用程序。
第四章**,数据准备和转换,处理分类和数值特征,并应用不同的技术来转换您的数据,例如独热编码、二进制编码、有序编码、分箱和文本转换。您还将了解如何处理数据中的缺失值和异常值,这两个对于构建良好的机器学习模型非常重要的话题。
第五章**,数据理解和可视化,教您如何根据不同的变量类型和业务需求选择最合适的数据可视化技术。您还将了解 AWS 的数据可视化服务。
第六章**,应用机器学习算法,涵盖了不同类型的机器学习任务,如分类、回归、聚类、预测、异常检测、文本挖掘和图像处理。每个任务都有特定的算法,您应该了解这些算法才能通过考试。您还将了解集成模型的工作原理以及如何处理维度诅咒。
第七章**,评估和优化模型,教您如何选择模型指标来评估模型结果。您还将学习如何通过调整其超参数来优化您的模型。
第八章**,AWS 人工智能/机器学习应用服务,涵盖了 AWS 提供的 AI/ML 应用程序的详细信息,您需要了解这些信息才能通过考试。
第九章**,Amazon SageMaker 模型构建,教您如何启动笔记本进行探索性数据分析,以及如何在 Amazon SageMaker 上训练您的模型。您将了解您的训练数据应存储在哪里以及如何通过 SageMaker 访问,并探索您可以使用的不同数据格式。
第十章**,模型部署,介绍了几个 AWS 模型部署选项。您将回顾 SageMaker 部署选项,创建带有 Lambda 函数的替代管道,使用 Step Functions 进行操作,配置自动扩展,以及保护 SageMaker 应用程序。
如何使用本书
这本 AWS 认证机器学习专业研究指南使用现实生活中的示例和全面的理论知识,解释了考试大纲中的每个概念。这本书是您在自信地通过 AWS 认证机器学习专业考试时的首选资源。
在线实践资源
使用本书,您将解锁无限访问我们的在线考试准备平台(图 0**.1)。这是您练习本书中学到的所有内容的场所。
如何访问资源
要了解如何访问在线资源,请参阅本书末尾的 第十一章,访问在线实践资源*。

图 0.1 – 桌面设备上的在线考试准备平台
通过多套模拟考试、交互式闪卡和来自所有现代网络浏览器的考试技巧,加深您对 MLS-C01 概念的理解。
下载彩色图像
我们还提供了一个包含本书中使用的截图/图表的彩色图像的 PDF 文件。您可以从这里下载:packt.link/ky8E8。
使用的约定
本书中使用了多种文本约定。
文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“您将在代码中使用 Amazon Rekognition 的detect_labels API。”
代码块设置如下:
from sagemaker.predictor import Predictor
predictor = Predictor(endpoint_name='your-endpoint-name', sagemaker_session=sagemaker_session)
predictor.predict('input_data')
任何命令行输入或输出都应如下编写:
sh-4.2$ cd ~/SageMaker/ sh-4.2$ git clone https://github.com/PacktPublishing/ AWS-Certified-Machine-Learning-Specialty-MLS-C01- Certification-Guide-Second-Edition.git
粗体:表示新术语、重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词在文本中显示如下。以下是一个示例:“在CloudWatch中,每个Lambda 函数都将有一个日志组,在该日志组内部,有许多日志流。”
提示或重要注意事项
看起来像这样。
联系我们
我们读者的反馈总是受欢迎的。
一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中提及书名,并通过 mailto:customercare@packt.com 与我们联系。
勘误:尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们非常感谢您能向我们报告。请访问www.packtpub.com/support/errata,选择您的书籍,点击勘误提交表单链接,并输入详细信息。我们确保所有有效的勘误都会及时更新在 GitHub 仓库中,相关信息可在 Readme.md 文件中找到。您可以通过以下链接访问 GitHub 仓库:packt.link/QFk6t。
盗版:如果您在互联网上以任何形式遇到我们作品的非法副本,我们非常感谢您能提供位置地址或网站名称。请通过 mailto:copyright@packt.com 与我们联系,并提供材料的链接。
如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com。
分享您的想法
一旦您阅读了AWS Certified Machine Learning - Specialty (MLS-C01) Certification Guide, Second Edition,我们很乐意听到您的想法!请点击此处直接进入此书的亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。
下载此书的免费 PDF 副本
感谢您购买此书!
您喜欢在路上阅读,但无法携带您的印刷书籍到处走吗?
您的电子书购买是否与您选择的设备不兼容?
别担心,现在,您每购买一本 Packt 书籍,都可以免费获得该书的 DRM 免费 PDF 版本。
在任何地方、任何地点、任何设备上阅读。直接从您喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。
优惠远不止于此,您还可以获得独家折扣、时事通讯和每日免费内容的每日电子邮件。
按照以下简单步骤获取福利:
- 扫描下面的二维码或访问以下链接:

packt.link/free-ebook/9781835082201
-
提交您的购买证明。
-
就这样!您将直接通过电子邮件发送免费 PDF 和其他福利。
第一章:机器学习基础
几十年来,研究人员一直在通过被称为人工智能(或简称AI)的领域来模拟人类大脑活动。1956 年,一群人在达特茅斯夏季人工智能研究项目上会面,这一事件被广泛接受为今天所知的第一次关于人工智能的集体讨论。研究人员试图证明学习过程的许多方面可以被精确描述,因此可以被机器自动化和复制。今天,你知道他们是正确的!
在这个领域还出现了许多其他术语,例如机器学习(ML)和深度学习(DL)。这些 AI 的子领域也已经发展了几十年(当然,这里没有什么是对科学界来说是新的)。然而,随着信息社会的自然进步,以及最近大数据平台的兴起,AI 应用程序以更广泛的应用性重生——力量(因为现在有更多的计算资源来模拟和实现它们)和适用性(因为现在信息无处不在)。
更近一些,云服务提供商已经将 AI 带入云端。这有助于各种规模的公司降低其运营成本,甚至让他们能够尝试 AI 应用程序,考虑到对于一家小公司来说,维护自己的数据中心以扩展 AI 应用程序可能成本过高。
随着大数据和云服务的普及,出现了构建尖端 AI 应用程序的不凡之旅。2020 年 6 月,一项具体的技术引起了广泛关注,并将 AI 列为技术行业中最受讨论的话题之一——它的名字叫 ChatGPT。
ChatGPT 是一种流行的 AI 应用程序,它使用在大量文本数据上训练的大型语言模型(更具体地说,是生成式预训练转换器)来理解和生成类似人类的语言。这些模型旨在处理和理解人类语言的复杂性,包括语法、上下文和语义。
大型语言模型利用深度学习技术(例如,基于转换器架构的深度神经网络)来学习文本数据中的模式和关系。它们由数百万个参数组成,这使得它们高度复杂,能够捕捉非常具体的语言结构。
这种术语和不同类别的用例的混合可能会让人在理解实施 AI 应用程序的实用步骤时感到困惑。这把你带到了本章的目标:能够描述 AI、ML 和 DL 这些术语的含义,以及理解 ML 管道的所有细微差别。避免对这些术语的混淆,并确切了解 ML 管道是什么,将允许你正确选择服务,开发你的应用程序,并掌握 AWS 机器学习专业考试。
充分利用这本书——你的认证以及更远
这本书及其附带在线资源旨在成为你MLS-C01 考试的完整准备工具。
这本书是以一种方式编写的,你可以在认证后应用在这里学到的所有内容。这本书附带在线实践资源(图 1**.1)旨在提高你的应试技巧。它们包含了定时模拟考试、互动闪卡和考试技巧,帮助你从现在开始直到考试当天准备考试。
在继续之前
要了解如何访问这些资源,请前往书的末尾的第十一章,访问在线实践资源。

图 1.1 – 在线实践资源的仪表板界面
以下是一些如何充分利用这本书以通过你的认证并在考试后保留知识的技巧:
-
仔细阅读每一部分。
-
从仪表板到Packt Reader中访问书籍的
BACK TO THE BOOK链接。你可以在那里突出显示书籍的特定部分。 -
章节复习题:在本章末尾,你会找到一个链接来查看本章的复习题。这些题目旨在测试你对本章的知识。目标是在进入下一章之前至少得分75%。你可以在本章末尾的考试准备练习 - 章节复习题部分找到如何充分利用这些题目的详细说明。这样,你就可以在每一章之后提高你的应试技巧,而不是在最后。
-
闪卡:在你阅读完本书并在每个章节复习题中得分提高75%之后,开始复习在线闪卡。它们将帮助你记住关键概念。
-
模拟考试:在考试当天之前,解决书中附带的所有模拟考试。如果你有一些答案错误,回到书中并重新审视你薄弱的概念。
-
考试技巧:不时回顾这些内容,以进一步提高你的考试准备。
本章的主要内容包括以下内容:
-
比较人工智能、机器学习和深度学习
-
对监督学习、无监督学习和强化学习进行分类
-
CRISP-DM 建模生命周期
-
数据拆分
-
建模预期
-
介绍机器学习框架
-
云中的机器学习
比较人工智能、机器学习和深度学习
人工智能是一个广泛的研究领域,研究通过模拟人类智能来创建系统和机器以解决问题的不同方法。创建这些程序和机器的复杂性不同,从简单的基于规则的引擎到复杂的自我学习系统。人工智能涵盖了但不限于以下子领域:
-
机器人技术
-
自然语言处理(NLP)
-
基于规则的系统
-
机器学习(ML)
-
计算机视觉
这项认证考试关注的领域是机器学习(ML)。
检验机器学习
机器学习是人工智能的一个子领域,旨在创建可以从经验中学习,而不需要明确编程的系统。正如其名称所暗示的,系统可以观察其底层环境,学习并适应自身,而不需要人为干预。机器学习系统背后的算法通常从它们可用的数据和条件下提取和改进知识。

图 1.2 – 人工智能、机器学习和深度学习的层次结构
你应该记住,存在不同类别的机器学习算法。例如,基于决策树的模型、基于概率的模型和神经网络模型。这些类别中的每一个都可能包含数十种特定的算法或架构(其中一些将在本书的后续章节中介绍)。
正如你可能已经在图 1.2中注意到的,你可以更加具体,并将机器学习领域分解为机器学习专业考试中另一个非常重要的主题:深度学习,或简称 DL。
检查深度学习
深度学习是机器学习的一个子集,旨在提出将多个层连接起来以解决特定问题的算法。然后,知识逐层传递,直到找到最佳解决方案。最常见类型的深度学习算法是深度神经网络。
在撰写本书时,深度学习是机器学习领域的一个非常热门的话题。目前大多数最先进的机器翻译、图像标题和计算机视觉算法都是在过去几年中提出的,并且是深度学习领域的一部分(ChatGPT 应用中使用的 GPT-4 就是这些算法之一)。
现在你已经了解了人工智能的类型概述,让我们看看你可以如何对机器学习进行分类。
对监督学习、无监督学习和强化学习进行分类
机器学习是一个非常广泛的研究领域;这就是为什么清晰地定义其子领域非常重要。从非常广泛的角度来看,你可以将机器学习算法分为两大类:监督学习和无监督学习。
介绍监督学习
监督算法使用来自输入数据的类别或标签作为支持来寻找和验证最佳解决方案。在表 1.1中,有一个数据集旨在从一家金融公司分类欺诈交易。
| 星期 | 小时 | 交易金额 | 商户类型 | 是否欺诈 |
|---|---|---|---|---|
| 周一 | 09:00 | $1000 | 零售 | 否 |
| 周二 | 23:00 | $5500 | 电子商务 | 是 |
| 周五 | 14:00 | $500 | 旅行 | 否 |
| 周一 | 10:00 | $100 | 零售 | 否 |
| 周二 | 22:00 | $100 | 电子商务 | 否 |
| 周二 | 22:00 | $6000 | 电子商务 | 是 |
表 1.1 – 监督学习样本数据集
前四列被称为特征或自变量,它们可以被监督算法用来寻找欺诈模式。例如,通过结合这四个特征(星期几、东部标准时间小时、交易金额和商家类型)以及六个观察值(每一行在技术上是一个观察值),你可以推断出价值超过$5,000 且在夜间处理的电子商务交易可能是欺诈案例。
重要提示
在实际场景中,你将拥有更多的观察值,以便有统计支持来做出这种类型的推断。
关键点在于,你能够仅仅因为事先知道什么是欺诈以及什么不是欺诈,就推断出一个潜在的欺诈模式。这种信息在表 1.1的最后一列中,通常被称为目标变量、标签、响应变量或因变量。如果输入数据集有一个目标变量,你应该能够应用监督学习。
在监督学习中,目标变量可能存储不同类型的数据。例如,它可能是一个二元列(是或否),一个多类列(A 类、B 类或 C 类),甚至是一个数值列(任何实数,如交易金额)。根据目标变量的数据类型,你可以找到你的问题属于哪种类型的监督学习。表 1.2展示了如何将监督学习分为两大组:分类和回归算法:
| 目标变量的数据类型 | 目标变量的子数据类型 | 适用的监督学习类型 |
|---|---|---|
| 分类 | 二元 | 二元分类 |
| 分类 | 多类 | 多分类 |
| 数值 | N/A | 回归 |
表 1.2 – 根据目标变量选择合适的监督学习类型
虽然分类算法预测一个类别(要么是二分类,要么是多分类),回归算法预测一个实数(要么是连续的,要么是离散的)。
理解数据类型对于在机器学习项目中做出正确的决策非常重要。你可以将数据类型分为两大类:数值数据和分类数据。数值数据可以进一步分为连续或离散子类,而分类数据可能指的是有序或无序数据:
-
数值/离散数据指的是单个和可数的项目(例如,教室里的学生数量或在线购物车中的商品数量)。
-
数值/连续数据指的是无限可能的测量值,它们通常带有小数点(例如,温度)。
-
分类/名义数据指的是没有数量值的标签变量(例如,姓名或性别)。
-
分类/有序数据为标签变量增加了一种顺序感(例如,教育水平或员工职称级别)。
换句话说,在选择项目中的算法时,你应该问自己:我有一个目标变量吗?它存储的是分类数据还是数值数据? 回答这些问题将使你处于更好的位置,以便选择一个可能解决问题的潜在算法。
然而,如果你没有目标变量怎么办?在这种情况下,你面临的是一个无监督学习问题。无监督问题不提供标记数据;相反,它们提供所有独立的变量(或特征),这将允许无监督算法在数据中找到模式。最常见的一种无监督学习是聚类,它旨在根据特征将数据集的观测值分组到不同的簇中,纯粹基于它们的特征。来自同一簇的观测值预计将彼此相似,但与其他簇的观测值非常不同。聚类将在本书未来的章节中详细介绍。
半监督学习也存在于机器学习文献中。这类算法可以从部分标记的数据中学习(一些观测值包含标签,而另一些则没有)。
最后,另一类机器学习算法采用的学习方法是强化学习。这种方法根据系统自主做出的良好决策进行奖励;换句话说,系统通过经验学习。
你一直在非常广泛地学习算法的途径和类别。然而,现在是时候具体化并介绍术语模型了。
CRISP-DM 建模生命周期
在机器学习中,当你想要指定解决特定问题的步骤时,建模是一个非常常见的术语。例如,你可以创建一个二元分类模型来预测表 1.1中的交易是否欺诈。
在这个背景下,一个模型代表创建解决方案的所有步骤,作为一个整体,包括(但不限于)算法。《跨行业数据挖掘标准流程》,更常被称为CRISP-DM,是提供指导的方法之一,指导你应遵循的常见步骤来创建模型。这种方法在市场上被广泛使用,并在 AWS 机器学习专业考试中有所涉及:

图 1.3 – CRISP-DM 方法
一切始于业务理解,这将产生业务目标(包括成功标准)、情况评估、数据挖掘目标以及项目计划(包括对工具和技术的初步评估)。在情况评估期间,你还应该考虑资源清单、需求、假设和约束、风险、术语、成本和收益。当你建模时,每一个假设和成功标准都很重要。
下一个步骤被称为数据理解,在这个阶段,你将收集原始数据,描述它,探索它,并检查其质量。这是对将要用于创建模型的数据的初步评估。再次强调,数据科学家必须保持怀疑态度。你必须确保你理解数据的所有细微差别及其来源。
数据准备阶段实际上是建模过程中通常消耗最多时间的一个阶段。在这个阶段,你需要选择和过滤数据,根据需要执行的任务对其进行清理,提出新的属性,将数据与其他数据源集成,并按照将要应用的算法的预期格式化。这些任务通常被称为特征工程。
一旦数据准备就绪,你就可以最终开始建模阶段。这是算法发挥作用的地方。你应该首先确保选择正确的技术。记住:根据目标变量(及其数据类型)的存在与否,你将拥有不同的算法可供选择。每种建模技术可能都包含一些你必须注意的隐含假设。例如,如果你选择多重线性回归算法来预测房价,你应该意识到这种类型的模型期望你的数据变量之间存在线性关系。
现在有数百种算法,每种算法可能都有自己的假设。在选择你想要在项目中测试的算法之后,你应该花一些时间检查它们的特定细节。在本书的后续章节中,你将了解其中的一些。
重要提示
一些算法在其逻辑中集成了称为特征选择的子过程。这是一个选择最重要的特征以构建最佳模型的过程。决策树是自动执行特征选择的算法的例子。你将在稍后更详细地了解特征选择,因为选择模型最佳变量的方法有很多种。
在建模阶段,你还应该为模型设计一个测试方法,定义将使用哪些评估指标以及数据将如何分割。有了这些,你就可以通过设置算法的超参数并使用数据来喂养模型,最终构建模型。这个过程被称为训练过程,用于喂养模型的数据被称为训练数据。有不同方式来组织训练和测试数据,你将在本章中了解这些内容。
重要提示
机器学习算法由参数和超参数组成。参数是从数据中学习的;例如:一个基于决策树的算法可能会从训练数据中学习到,根据信息增益评估,某个特征应该组成其根级别。另一方面,超参数用于控制学习过程。以相同的决策树为例,你可以指定树的最大允许深度(无论训练数据如何)。超参数调整是考试中的一个非常重要的话题,将在稍后进行详细讨论。
模型训练完成后,你可以评估和审查结果,以便提出下一步行动。如果结果不可接受(基于业务成功标准),你应该回到早期步骤,检查还可以做些什么来提高模型的结果。这可能包括算法超参数的微妙调整、新的数据准备步骤,甚至重新定义业务驱动因素。另一方面,如果模型质量可接受,你可以进入部署阶段。
在 CRISP-DM 方法论的最后一个阶段,你必须考虑模型的部署计划、监控和维护。你可以从两个角度看待这一步:训练和推理。训练管道包括训练模型所需的步骤,包括数据准备、超参数定义、数据拆分和模型训练本身。无论如何,你必须将所有模型工件存储在某个地方,因为它们将被下一个需要开发的管道使用:推理管道。
推理管道仅使用模型工件来对全新的观测值(在训练阶段从未被模型见过的数据)执行模型。例如,如果模型被训练来识别欺诈交易,那么这就是新交易将通过模型进行分类的时候。
通常,模型只训练一次(通过训练管道)并执行多次(通过推理管道)。然而,经过一段时间后,预计会出现一些模型退化,也称为模型漂移。这种现象发生是因为模型通常在静态训练集上训练,旨在代表某一时间点的业务场景;然而,业务在不断发展,可能需要使用更近期的数据进行模型重新训练,以捕捉新的业务方面。这就是为什么在模型部署后,跟踪模型性能同样重要的原因。
CRISP-DM 方法论对于 AWS 机器学习专业考试的内容至关重要,如果你查看 AWS 涵盖的四个领域,你会意识到它们是从 CRISP-DM 阶段概括出来的:数据工程、探索性数据分析、建模和机器学习实施与运营。
你现在已经理解了建模流程的所有关键阶段,并且知道算法本身只是更大流程的一部分!接下来,你将了解如何拆分数据以创建和验证机器学习模型。
数据拆分
训练和评估机器学习模型是建模流程中的关键任务。机器学习算法需要数据来找到特征之间的关系以便进行推断,但这些推断在移动到生产环境之前需要得到验证。
用于训练机器学习模型的集合通常被称为训练集。这些训练数据必须能够代表模型将被使用的真实环境;如果不符合这一要求,它们将毫无用处。
回到表 1.1中提到的欺诈示例,根据训练数据,你发现价值超过$5,000 且在夜间处理的电子商务交易可能是欺诈案例。考虑到这一点,在将模型应用于生产环境后,模型应该标记出在训练过程中学习到的类似案例。
因此,如果这些案例仅存在于训练集中,模型在生产环境中将标记假阳性案例。相反的情况也是真实的:如果生产数据中存在某个欺诈案例,而在训练数据中没有反映出来,模型将标记大量假阴性案例。假阳性和假阴性比率只是许多可用于模型验证的质量指标中的两个。这些指标将在稍后的内容中详细讨论。
到目前为止,你应该已经清楚地理解了拥有一个好的训练集的重要性。现在,假设你确实有一个有效的训练集,你如何能够有一定程度的信心认为这个模型将在生产环境中表现良好?答案是使用测试集和验证集:

图 1.4 – 数据拆分
图 1.4展示了在训练和推理管道中可能遇到的不同数据拆分类型。训练数据用于创建模型;测试数据用于提取最终的模型质量指标。出于任何原因,测试数据不能在训练过程中使用,除了提取模型指标。
避免在训练过程中使用测试数据的原因很简单:你不能让模型在用于验证的数据上学习。这种保留一部分数据用于测试的技术通常被称为保留验证。
图 1.4右侧的框代表生产数据。生产数据通常连续不断地到来,你必须执行推理管道以从中提取模型结果。在生产数据上不进行任何训练,也不进行任何其他类型的重新计算;你只需将其按原样通过推理管道即可。
从技术角度来看,大多数机器学习库使用.fit方法实现训练步骤,而推理步骤则通过.transform或.predict方法实现。再次强调,这只是一个大多数机器学习库使用的常见模式,但请注意,你可能会在不同的机器学习库中找到不同的命名约定。
仍然参考图 1.4,还有一个靠近训练数据的数据框,名为验证数据。这是训练集的一个子集,通常用于在进入测试阶段之前支持最佳模型的选择。你将更详细地了解验证集,但首先,你应该了解为什么你需要它们。
过拟合和欠拟合
机器学习模型可能会遭受两种类型的拟合问题:过拟合和欠拟合。过拟合意味着你的模型在训练数据上表现非常好,但不能推广到其他数据集,如测试数据,甚至更糟糕的是,生产数据。换句话说,如果你有一个过拟合的模型,它只在你训练的数据上工作。
当你在构建机器学习模型时,你希望创建能够推广他们所学的知识并推断出其他遵循相同数据分布的数据集的决策的解决方案。一个只在其训练数据上工作的模型是无用的。过拟合通常是由于特征数量过多或算法超参数配置不足造成的。
另一方面,欠拟合模型在训练阶段无法拟合数据。因此,它们过于通用,无法在训练、测试或生产数据中表现良好。欠拟合通常是由于缺乏良好的特征/观察结果,或者由于缺乏训练模型的时间(某些算法需要更多的迭代来正确拟合模型)。
需要避免过拟合和欠拟合。有许多建模技术可以解决这些问题。例如,你将了解常用的交叉验证技术及其与图1.4中显示的验证数据框的关系。
应用交叉验证和测量过拟合
交叉验证是一种将训练集分成训练集和验证集的技术。然后,模型在训练集上训练并在验证集上测试。最常用的交叉验证策略被称为k 折交叉验证,其中 k 是训练集分割的数量。
使用 k 折交叉验证并假设 k 的值为 10,你将训练集分成 10 个部分。模型将被训练和测试 10 次。在每次迭代中,它使用 9 个部分进行训练,留下一个部分进行测试。经过 10 次执行后,从每个迭代中提取的评估指标将被平均,并将代表训练阶段的最终模型性能,如图1.5所示:

图 1.5 – 交叉验证的实际应用
另一种常见的交叉验证技术被称为留一法交叉验证(LOOCV)。在这种方法中,模型被多次执行,并且在每次迭代中,一个观测值被分离出来用于测试,其余的用于训练。
在训练期间使用交叉验证有许多优点:
-
你通过在特定数据块上训练模型并在另一个未用于训练的数据块上测试来减轻训练数据中的过拟合问题。
-
你避免了测试数据中的过拟合,因为不需要继续使用测试数据来优化模型。
-
你揭示了过拟合或欠拟合的存在。如果模型在训练/验证数据中的性能与在测试数据中观察到的性能非常不同,那么有问题。
值得注意的是,列表上的第三项在 AWS 机器学习专业考试中被广泛涉及。例如,假设你正在创建一个二元分类模型,在训练期间使用交叉验证,并使用测试集来提取最终指标(保留验证)。如果你在交叉验证结果中得到 80%的准确率,在测试集中得到 50%的准确率,这意味着模型过度拟合了训练集,因此不能推广到测试集。
另一方面,如果你在训练集中得到 50%的准确率,在测试集中得到 80%的准确率,那么数据中存在系统性问题。很可能训练集和测试集没有遵循相同的分布。
重要注意事项
准确率是分类模型中常用的模型评估指标。它衡量模型在推理过程中做出正确决策的频率。该指标仅用于演示目的,但请注意,有许多其他适用于每种类型模型的评估指标(将在适当的时候介绍)。
自举方法
交叉验证是验证机器学习模型的好策略,你应该作为数据科学家在日常活动中尝试它。然而,你也应该了解其他可用的重采样技术。自举就是其中之一。
虽然交叉验证是无替换的,但自举方法是有替换的。有替换意味着,当你从总体数据集中抽取多个随机样本时,相同的观测值可能会在样本中重复出现。
通常,自举不会像在传统的交叉验证方法中那样用于验证模型。原因是简单的:因为它是有替换的,用于训练的相同观测值可能会被用于测试。这会导致模型性能指标膨胀,因为估计器在预测训练集中已经看到的观测值时很可能是正确的。
自举法通常被机器学习算法以嵌入式方式使用,这需要重采样能力来处理数据。在这种情况下,自举法不是用来验证模型,而是用来创建模型。将在第六章“应用机器学习算法”中介绍的随机森林是那些在模型构建内部使用自举法的算法之一。
设计一个好的数据分割/采样策略对于模型或算法的成功至关重要。你应该想出不同的方法来分割你的数据,检查模型在每个分割上的表现,并确保这些分割代表了模型将被使用的真实场景。
方差与偏差权衡
任何机器学习模型都应包含错误。你可以在模型中找到三种类型的错误:偏差错误、方差错误和未解释错误。最后一个,正如预期的那样,无法解释。它通常与问题的上下文和变量之间的关系有关(你无法控制它)。
其他两种类型的错误可以在建模过程中进行控制。你可以这样说,偏差和方差错误之间存在权衡,因为一种将影响另一种。在这种情况下,增加偏差将减少方差,反之亦然。
偏差错误与模型为了学习目标函数(即你想要解决的问题)所采取的假设相关。某些类型的算法,如线性算法,通常携带这种类型的错误,因为它们在模型训练期间做出了很多假设。例如,线性模型假设数据中存在线性关系。线性回归和逻辑回归是通常包含高偏差的算法类型。另一方面,决策树是关于数据做出较少假设并包含较少偏差的算法类型。
方差与模型在不同训练数据上执行估计的差异相关。具有高方差的模型通常会过度拟合训练集。决策树是具有高方差(通常过度依赖训练集的特定信息,未能泛化)的算法的例子,而线性回归和逻辑回归是具有低方差的算法的例子。这并不意味着决策树是差的估计器;这只是意味着你需要在训练过程中对其进行修剪(优化)。
话虽如此,任何模型的目标都是最小化偏差和方差。然而,如前所述,每一个都会以相反的方向影响另一个。为了演示这种权衡是如何工作的,考虑一个决策树。
决策树是非线性算法,通常具有低偏差和高方差。为了降低方差,你可以剪枝树并设置max_depth超参数(树的最大允许深度)为 10。这将迫使模型更加通用,从而降低方差。然而,这种变化也将迫使模型做出更多假设(因为它现在更加通用)并增加偏差。
洗牌你的训练集
现在你已经了解了方差和数据拆分,你可以对训练数据集的要求进行更深入的了解。你很可能在考试中会遇到关于数据洗牌的问题。这个过程包括在你开始使用训练数据拟合算法之前对其进行随机化。
数据洗牌将帮助算法通过创建一个更具泛化能力的模型来减少方差。例如,假设你的训练数据代表一个二元分类问题,并且它是按照目标变量排序的(所有属于类别“0”的案例首先出现,然后是所有属于类别“1”的案例)。
当你在这些排序后的数据上拟合一个算法(尤其是那些依赖于批量处理的算法)时,它将对某一类别的模式做出强烈的假设,因为很可能它无法创建出能良好代表两类数据的随机批次。一旦算法对训练数据建立了强烈的假设,它可能很难改变这些假设。
重要提示
一些算法能够通过将数据分块拟合来执行训练过程,也称为批次。这种方法让模型能够更频繁地学习,因为它会在处理完每一批次数据后做出部分假设(而不是在处理整个数据集之后做出决策)。
另一方面,没有必要洗牌测试集,因为它将仅用于推理过程以检查模型性能。
建模期望
到目前为止,你已经学习了模型构建、验证和管理。现在,你可以通过学习建模时的其他一些期望来完善机器学习的基础。
第一个原则是简约性。简约性描述的是那些提供最简单解释并且与其他模型相比拟合最佳结果的模型。这里有一个例子:在创建线性回归模型时,你意识到添加 10 个更多特征只会使你的模型性能提高 0.001%。在这种情况下,你应该考虑这种性能提升是否值得简约性的成本(因为你的模型将变得更加复杂)。有时这是值得的,但大多数时候并不值得。你需要保持怀疑态度,并根据你的业务案例进行思考。
简约性直接支持可解释性。你的模型越简单,解释它就越容易。然而,在可解释性和预测性之间存在着一场斗争:如果你专注于预测能力,你很可能会失去一些可解释性。再次强调,你必须选择最适合你用例的最佳情况。
介绍机器学习框架
了解一些机器学习框架将使你在通过 AWS 机器学习专业考试时处于更有利的地位。没有必要掌握这些框架,因为这不是针对特定框架的认证;然而,了解一些常见术语和解决方案将有助于你理解问题/问题的背景。
scikit-learn可能是你应该了解的最流行的机器学习框架。它是一个开源的 Python 包,提供了诸如决策树、支持向量机、线性回归等机器学习算法的实现。它还实现了数据预处理类,例如,独热编码、标签编码器、主成分分析等。本书后面的章节将涵盖所有这些预处理方法(以及许多其他方法)。
scikit-learn 的缺点是需要定制才能通过多台机器进行扩展。还有一个非常流行的机器学习库,因为它可以直接处理多进程:Spark 的 ML 库。
如其名所示,它是一个在Apache Spark上运行的机器学习库,Apache Spark 是一个用于在多台机器上处理数据的统一分析多处理框架。AWS 提供了一种特定服务,允许开发者通过几点击就能创建 Spark 集群,称为EMR。此外,SageMaker(AWS 提供的一个完全托管的机器学习服务,你将在单独的章节中介绍)与 Apache Spark 很好地集成。
Spark ML 库正在不断发展。截至本书编写时,它支持许多机器学习算法类别,如分类和回归、聚类和协同过滤。它还提供了基本统计计算的支持,例如相关性和一些假设检验,以及许多数据转换,如独热编码、主成分分析、最小-最大缩放等。
另一个非常流行的机器学习框架被称为TensorFlow。这个机器学习框架是由谷歌团队创建的,用于数值计算和大规模机器学习模型开发。TensorFlow 不仅实现了传统的机器学习算法,还实现了深度学习模型。
TensorFlow 被认为是一个用于模型开发的低级 API,这意味着开发更复杂的模型,例如transformers(用于文本挖掘),可能会非常复杂。为了便于模型开发,其他机器学习框架被构建在 TensorFlow 之上,使其更容易使用。其中之一的高级框架是Keras。使用 Keras,开发者只需几行代码就能创建复杂的深度学习模型。最近,Keras 被整合到 TensorFlow 中,现在可以在 TensorFlow 库内部调用。
MXNet是另一个开源的深度学习库。使用 MXNet,你可以通过在多台机器上运行多个 GPU 来扩展基于神经网络的模型。它还支持不同的编程语言,如 Python、R、Scala 和 Java。
图形处理单元(GPU)支持在深度学习库如 TensorFlow 和 MXNet 中尤为重要。这些库允许开发者创建和部署具有多个层的神经网络模型。神经网络训练过程很大程度上依赖于矩阵运算,这些运算在 GPU 上比在 CPU 上表现更好。这就是为什么这些深度学习库通常提供 GPU 支持。AWS 还提供启用 GPU 的 EC2 实例。
这些机器学习框架需要一个特殊的通道来与 GPU 单元通信。NVIDIA,目前最常见的 GPU 供应商,创建了一个名为Compute Unified Device Architecture(CUDA)的 API。CUDA 用于配置 NVIDIA 设备上的 GPU 单元;例如,设置缓存内存和训练神经网络模型所需的线程数。对于 AWS 机器学习专业考试,不需要掌握 CUDA 或 GPU 架构,但你确实需要了解它们是什么以及深度学习模型如何利用它们。
最后,但同样重要的是,你还应该了解一些数据科学社区广泛使用的开发框架,但并不一定用于创建机器学习模型。这些框架与机器学习库交互,以促进数据处理和计算。例如:pandas是一个提供数据处理能力的 Python 库,NumPy是一个提供数值计算的开放源代码 Python 库。
这些术语和库已经如此融入数据科学家的日常工作中,以至于它们可能在考试中用来为你解释某个问题领域。了解它们将有助于你快速理解问题的上下文。
云端机器学习
机器学习已经走向云端,开发者现在可以将其作为一项服务使用。AWS 在不同的抽象级别上实现了机器学习服务。例如,机器学习应用服务旨在为特定问题领域提供即插即用的解决方案。AWS Lex是一个机器学习作为服务的非常清晰的例子,人们可以用最少的开发来实现聊天机器人。
AWS Rekognition是另一个例子,旨在识别图像和视频中的对象、人物、文本、场景和活动。AWS 提供许多其他机器学习应用服务,将在本书的下一章中介绍。
除了应用服务之外,AWS 还提供机器学习开发平台,例如SageMaker。与 AWS Lex 和 Rekognition 等现成服务不同,SageMaker 是一个开发平台,它将允许你以更大的灵活性构建、训练和部署自己的模型。
SageMaker 通过自动处理模型训练和推理管道所需的基础设施来加速开发和部署过程。在幕后,SageMaker 协调其他 AWS 服务(如 EC2 实例、负载均衡器、自动扩展等)以创建一个可扩展的机器学习项目环境。SageMaker 可能是你应该掌握的 AWS 机器学习专业考试中最重要的服务之一,它将在单独的部分中详细说明。目前,你应该专注于理解 AWS 提供与机器学习相关的服务所采用的不同方法。
AWS 提供的用于部署机器学习模型的第三种选项是最通用和灵活的:你可以通过组合不同的 AWS 服务并单独管理它们来部署机器学习模型。这本质上就是 SageMaker 为你做的事情,从头开始构建你的应用程序。例如,你可以使用 EC2 实例、负载均衡器、自动扩展和 API 网关来为特定模型创建推理管道。如果你愿意,你也可以使用 AWS 无服务器架构来部署你的解决方案,例如,使用AWS Lambda 函数。
摘要
你现在正走向本章的结尾,其中你学习了关于机器学习基础的一些重要主题。你以关于人工智能、机器学习和深度学习以及这一整个领域在过去几年中由于大数据平台、云提供商和人工智能应用的兴起而不断增长的理论讨论开始本章。
然后你转向监督学习、无监督学习和强化学习之间的区别,强调了与每个相关的一些用例。这可能是 AWS 机器学习专业考试中的一个主题。
你了解到机器学习模型是在许多不同的阶段构建的,算法本身只是建模过程的一部分。你还了解了良好模型预期的行为。
你深入研究了数据拆分,学习了训练和验证模型的不同方法,并意识到了方差和偏差之间的神话之战。你通过了解机器学习框架和服务完成了这一章节。
接下来,你将了解 AWS 机器学习应用服务,例如 Amazon Polly、Amazon Rekognition、Amazon Transcribe 以及许多其他与 AI 相关的 AWS 服务。但在那之前,先看看一些样题,以了解你在考试中可以期待什么。
考试准备练习 – 章节复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的重要技能。这就是为什么在学习的早期阶段就练习这些技能是关键。
章节复习题旨在随着你学习并复习每个章节来逐步提高你的应试技巧,同时复习章节中的关键概念。你可以在每个章节的末尾找到这些题目。
如何访问这些资源
要了解如何访问这些资源,请参阅标题为 第十一章 的章节,访问在线练习资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH01。或者,你可以扫描以下 二维码 (图 1.6):

图 1.6 – 为登录用户打开章节复习题的二维码
- 登录后,你将看到一个类似于 图 1.7 所示的页面:

图 1.7 – 第一章章节复习题
- 准备就绪后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不要担心时间限制。
尝试 1
第一次尝试,目标至少达到 40%。看看你答错的答案,并再次阅读章节中相关的部分,以修复你的学习差距。
尝试 2
第二次尝试,目标至少达到 60%。看看你答错的答案,并再次阅读章节中相关的部分,以修复任何剩余的学习差距。
尝试 3
第三次尝试,目标至少达到 75%。一旦得分达到 75% 或以上,你就可以开始练习时间管理。
小贴士
你可能需要超过 三次 尝试才能达到 75%。没关系。只需复习章节中的相关部分,直到达到目标。
练习时间管理
目标:你的目标是保持分数不变,同时尽可能快地回答这些问题。以下是一个你接下来尝试应该看起来像的例子:
| 尝试 | 得分 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分 30 秒 |
| 尝试 6 | 78% | 18 分 34 秒 |
| 尝试 7 | 76% | 14 分 44 秒 |
表 1.3 – 在线平台上的样本时间练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,为每次尝试设定自己的时间限制。
每次新的尝试,你的得分应保持在75%以上,同时完成所需的时间“应减少”。你可以重复尽可能多的尝试,直到你觉得自己能够自信地应对时间压力。
第二章:AWS 数据存储服务
AWS 提供了一系列服务来安全地存储你的数据。在 AWS 上提供了各种存储选项,例如块存储、文件存储和对象存储。由于硬件投资较高、管理开销和系统升级管理,本地数据存储管理成本较高。使用 AWS 存储服务,你只需为所使用的付费,无需管理硬件。你还将了解 Amazon S3 提供的各种存储类别,以实现数据的智能访问和降低成本。你可以期待在考试中关于存储类别的相关问题。随着你继续阅读本章,你将掌握 Amazon RDS 的单可用区和多可用区实例,以及恢复时间目标(RTO)和恢复点目标(RPO)的概念。
在本章中,你将学习如何在以下几节中安全地存储你的数据,以便进行进一步的分析:
-
在 Amazon S3 上存储数据
-
控制 S3 存储桶和对象的访问
-
保护 Amazon S3 上的数据
-
在静止和传输过程中保护 S3 对象
-
使用其他类型的数据存储
-
关系数据库 服务(RDS)
-
管理 Amazon RDS 中的故障转移
-
自动备份、RDS 快照、恢复和读取副本
-
使用具有多主能力的 Amazon Aurora 进行写入
-
在 Amazon Redshift 上存储列式数据
-
作为服务的 NoSQL 数据库 Amazon DynamoDB
技术要求
本章所需的所有内容只是一个 AWS 账户和配置好的 AWS CLI。配置 AWS CLI 的步骤在 Amazon 这里有详细的解释:docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html。
你可以从 GitHub 下载代码示例,这里:github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter02。
在 Amazon S3 上存储数据
S3 是 Amazon 基于云的对象存储服务,可以通过互联网从任何地方访问。它是大型数据集的理想存储选项。它是基于区域的,因为你的数据存储在特定的区域,直到你将数据移动到不同的区域。你的数据将永远不会离开该区域,直到它被配置为这样做。在特定区域,数据在该区域的可用区中进行复制;这使得 S3 在区域上具有弹性。如果该区域中的任何可用区失败,则其他可用区将处理你的请求。S3 可以通过 AWS 控制台 UI、AWS CLI、AWS API 请求或通过标准 HTTP 方法访问。
S3 有两个主要组件:存储桶和对象。
-
存储桶是在特定的 AWS 区域中创建的。存储桶可以包含对象,但不能包含其他存储桶。
-
对象有两个主要属性。一个是键,另一个是值。值是存储的内容,键是名称。对象的最大大小为 5 TB。根据亚马逊 S3 文档(
docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html),对象还有版本 ID、元数据、访问控制信息和子资源。
重要提示
根据亚马逊的文档,S3 为新的 PUT 操作提供了写后一致性读取,这意味着如果你上传了一个新的对象或者创建了一个新的对象,然后立即尝试使用其键读取该对象,那么你会得到你刚刚上传的确切数据。然而,对于覆盖和删除操作,它以最终一致性的方式表现。这意味着如果你在删除或覆盖操作后立即读取一个对象,那么你可能会读取到旧副本或过时的对象版本。将对象的内容复制到三个可用区需要一些时间。
可以通过使用前缀来逻辑上维护文件夹结构。以一个例子来说明,一个图片被上传到一个名为bucket-name-example的桶中,前缀为folder-name,对象名为my-image.jpg。整个结构看起来是这样的:/bucket-name-example/folder-name/my-image.jpg。
可以使用bucket-name-example的桶名和/folder-name/my-image.jpg的键来读取对象的内容。
亚马逊为存储在 S3 中的对象提供了几种存储类别:
-
标准存储(S3 Standard):这是频繁访问的对象和快速访问的存储类别。S3 标准具有毫秒级的首字节延迟,并且对象可以被公开访问。
-
标准低频访问(S3 Standard-IA):当需要快速返回数据但不是频繁访问时,使用此选项。对象大小必须至少为 128 KB。最小存储时间为 30 天。如果对象在 30 天内被删除,你仍然会被收取 30 天的费用。Standard-IA 对象对可用区的丢失具有弹性。
-
单区低频访问(S3 One Zone-IA):这个存储类别的对象只存储在一个可用区,这使得它比Standard-IA更便宜。最小对象大小和存储时间与 Standard-IA 相同。这个存储类别的对象可用性和弹性较低。当你有另一个副本,或者数据可以被重新创建时,使用这个存储类别。应该为长期存储的非关键且可替换的数据使用One Zone-IA存储类别,并且访问频率较低。
-
Amazon S3 Glacier Flexible Retrieval(之前称为 S3 Glacier):此选项用于长期存档和备份。在此存储类别中检索对象可能需要从几分钟到几小时不等。最小存储时间为 90 天。对于不需要立即访问但需要能够检索大量数据集而不产生额外费用的存档数据,例如在备份或灾难恢复场景中,S3 Glacier Flexible Retrieval(之前称为 S3 Glacier)是完美的存储选项。
-
Amazon S3 Glacier Instant Retrieval:此存储类别为不常访问的长期数据提供经济高效、高速的存储。与 S3 Standard-Infrequent Access 相比,如果数据每季度访问一次,可以降低高达 68%的存储费用。此存储类别非常适合快速检索存档数据,如医学图像、新闻媒体资产或用户生成内容存档。您可以直接上传数据或使用 S3 生命周期策略将其从其他 S3 存储类别移动过来。
-
Glacier Deep Archive:此类别的最小存储时间为 180 天。这是最经济的存储类别,默认检索时间为 12 小时。
-
S3 Intelligent-Tiering:此存储类别旨在降低运营成本。用户支付监控费用,AWS 根据对象的访问模式在 Standard(频繁访问层)和 Standard-IA(成本较低、不频繁访问层)之间选择存储类别。此选项适用于具有未知或不可预测访问模式的长期数据。
通过一系列规则,可以轻松管理存储类别之间的转换和对象的删除,这些规则被称为S3 生命周期配置。这些规则包括操作。这些操作可以应用于一个存储桶或该存储桶中由前缀或标签定义的一组对象。操作可以是转换操作或过期操作。转换操作定义了在创建用户定义的天数后对象的存储类别转换。过期操作配置了版本化对象的删除,或删除标记或未完成的分片上传。这对于管理成本非常有用。
在图 2.1中给出了说明。更多详细信息请见:docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html。

图 2.1 – S3 存储类别的比较表
创建存储桶以存储数据
现在,您将了解如何使用 AWS CLI 创建存储桶、上传对象以及读取对象:
-
在第一步,检查你是否已经使用
aws s3 ls命令创建了任何存储桶:$ pwd/Users/baba/AWS-Certified-Machine-Learning-Specialty-2020-Certification-Guide/Chapter-5/s3demo/demo-files$ aws s3 ls -
此命令在此处不返回任何内容。因此,现在请使用
mb参数创建一个存储桶。假设存储桶名称为demo-bucket-baba,位于us-east-1区域:$ aws s3 mb s3://demo-bucket-baba --region us-east-1make_bucket: demo-bucket-baba$ aws s3 ls2020-11-04 14:39:50 demo-bucket-baba -
由于您已经创建了一个存储桶,您的下一步是使用
cp参数将文件复制到您的存储桶中,如下面的代码所示:$ aws s3 cp sample-file.txt s3://demo-bucket-baba/upload: ./sample-file.txt to s3://demo-bucket-baba/sample-file.txt -
要通过 AWS 控制台验证文件上传操作,请登录您的 AWS 账户并转到 AWS S3 控制台查看相同的内容。AWS S3 控制台将结果列示为 图 2.2。请注意,当您阅读这本书时,控制台可能已经发生了变化!

图 2.2 – AWS S3 列出您的文件
您也可以从命令行列出您的 S3 存储桶中的文件,如下所示:
$ aws s3 ls s3://demo-bucket-baba/
2020-11-04 14:50:02 99 sample-file.txt
-
如果您想将您的文件系统目录和文件上传到 S3 存储桶,那么
--recursive参数将为您完成工作:$ aws s3 cp . s3://demo-bucket-baba/ --recursiveupload: folder-1/a.txt to s3://demo-bucket-baba/folder-1/a.txtupload: folder-2/sample-image.jpg to s3://demo-bucket-baba/folder-2/sample-image.jpgupload: ./sample-file.txt to s3://demo-bucket-baba/sample-file.txt$ aws s3 ls s3://demo-bucket-baba/ -
一个存储桶的内容可以通过
cp命令和--recursive参数复制/移动到另一个存储桶。要实现这一点,您必须创建两个存储桶,demo-bucket-baba-copied和demo-bucket-baba-moved。步骤如下:$ aws s3 mb s3://demo-bucket-baba-copied --region us-east-2$ aws s3 mb s3://demo-bucket-baba-moved --region us-east-2$ aws s3 cp s3://demo-bucket-baba s3://demo-bucket-baba-copied/ --recursive$ aws s3 mv s3://demo-bucket-baba s3://demo-bucket-baba-moved/ --recursive$ aws s3 ls2020-11-04 14:39:50 demo-bucket-baba2020-11-04 15:44:28 demo-bucket-baba-copied2020-11-04 15:44:37 demo-bucket-baba-moved$ aws s3 ls s3://demo-bucket-baba/如果所有命令都成功运行,那么原始存储桶最终应该是空的(因为所有文件现在都已移动)。
注意
在认证考试中,您不会在存储桶和对象级别操作中找到很多问题。然而,了解基本操作和所需步骤总是更好的。
-
一旦实际操作完成,必须删除存储桶以避免费用。在运行
rb命令之前,存储桶必须为空:$ aws s3 rb s3://demo-bucket-baba$ aws s3 rb s3://demo-bucket-baba-movedremove_bucket failed: s3://demo-bucket-baba-moved An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty -
demo-bucket-baba-moved存储桶不为空,因此您无法删除该存储桶。在这种情况下,请使用--force参数删除整个存储桶及其所有内容,如下所示:rm command with the --recursive parameter. -
让我们以一个具有前缀
images的存储桶test-bucket为例。此前缀包含四个名为animal.jpg、draw-house.jpg、cat.jpg和human.jpg的图片文件。 -
现在,要删除图片内的内容,命令如下:
aws s3 rms3://test-bucket/images –recursive -
现在存储桶应该是空的。
在下一节中,您将学习关于对象标签和对象元数据的内容。
区分对象标签和对象元数据
让我们比较这两个术语:
-
对象标签:对象标签是一个 键值对。AWS S3 对象标签可以帮助您过滤分析指标,对存储进行分类,根据某些分类对对象进行安全保护,根据对象的某些分类跟踪成本,以及更多。对象标签可以用来创建生命周期规则,将对象移动到更便宜的存储层。您可以为对象添加最多 10 个标签,为存储桶添加最多 50 个标签。标签键可以包含 128 个 Unicode 字符,而标签值可以包含 256 个 Unicode 字符。
-
对象元数据:对象元数据是描述对象的描述性数据。它由名称-值对组成。对象元数据作为对象的 HTTP 头返回。它们有两种类型:一种是系统元数据,另一种是用户定义元数据。用户定义元数据是用户添加到对象中的自定义名称-值对。名称必须以x-amz-meta开头。您可以更改对象上的所有系统元数据,如存储类、版本控制和加密属性。更多详细信息请参阅此处:
docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html。
重要提示
元数据名称不区分大小写,而标签名称区分大小写。
在下一节中,您将学习如何通过不同的策略来控制 Amazon S3 中存储桶和对象的访问,包括资源策略和身份策略。
控制对 Amazon S3 中存储桶和对象的访问
一旦对象存储在存储桶中,下一步重要的步骤就是管理访问。S3 默认是私有的,并且通过多种方法向其他用户、组或资源提供访问权限。这意味着可以通过访问控制列表(ACLs)、公共访问设置、身份策略和存储桶策略来管理对象的访问权限。
让我们详细看看其中的一些。
S3 存储桶策略
Principal被渲染为*:
{
"Version":"2012-10-17"
"Statement":[
{
"Sid":"AnyoneCanRead",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::my-bucket/*"]
}
]
}
默认情况下,S3 中的所有内容对所有者都是私有的。如果您想将前缀公开给全世界,那么Resource将变为arn:aws:s3:::my-bucket/some-prefix/*,同样地,如果它是为特定的 IAM 用户或 IAM 组设计的,那么这些详细信息将包含在策略的主体部分。
您还可以在存储桶策略中添加条件。让我们考察一个组织希望保持存储桶公开并白名单特定 IP 地址的用例。该策略可能看起来像这样:
{
"Version":"2012-10-17"
"Statement":[
{
"Sid":"ParticularIPRead",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::my-bucket/*"],
"Condition":{
"NotIpAddress":{"aws:SourceIp":"2.3.3.6/32"}
}
}
]
}
更多示例可以在 AWS S3 开发者指南中找到,该指南可在此处找到:docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html。
阻止公共访问是分配给存储桶所有者的一个独立设置,以避免在存储桶策略中犯任何错误。在现实场景中,存储桶可能会由于策略错误而公开;为了避免此类错误或数据泄露,AWS 提供了这个设置。它提供了比存储桶策略更高的安全级别。您可以在创建存储桶时选择此设置,也可以在创建存储桶后设置。
us-east-1在此示例中):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "rds:*",
"Resource": ["arn:aws:rds:us-east-1:*:*"]
},
{
"Effect": "Allow",
"Action": ["rds:Describe*"],
"Resource": ["*"]
}
]
}
ACLs用于授予高级权限,通常用于授予对其他 AWS 账户的访问权限。ACLs 是存储桶或对象的子资源之一。可以通过 ACLs 快速使存储桶或对象公开。AWS 不建议这样做,您也不应该期望在测试中遇到关于此的问题。了解这一点是好的,但它不如S3 存储桶策略灵活。
现在,让我们在下一节中了解保护我们数据的方法。
保护 Amazon S3 上的数据
在本节中,您将学习如何记录对象的每个版本。除了耐用性之外,Amazon 还提供了几种技术来保护 S3 中的数据。其中一些技术涉及启用版本控制和加密对象。
版本控制可以帮助您在更新、删除或 put 操作期间,如果当前对象出现问题,回滚到之前的版本。
通过加密,您可以控制对象的访问。您需要适当的密钥来读取和写入对象。您还将学习用于删除操作的多因素认证(MFA)。Amazon 还允许跨区域复制(CRR),在另一个区域中维护对象的副本,这可以在任何灾难期间用于数据备份,以提供额外的冗余,或者用于提高不同区域的数据访问速度。
应用存储桶版本控制
让我们现在通过一些实际示例了解如何使用帮助启用存储桶版本控制。在创建存储桶时,可以从 AWS S3 控制台应用存储桶版本控制:
-
要从命令行启用存储桶的版本控制,首先必须创建一个存储桶,然后才能启用版本控制,如下面的示例所示。在这个示例中,我创建了一个名为
version-demo-mlpractice的存储桶,并通过put-bucket-versioning命令启用了版本控制:$ aws s3 mb s3://version-demo-mlpractice/$ aws s3api put-bucket-versioning --bucket version-demo-mlpractice --versioning-configuration Status=Enabled$ aws s3api get-bucket-versioning --bucket version-demo-mlpractice{"Status": "Enabled"} -
您没有为此存储桶创建任何类型的加密。因此,如果您运行aws s3api get-bucket-encryption --bucket version-demo-mlpractice,那么它将输出一个错误,说明如下:
The server side encryption configuration was not found -
put-bucket-encryptionAPI。命令看起来像这样:$ aws s3api put-bucket-encryption --bucket version-demo-mlpractice --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}' -
这可以通过以下命令进行验证:
aws s3api get-bucket-encryption --bucket version-demo-mlpractice。
你将在下一节中了解更多关于加密的内容。
应用存储桶加密
您还需要了解如何启用存储桶的版本控制会有什么帮助。有一些用例中,文件会定期更新,并为同一文件创建版本。为了模拟这种场景,请尝试以下示例:
-
在本例中,您将创建一个包含版本信息的文件。您将覆盖它并检索它以检查该文件中的版本:
$ echo "Version-1">version-doc.txt$ aws s3 cp version-doc.txt s3://version-demo-mlpractice$ aws s3 cp s3://version-demo-mlpractice/version-doc.txtcheck.txt$ cat check.txtVersion-1$ echo "Version-2">version-doc.txt$ aws s3 cp version-doc.txt s3://version-demo-mlpractice$ aws s3 cp s3://version-demo-mlpractice/version-doc.txtcheck.txt$ cat check.txtVersion-2 -
在检索时,您将获得文件的最新版本,换句话说,在本例中是
Version-2。要检查每个版本及其最新版本,S3 提供了list-object-versionsAPI,如下所示。从 JSON 结果中,您可以推断出最新版本:{"Versions": [{"ETag":"\"b6690f56ca22c410a2782512d24cdc97\"","Size": 10,"StorageClass": "STANDARD","Key": "version-doc.txt","VersionId":"70wbLG6BMBEQhCXmwsriDgQoXafFmgGi","IsLatest": true,"LastModified": "2020-11-07T15:57:05+00:00","Owner": {"DisplayName": "baba","ID": "XXXXXXXXXXXX"}},{"ETag": "\"5022e6af0dd3d2ea70920438271b21a2\"","Size": 10,"StorageClass": "STANDARD","Key": "version-doc.txt","VersionId": "f1iC.9L.MsP00tIb.sUMnfOEae240sIW","IsLatest": false,"LastModified": "2020-11-07T15:56:27+00:00","Owner": {"DisplayName": "baba","ID": " XXXXXXXXXXXX"}}]} -
可能会有这样的情况,您需要回滚到当前对象的早期版本。在上面的示例中,最新的一个是
Version-2.您可以通过将VersionId子资源解析到get-objectAPI 调用中并重新上传该对象,将任何所需的版本设置为最新或当前版本。另一种方法是,通过在delete-objectAPI 请求中将versionId传递给–version-id参数来删除当前或最新版本。有关 API 的更多详细信息,请参阅此处:docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html。 -
当您在启用了版本控制的存储桶中删除对象时,并不会从存储桶中删除该对象。它只是创建了一个名为
DeleteMarker的标记。它看起来像这样:{"DeleteMarker": true,"VersionId": "BKv_Cxixtm7V48MWqBO_KUkKbcOaH5JP"} -
这意味着对象没有被删除。您可以使用此命令列出它:
aws s3api list-object-versions --bucket version-demo-mlpractice -
现在存储桶中没有名为
version-doc.txt的对象,您可以使用aws s3 ls命令来验证这一点,因为该标记已成为具有新 ID 的对象的当前版本。如果您尝试检索已删除的对象,这意味着删除标记正在提供对象的当前版本,那么您将获得一个VersionId,如下面的示例命令所示。一个简单的删除请求{"DeleteMarker": true,"VersionId": "BKv_Cxixtm7V48MWqBO_KUkKbcOaH5JP"} -
现在列出存储桶时,可以看到较旧的对象:
$ aws s3 ls s3://version-demo-mlpractice/2020-11-07 15:57:05 10 version-doc.txt由于您已经涵盖了考试主题并练习了大多数所需的概念,您应该删除存储桶中的对象,然后删除存储桶以节省成本。这一步删除了对象的版本,从而永久删除了对象。
-
在这里,通过给出版本 ID 来删除最新版本,然后是另一个版本 ID:
$ aws s3api delete-object --bucket version-demo-mlpractice --key version-doc.txt --version-id 70wbLG6BMBEQhCXmwsriDgQoXafFmgGi$ aws s3api delete-object --bucket version-demo-mlpractice --key version-doc.txt --version-id f1iC.9L.MsP00tIb.sUMnfOEae240sIW$ aws s3api list-object-versions --bucket version-demo-mlpractice您现在可以清楚地看到空存储桶。
重要提示
AWS 最佳实践建议通过多因素认证删除添加另一层保护。可以防止意外删除存储桶,并确保存储桶中对象的安全性。可以通过控制台和 CLI 启用或禁用多因素认证删除。如 AWS 文档所述,多因素认证删除需要两种认证方式同时进行:您的安全凭证,以及一个有效序列号、一个空格和显示在批准的认证设备上的六位数字代码的组合。
CRR 可以帮助您在不同地理区域之间分离数据。一个典型的用例是在灾难期间维护常规业务活动。如果一个区域关闭,那么如果启用了 CRR,另一个区域可以支持用户。这提高了数据可用性。另一个用例是如果相同的数据被另一个计算资源使用,例如在另一个区域启动的 EC2 或 AWS Lambda,可以减少延迟。您还可以使用 CRR 将对象复制到属于不同所有者的另一个 AWS 账户。对于认证考试,以下是一些重要要点值得记录:
-
为了使用 CRR,必须在源和目标存储桶上启用版本控制。
-
通过添加规则,可以在源存储桶上启用复制。作为源,可以是整个存储桶、前缀或标签进行复制。
-
通过分配适当的加密密钥,也可以通过复制加密对象。
-
目标存储桶可以位于同一账户或另一个账户中。你可以更改目标存储桶中对象的存储类型和所有权。
-
对于 CRR,可以选择现有的角色,也可以创建新的 IAM 角色。
-
源存储桶上可以有多个复制规则,并赋予其优先级。优先级较高的规则会覆盖优先级较低的规则。
-
当你添加复制规则时,只有规则启用后创建的新版本对象才会被复制。
-
如果从源存储桶中删除了版本,则它们不会被从目标存储桶中删除。
-
当你从源存储桶中删除对象时,会在该源存储桶中创建一个删除标记。S3 不会将此删除标记复制到目标存储桶。
在下一节中,你将了解保护 S3 对象的概念。
保护静止和传输中的 S3 对象
在上一节中,你学习了存储桶默认加密的概念,这与对象级加密完全不同。存储桶没有被加密,而对象被加密。这里可能会出现一个问题:默认存储桶加密是什么? 你将在本节中学习这些概念。在传输数据时,可以使用 安全套接字层 (SSL) 或 传输层安全性 (TLS) 来保护 HTTPS 请求的传输。下一步是保护数据,授权人员可以编码和解码数据。
在同一个存储桶中,可以为不同的对象设置不同的加密设置。S3 支持对静止对象使用 客户端加密 (CSE) 和 服务器端加密 (SSE):
-
CSE:客户端通过 S3 端点将对象上传到 S3。在 CSE 中,数据在上传到 S3 之前由客户端加密。尽管用户和 S3 端点之间的传输发生在加密通道中,但通道中的数据已经被客户端加密,无法被看到。在传输过程中,默认通过 HTTPS 进行加密。因此,AWS S3 存储加密对象,在任何时候都无法以任何格式读取数据。在 CSE 中,客户端负责加密对象的内容。因此,密钥管理和加密解密过程始终由客户端控制。这导致大量的 CPU 使用。S3 仅用于存储。
-
SSE:客户端通过 S3 端点将对象上传到 S3。尽管传输中的数据通过使用 HTTPS 的加密通道,但对象本身在通道内并未加密。一旦数据到达 S3,S3 服务就会对其进行加密。在 SSE 中,你信任 S3 执行加密解密、对象存储和密钥管理。S3 对象有三种 SSE 技术可供选择:
-
SSE-C
-
SSE-S3
-
SSE-KMS
-
-
PUT操作,用户必须向 S3 提供一个密钥和一个对象。S3 使用提供的密钥加密对象,并将哈希(加密文本)附加到对象上。一旦对象存储完毕,S3 就会丢弃加密密钥。这个生成的哈希是一次的,不能用来生成新的密钥。当用户提供带有解密密钥的GET操作请求时,哈希可以识别是否使用了特定的密钥进行加密。然后,S3 解密并丢弃密钥。 -
PUT操作,用户只需提供未加密的对象。S3 创建一个用于加密过程的主密钥。由于这个主密钥在创建后,内部轮换并由 S3 从头到尾管理,因此没有人可以更改它。这是对象的唯一密钥。它默认使用 AES-256 算法。 -
使用存储在 AWS 密钥管理服务(SSE-KMS)中的客户主密钥(SSE-KMS)的 SSE:AWS 密钥管理服务(KMS)管理客户主密钥(CMK)。AWS S3 与 AWS KMS 协作并生成一个 AWS 管理的 CMK。这是 SSE-KMS 使用的默认主密钥。每次上传对象时,S3 都会使用一个专用的密钥来加密该对象,而这个密钥是一个数据加密密钥(DEK)。DEK 由 KMS 使用 CMK 生成。S3 提供了 DEK 的明文版本和加密版本。DEK 的明文版本用于加密对象然后丢弃。DEK 的加密版本与加密对象一起存储。当你使用 SSE-KMS 时,不需要使用 S3 创建的默认 CMK。你可以创建并使用客户管理的 CMK,这意味着你可以控制其上的权限以及密钥材料的轮换。因此,如果你的组织有一个关注密钥轮换或加密用户与解密用户之间角色分离的监管委员会,那么 SSE-KMS 就是解决方案。在 SSE-KMS 上还可以进行日志记录和审计,以跟踪针对密钥的 API 调用。
-
PUT操作)。
在下一节中,你将了解一些与 EC2 实例一起使用的数据库。
使用其他类型的数据存储
弹性块存储 (EBS) 用于在可用区中创建卷。卷只能附加到同一可用区中的 EC2 实例。Amazon EBS 提供了 固态硬盘 (SSD) 和 硬盘驱动器 (HDD) 类型的卷。对于基于 SSD 的卷,主导的性能属性是 每秒输入输出 (IOPS),而对于 HDD 是吞吐量,通常以 MiB/s 来衡量。您可以根据需求选择不同的卷类型,例如通用型 SSD (gp2)、预配置 IOPS SSD (io1) 或吞吐量优化 HDD (st1)。预配置 IOPS 卷通常用于高性能工作负载,如深度学习训练,其中低延迟和高吞吐量至关重要。表 2.1 提供了不同卷和类型的概述:
| 卷类型 | 用例 |
|---|---|
| 通用型 SSD (gp2) | 适用于在价格和性能之间保持平衡。适用于大多数工作负载、系统启动卷、开发和测试环境 |
| 预配置 IOPS SSD (io2, io1) | 适用于关键任务、高吞吐量或低延迟的工作负载。例如,I/O 密集型数据库工作负载,如 MongoDB、Cassandra、Oracle |
| 吞吐量优化 HDD (st1) | 适用于频繁访问、吞吐量密集型的工作负载。例如,大数据处理、数据仓库、日志处理 |
| 冷 HDD (sc1) | 适用于访问频率较低的工作负载 |
表 2.1 – 不同的卷及其用例
EBS 设计为在 可用区 (AZ) 内具有弹性。如果由于某种原因,一个 AZ 失败,那么卷将无法访问。为了防止此类情况,可以从 EBS 卷创建 快照,并且它们存储在 S3 中。一旦快照到达 S3,快照中的数据就具有区域弹性。第一个快照是卷上数据的完整副本,从那时起,快照是增量式的。快照可以用来克隆卷。由于快照存储在 S3 中,因此可以在该区域的任何 AZ 中克隆卷。快照可以在区域之间共享,并且可以在灾难恢复期间从它们克隆卷。即使在 EC2 实例停止/终止后,EBS 卷也可以通过从备份快照的简单恢复过程保留数据。
可以通过 EBS 多附加 将多个 EC2 实例附加,以实现并发 EBS 卷访问。如果用例需要多个实例同时访问训练数据集(分布式训练场景),那么 EBS 多附加将提供具有改进性能和可伸缩性的解决方案。
AWS KMS 管理 CMK。AWS KMS 可以使用 AWS 管理的 CMK 来管理 EBS,或者 AWS KMS 可以使用客户管理的 CMK。当创建加密卷时,EBS 会使用 CMK。CMK 用于创建加密的 DEK,该 DEK 与卷一起存储在物理磁盘上。此 DEK 只能通过 KMS 解密,前提是该实体有权解密。当从加密卷创建快照时,快照会使用相同的 DEK 进行加密。从该快照创建的任何卷也将使用该 DEK。
实例存储卷是物理连接到 EC2 实例的块存储设备。由于实例附加的临时存储来自实例启动的主机,因此它们提供最高性能。EBS 可以在任何时间附加到实例,但实例存储必须在实例启动时附加;一旦实例启动,就不能再附加。如果 EC2 实例的底层主机存在问题,则相同的实例将在另一个主机上启动,并带有新的实例存储卷,之前的实例存储(临时存储)和旧数据将丢失。附加卷的大小和能力取决于实例类型,更详细的信息请在此处查看:aws.amazon.com/ec2/instance-types/。
弹性文件系统(EFS)提供了一种基于网络的文件系统,可以在 Linux EC2 实例内部挂载,并且可以一次由多个实例使用。它是NFSv4的实现。它可以用于通用模式、最大 I/O 性能模式(用于科学分析或并行计算)、突发模式和预配吞吐量模式。这使得它在多个实例需要在大数据集上训练或共享模型工件的情况下非常理想。使用 EFS,您可以集中存储训练数据集、预训练模型和其他数据,确保一致性并减少数据重复。此外,EFS 提供高吞吐量和低延迟访问,使训练和推理过程中的数据访问效率更高。通过利用 EFS 与 SageMaker 结合,机器学习开发者可以无缝扩展其工作负载,有效协作,并加速模型开发和训练。
如你所知,在实例存储的情况下,数据是易变的。一旦实例丢失,数据就会从实例存储中丢失。EFS 的情况并非如此。EFS 与 EC2 实例存储是分开的。EFS 是一个文件存储,通过 VPC 内部的挂载目标被多个 EC2 实例访问。本地系统可以通过混合网络访问 EFS 存储,例如VPN或直接连接。EFS 还支持两种存储类别:标准存储和频繁访问存储。标准存储用于频繁访问的数据。频繁访问存储是长期存储、不频繁访问数据的成本效益存储类别。生命周期策略可用于在存储类别之间转换数据。EFS 提供按使用付费的定价模式,您只需为使用的存储容量付费。它消除了为每个实例配置和管理单独存储卷的需求,从而降低了存储成本并简化了机器学习工作负载的存储管理。
重要注意事项
当最大 I/O 需求且数据可替换且临时时,实例存储是首选。
关系型数据库服务(RDS)
这是 AWS 考试中最常见的主题之一。您应该在考试前具备足够的知识。在本节中,您将了解亚马逊的 RDS。
AWS 为用户提供了几种关系型数据库作为服务。用户也可以在 EC2 实例上运行他们想要的数据库。最大的缺点是实例在一个区域的可用区中仅可用。EC2 实例必须被管理和监控以避免任何类型的故障。需要自定义脚本来维护数据备份。任何数据库主版本或次版本更新都会导致停机。在 EC2 实例上运行的数据库实例在数据库负载增加时无法轻松扩展,因为复制不是一项容易的任务。
RDS 提供可管理的数据库实例,这些实例可以包含一个或多个数据库。想象一下,在一个 EC2 实例上运行的数据库服务器,你不需要管理或维护它。你只需要访问服务器并在其中创建数据库。AWS 将管理其他一切,例如实例的安全性、实例上运行的操作系统、数据库版本和数据库服务器的高可用性。RDS 支持多种引擎,如 MySQL、Microsoft SQL Server、MariaDB、Amazon Aurora、Oracle 和 PostgreSQL。你可以根据自己的需求选择这些中的任何一种。
Amazon RDS 的基础是一个数据库实例,它可以支持多个引擎,并且用户可以创建多个数据库。只能通过使用主实例的数据库 DNS 端点(CNAME,它是域名系统数据库中规范名称的别名)来访问一个数据库实例。RDS 使用标准数据库引擎。因此,使用某种工具在自管理数据库服务器上访问数据库与访问 Amazon RDS 相同。
既然您已经了解了 Amazon RDS 的需求,让我们了解 Amazon RDS 中的故障转移过程。您将了解如果 RDS 实例出现问题,Amazon 提供哪些服务。
在 Amazon RDS 中管理故障转移
RDS 实例可以是 Single-AZ 或 Multi-AZ。在 Multi-AZ 中,多个实例协同工作,类似于主动-被动故障转移设计。
对于 Single-AZ RDS 实例,可以为该实例分配存储空间。简而言之,Single-AZ RDS 实例在同一可用区中有一个附加的块存储(EBS 存储)可用。这使得 RDS 实例的数据库和存储容易受到可用区故障的影响。分配给块存储的存储可以是 SSD(gp2 或 io1)或磁性存储。为了确保 RDS 实例的安全,建议使用安全组并根据需求提供访问权限。
Multi-AZ 总是设计架构以防止故障并保持应用程序高度可用的最佳方式。使用 Multi-AZ 功能,一个备用副本会与主实例同步。备用实例在其分配的可用区中有自己的存储。备用副本不能直接访问,因为所有 RDS 访问都是通过单个数据库 DNS 端点(CNAME)。除非发生故障转移,否则无法访问备用实例。备用实例不提供性能优势,但它确实在 RDS 实例的可用性方面构成了一种改进。它只能在同一区域发生,或者在 VPC 内同一区域的另一个可用区的子网中。当 Multi-AZ RDS 实例在线时,您可以从备用副本中备份,而不会影响性能。在 Single-AZ 实例中,备份操作期间可能会出现可用性和性能问题。
要了解 Multi-AZ 的工作原理,让我们以一个 Single-AZ 实例为例,并将其扩展到 Multi-AZ。
假设您有一个在名为 db-vpc 的 VPC 内的 us-east-1 区域的可用区 AZ-A 中运行的 RDS 实例。这成为了一个 RDS 实例单可用区设计的主体实例。在这种情况下,将在 AZ-A 可用区为该实例分配存储。一旦您选择在另一个名为 AZ-B 的可用区中进行多可用区部署,AWS 将在 db-vpc VPC 内的 us-east-1 区域的 AZ-B 可用区创建一个备用实例,并在 us-east-1 区域的 AZ-B 为备用实例分配存储。除此之外,RDS 还将从主体实例到备用副本启用 同步复制。如您之前所学的,访问我们的 RDS 实例的唯一方式是通过数据库 CNAME,因此,访问请求会发送到 RDS 主体实例。一旦写入请求到达端点,它就会写入主体实例。然后它将数据写入硬件,这是附加到主体实例的块存储。同时,主体实例将相同的数据复制到备用实例。最后,备用实例将数据提交到其块存储。
主体实例将数据写入硬件,并并行地将数据复制到备用实例,因此在它们各自的硬件中的数据提交操作之间有最小的时间延迟(几乎为零)。如果主体实例发生错误,那么 RDS 会检测到这一点,并将数据库端点更改为备用实例。访问数据库的客户端可能会经历非常短暂的中断。这种故障转移在 60-120 秒内发生。它不提供容错系统,因为在故障转移操作期间会有一些影响。
您现在应该已经理解了 Amazon RDS 的故障转移管理。现在让我们学习如何进行自动 RDS 备份,以及在发生故障时使用快照进行恢复,以及在下节中学习读取副本。
进行自动备份、RDS 快照、恢复和读取副本
在本节中,您将了解 RDS 的 自动备份 和 手动快照 如何工作。这些功能是 Amazon RDS 的一部分。
让我们考虑一个每天早上 5 点进行备份的数据库。如果应用程序在上午 11 点失败,那么可以从上午 11 点的备份中重新启动应用程序,但会丢失 6 小时的数据。这被称为 6 小时的 恢复点目标 (RPO)。RPO 定义为最近一次备份和事件之间的时间,这决定了数据丢失的数量。如果您想减少这个时间,那么您必须安排更多的增量备份,这会增加成本和备份频率。如果您的业务需要更低的 RPO 值,那么业务必须投入更多资金来提供必要的技术解决方案。
现在,根据我们的示例,一位工程师被分配了在灾难发生时尽快恢复系统的任务。工程师通过向现有系统添加一些额外的硬件组件并安装一些更新的软件版本,在当天下午 2 点成功将数据库上线。这被称为 3 小时的恢复时间目标(RTO)。RTO 是灾难恢复和完全恢复之间的时间。通过拥有备用硬件和记录恢复过程,可以降低 RTO 值。如果业务需求较低的 RTO 值,那么您的业务必须在备用硬件和有效的系统设置上投入更多资金以执行恢复过程。
在 RDS 中,RPO(恢复点目标)和 RTO(恢复时间目标)在自动备份和手动快照的选择中起着重要作用。这两种备份服务都使用 AWS 管理的 S3 存储桶,这意味着它们在用户的 AWS S3 控制台中不可见。它们具有区域弹性,因为备份被复制到 AWS 区域内的多个可用区。对于单 AZ RDS 实例,备份是从单个可用的数据存储进行的,而对于已启用多 AZ 的 RDS 实例,备份是从备用数据存储进行的(主存储在备份方面保持不变)。
对于 RDS 实例,快照是手动的,并且存储在 AWS 管理的 S3 存储桶中。RDS 实例的第一个快照是数据的完整副本,后续的快照是增量副本,反映了数据的变化。在快照过程所需的时间方面,第一个快照较高,从那时起,增量备份更快。当发生任何快照时,它可能会影响单 AZ RDS 实例的性能,但不会影响多 AZ RDS 实例的性能,因为这是在备用数据存储上发生的。手动快照不会过期,需要自动清除,并且会超过 RDS 实例的终止。当您删除 RDS 实例时,它会建议为您创建一个最后的快照,并将包含您 RDS 实例中的所有数据库(RDS 实例中不仅仅只有一个数据库)。当您从手动快照恢复时,您将恢复到某个特定的时间点,这会影响 RPO。
要自动化整个流程,你可以选择一个时间窗口来捕捉这些快照。这被称为自动备份。这些时间窗口可以精心管理,从而本质上降低业务的 RPO(恢复点目标)值。自动备份的保留期为 0 到 35 天,0 表示禁用,最大为 35 天。根据 AWS 文档,保留的自动备份包含数据库实例的系统快照和事务日志。它们还包括数据库实例属性,如分配的存储和数据库实例类别,这些是将其恢复为活动实例所必需的。数据库生成事务日志,这些日志包含特定数据库中的实际数据变化。这些事务日志每 5 分钟由 RDS 写入 S3。事务日志也可以在快照之上重新播放,以恢复到 5 分钟粒度的时间点。理论上,RPO 可以是一个 5 分钟的时间点。
当你执行恢复操作时,RDS 会创建一个新的 RDS 实例,这意味着一个新的数据库端点来访问该实例。使用这些实例的应用程序必须指向新的地址,这会显著影响 RTO。这意味着恢复过程并不非常快,这会影响 RTO。为了在故障期间最小化 RTO,你可能考虑复制数据。使用副本,复制损坏数据的高概率很高。克服这一点的唯一方法是拥有快照,并在损坏之前将 RDS 实例恢复到特定的时间点。Amazon RDS 读取副本与多 AZ 副本不同。在多 AZ RDS 实例中,备用副本除非主实例故障,否则不能直接用于任何操作,而读取副本可以直接使用,但仅限于读取操作。读取副本有自己的数据库端点,读取密集型应用程序可以直接指向这个地址。它们与主实例异步保持同步。读取副本可以在与主实例相同的区域或不同区域创建。其他区域的读取副本称为跨区域读取副本,这提高了应用程序的全球性能。
根据 AWS 文档,每个数据库实例允许有五个直接读取副本,这有助于扩展读取性能。由于异步复制,读取副本具有非常低的 RPO 值。在主实例故障的情况下,它们可以被提升为读写数据库实例。这可以快速完成,并且提供了相当低的 RTO(恢复时间目标)值。
在下一节中,你将了解 Amazon 的数据库引擎,Amazon Aurora。
使用具有多主能力的 Amazon Aurora 进行写入
Amazon Aurora 是亚马逊开发的最可靠的数据库引擎,以简单且经济高效的方式提供速度。Aurora 使用单个主实例和零个或多个副本的集群。Aurora 的副本可以为您提供 RDS 中读取副本和多区域实例的优势。Aurora 使用共享集群卷进行存储,可供集群中所有计算实例(最多 64 TiB)使用。这允许 Aurora 集群更快地提供资源,并提高可用性和性能。Aurora 使用基于 SSD 的存储,提供高 IOPS 和低延迟。Aurora 不会要求您分配存储,与其他 RDS 实例不同;它是基于您使用的存储。
Aurora 集群具有多个端点,包括 集群端点 和 读取端点。如果没有副本,则集群端点与读取端点相同。如果有可用的副本,则读取端点在读取端点之间进行负载均衡。集群端点用于读取/写入,而读取端点旨在从集群中读取。如果您添加更多副本,则 AWS 在幕后为新副本管理负载均衡。
当发生故障转移时,副本被提升到读取/写入模式,这需要一些时间。这可以在 Aurora 集群的 多主 模式下防止。这允许多个实例同时执行读取和写入操作。
在 Amazon Redshift 上存储列式数据
Amazon Redshift 不用于实时事务,但用于数据仓库目的。它设计用于支持以拍字节规模的大量数据。它是一个基于列的数据库,用于分析、长期处理、维护和聚合。Redshift Spectrum 可以用于查询 S3 上的数据,而无需将数据加载到 Redshift 集群中(尽管需要 Redshift 集群)。它不是 OLTP,而是 OLAP。AWS QuickSight 可以与 Redshift 集成以进行可视化,具有类似 SQL 的界面,允许您使用 JDBC/ODBC 连接连接以查询数据。
Redshift 在 VPC 中的一个 AZ 中使用集群架构,节点之间具有更快的网络连接。它不是设计为高可用性,因为它与 AZ 紧密耦合。Redshift 集群有一个主节点,该节点负责客户端与集群计算节点之间的所有通信、查询规划和聚合。计算节点负责运行由主节点提交的查询以及存储数据。默认情况下,Redshift 使用公共网络与外部服务或任何 AWS 服务进行通信。通过 增强 VPC 路由,可以通过自定义网络设置进行控制。
通过结合 Redshift 和 SageMaker,数据科学家和分析人员可以利用 Redshift 的可伸缩性和计算能力在训练机器学习模型之前预处理和转换数据。他们可以利用 Redshift 的高级 SQL 功能执行聚合、连接和过滤操作,从而实现高效的特征工程和数据准备。处理后的数据可以无缝地输入到 SageMaker 中进行模型训练、超参数调整和评估。
Amazon DynamoDB 作为 NoSQL 数据库即服务
Amazon DynamoDB 是 AWS 中的 NoSQL 数据库即服务产品。它是一个完全管理的键/值和文档数据库。通过其端点访问 DynamoDB 很容易。输入和输出吞吐量可以手动或自动管理或扩展。它还支持数据备份、时间点恢复和数据加密。
一个例子是,Amazon DynamoDB 可以以成本效益的方式与 Amazon SageMaker 结合使用,用于实时预测应用。DynamoDB 可以作为存储后端,用于存储和检索使用 SageMaker 构建的预测模型的输入数据。您不必持续运行和扩展推理端点,这可能会更昂贵,而是可以利用 DynamoDB 的低延迟访问和可伸缩性,按需检索所需的输入数据。
在此配置中,预测的输入数据可以存储在 DynamoDB 表中,其中每个条目代表一个独特的数据实例。当接收到预测请求时,应用程序可以使用 DynamoDB 的高效查询功能,根据特定的属性或条件检索所需的输入数据项。一旦检索到数据,就可以将其传递到 SageMaker 端点进行实时预测。
以这种方式使用 DynamoDB,您可以根据传入的预测请求动态扩展应用程序的读取能力,确保您只为实际需要的读取能力付费。这种方法提供了一种成本效益的解决方案,因为它消除了运行和管理持续运行的推理端点的需求,即使在预测需求较低期间,这也可能产生高昂的成本。通过 DynamoDB 和 SageMaker 的协同工作,您可以在保持低延迟和高可用性的同时,实现可伸缩和成本效益的实时预测应用。
本章不会涵盖 DynamoDB 表结构或键结构,因为这对于认证考试不是必需的。然而,了解它们的基本知识是好的。更多详情,请参阅此处可用的 AWS 文档:docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.html。
摘要
在本章中,你学习了关于亚马逊的各种数据存储服务以及如何通过各种策略来保护数据并使用这些服务。如果你正在处理机器学习用例,那么你可能会遇到这样的场景,你必须为你的需求选择一个有效的数据存储服务。
在下一章中,你将了解存储数据的迁移和处理。
考试准备练习 - 章节复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的关键技能。这就是为什么在学习的早期阶段就培养这些技能至关重要。
章节复习题旨在随着你学习并复习每个章节的内容,逐步提高你的应试技巧,同时同时复习章节中关键概念的理解。你将在每个章节的末尾找到这些内容。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线 实践资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH02。或者,你可以扫描以下二维码(图 2.3):

图 2.3 – 为登录用户打开章节复习题的二维码
- 登录后,你会看到一个类似于图 2.4所示的页面:

图 2.4 – 第二章的章节复习题
- 准备就绪后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不要担心时间限制。
尝试 1
第一次,目标至少达到40%。查看你答错的答案,并再次阅读章节中的相关部分,以修复你的学习差距。
尝试 2
第二次,目标至少达到60%。查看你答错的答案,并再次阅读章节中的相关部分,以修复任何剩余的学习差距。
尝试 3
第三次,目标至少达到75%。一旦得分达到 75% 或更高,你就可以开始练习时间了。
小贴士
你可能需要超过三次尝试才能达到 75%。没关系。只需复习章节中的相关部分,直到达到那里。
练习时间
目标:你的目标是保持分数不变,同时尽可能快地回答这些问题。以下是你下一次尝试应该看起来像什么:
| 尝试 | 分数 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分钟 30 秒 |
| 尝试 6 | 78% | 18 分钟 34 秒 |
| 尝试 7 | 76% | 14 分钟 44 秒 |
表 2.2 – 在线平台上的样本时间练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,每次尝试时自行设定你的时间限制。
每次新的尝试,你的得分应该保持在75%以上,同时完成所需的时间应该“减少”。你可以重复尽可能多的尝试,直到你觉得自己能够自信地应对时间压力。
第三章:AWS 数据迁移和处理服务
在上一章中,你学习了在 AWS 中存储数据的几种方法。在本章中,你将探索使用这些数据并获得一些洞察的技术。在某些用例中,你必须处理你的数据或将数据加载到数据仓库中以便查询和分析。如果你在 AWS 上,并且你的数据在 S3 中,那么你必须创建一个在 AWS EMR 上的 hive 表来查询 hive 表中的数据。为了提供与托管服务相同的功能,AWS 有一个名为 Athena 的产品,你可以创建一个数据目录并在 S3 上查询你的数据。如果你需要转换数据,那么 AWS Glue 是转换并恢复到 S3 的最佳选择。想象一个用例,你需要流式传输数据并在该数据上创建分析报告。为此,你可以选择 AWS Kinesis Data Streams 来流式传输数据并将其存储在 S3 中。使用 Glue,相同的数据可以被复制到 Redshift 以进行进一步的分析利用。AWS 数据库迁移服务(DMS)提供了异构和同构数据库的无缝迁移。本章将涵盖以下认证所需的主题:
-
使用 Glue 设计 ETL 作业
-
使用 Athena 查询 S3 数据
-
通过 AWS Kinesis Data Streams 进行数据流并通过 Kinesis Firehose 存储
-
从本地位置摄取数据到 AWS
-
将数据迁移到 AWS 并扩展本地数据中心到 AWS
-
在 AWS 上处理数据
技术要求
你可以从 GitHub 下载示例中使用的数据,链接如下:github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter03。
在 AWS Glue 上创建 ETL 作业
在现代数据管道中,有多个阶段,例如生成数据、收集数据、存储数据、执行 ETL、分析和可视化。在本节中,你将概述这些阶段,并深入了解提取、转换、加载(ETL)过程:
-
数据可以来自多个设备,包括移动设备或物联网、Web 日志、社交媒体、交易数据和在线游戏。
-
这巨大的数据量可以通过使用轮询服务、通过集成 AWS Lambda 的 API 网关来收集数据,或者通过 AWS Kinesis、AWS 管理的 Kafka 或 Kinesis Firehose 等流来收集。如果你有一个本地数据库,并且想把那些数据带到 AWS,那么你会选择 AWS DMS。你可以通过 AWS DataSync 将本地数据同步到 Amazon S3、Amazon EFS 或 Amazon FSx。AWS Snowball 用于收集/传输数据到和从 AWS。
-
下一步涉及存储数据。您在前一章中学习了有关此方面的某些服务,例如 S3、EBS、EFS、RDS、Redshift 和 DynamoDB。
-
一旦您了解您的数据存储需求,就可以设计一个 ETL 作业来提取-转换-加载或提取-加载-转换您的结构化或非结构化数据,以满足您进一步分析所需的格式。例如,您可以使用 AWS Lambda 在线转换数据并将其存储在 S3 中,或者您可以在 EMR 集群上运行 Spark 应用程序来转换数据并将其存储在 S3、Redshift 或 RDS 中。
-
AWS 中提供了许多服务用于对转换后的数据进行分析,例如 EMR、Athena、Redshift、Redshift Spectrum 和 Kinesis Analytics。
-
一旦数据被分析,您可以使用 AWS QuickSight 进行可视化,以了解模式或趋势。数据科学家或机器学习专业人士会希望应用统计分析来更好地理解数据分布。商业用户使用统计分析来准备报告。您将在 第五章 数据理解和可视化 中学习和探索各种展示和可视化数据的方法。
您从传统数据管道中理解到的是,ETL 全部关于在服务器上编码和维护代码,以确保一切顺利运行。如果数据格式有任何变化,则代码需要更改,这将导致目标模式发生变化。如果数据源发生变化,则代码必须能够处理这种情况,这会增加开销。您是否需要编写代码来识别数据源中的这些变化?您是否需要一个能够适应变化并为您发现数据的系统? 这些问题的答案是肯定的,为此,您可以使用 AWS Glue。现在,您将了解为什么 AWS Glue 如此受欢迎。
AWS Glue 的功能
AWS Glue 是 AWS 上完全托管的无服务器 ETL 服务。它具有以下功能:
-
它通过连接到数据源自动发现和分类您的数据,并生成数据目录。
-
如 Amazon Athena、Amazon Redshift 和 Amazon EMR 这样的服务可以使用数据目录来查询数据。
-
AWS Glue 生成 ETL 代码,这是 Spark 在 Python 或 Scala 中的扩展,也可以进行修改。
-
它会自动扩展以匹配您的 Spark 应用程序运行 ETL 作业和将数据加载到目标位置的需求。
AWS Glue 拥有 数据目录,这正是其成功的关键。它有助于从数据源发现数据并了解一些相关信息:
-
数据目录自动发现新数据并提取模式定义。它检测模式更改和版本表。它检测 Amazon S3 上的 Apache Hive 风格分区。
-
数据目录自带用于流行数据类型的内置分类器。可以使用 Grok 表达式编写自定义分类器。分类器有助于检测模式。
-
Glue 爬虫可以按需或按计划运行以更新 Glue 数据目录中的元数据。Glue 爬虫必须与具有足够权限读取数据源(如 Amazon RDS、Redshift 和 S3)的 IAM 角色相关联。
既然您对 AWS Glue 的用途有了初步的了解,接下来运行以下示例以亲自动手实践。
动手实践 AWS Glue 数据目录组件
在此示例中,您将创建一个作业,使用 AWS Glue 将数据从 S3 复制到 Redshift。我所有的组件都是在us-east-1区域创建的。首先创建一个存储桶:
-
导航到 AWS S3 控制台并创建一个存储桶。我将其命名为
aws-glue-example-01。 -
点击
input-data。 -
在文件夹内导航并点击
sales-records.csv数据集。数据可在以下 GitHub 位置找到:github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter03/AWS-Glue-Demo/input-data。由于您已将数据上传到 S3 存储桶,现在创建一个 VPC,您将在其中创建 Redshift 集群。
-
通过访问
console.aws.amazon.com/vpc/home?region=us-east-1#URL 进入 VPC 控制台,并点击AWS services -
com.amazonaws.us-east-1.s3(网关类型) -
VPC:选择默认 VPC(在您的 Redshift 集群将创建的默认 VPC 中使用此默认 VPC)
-
保持其他字段不变,并点击创建端点。* 点击
redshift-self,并选择默认 VPC 下拉菜单。提供适当的描述,例如Redshift 安全组。点击创建****安全组。* 点击所有流量*自定义* 在搜索字段中,选择相同的组(redshift-self)* 点击保存规则。现在,创建您的 Redshift 集群。
- 进入 Amazon Redshift 控制台。点击创建集群并填写高亮字段,如图图 3.1所示。
![图 3.1 – Amazon Redshift 创建集群屏幕截图]()
- 进入 Amazon Redshift 控制台。点击创建集群并填写高亮字段,如图图 3.1所示。
图 3.1 – Amazon Redshift 创建集群屏幕截图
- 滚动并使用自己的值填写图图 3.2中显示的高亮字段:
![图 3.2 – Amazon Redshift 集群数据库配置部分的截图]()
图 3.2 – Amazon Redshift 集群数据库配置部分的截图
- 滚动并更改附加配置设置,如图图 3.3所示。
![图 3.3 – Amazon Redshift 集群的附加配置部分截图]()
图 3.3 – Amazon Redshift 集群的附加配置部分截图
- 如图 3.4 所示,更改 IAM 权限:
![Figure 3.4 – Amazon Redshift 集群的集群权限截图]()
图 3.4 – Amazon Redshift 集群的集群权限截图
-
滚动并点击创建集群。将花费一分钟左右的时间将集群置于可用状态。
接下来,你将创建一个 IAM 角色。
-
导航到 AWS IAM 控制台,并在屏幕上的访问管理部分选择角色。
-
点击创建角色按钮,并从服务中选择Glue。点击下一步:权限按钮进入下一页。
-
在搜索栏中搜索
AmazonS3FullAccess并选择它。然后,搜索AWSGlueServiceRole并选择它。由于你正在将数据写入 Redshift 作为本例的一部分,请选择AmazonRedshiftFullAccess。点击下一步:标签,然后点击下一步:****审查按钮。 -
提供一个名称,
Glue-IAM-Role,然后点击创建角色按钮。角色如图 3.5 所示。5*:![Figure 3.5 – IAM 角色的截图]()
图 3.5 – IAM 角色的截图
现在,你已经有输入数据源和输出数据存储在手头。下一步是从 AWS Glue 控制台创建 Glue 爬虫。
-
选择
glue-redshift-connection -
Amazon Redshift
- 点击
redshift-glue-example*glue-dev*awsuser*********(输入第 10 步中选择的值)* 点击下一步然后完成。为了验证其是否正常工作,点击测试连接,在 IAM 角色部分选择Glue-IAM-Role,然后点击测试连接。* 前往爬虫并选择添加爬虫。为爬虫提供一个名称,S3-glue-crawler,然后点击下一步。在指定爬虫源类型页面,保持所有默认设置,然后点击下一步。* 在s3://aws-glue-example-01/input-data/sales-records.csv。* 点击下一步。* 设置否。点击下一步。* 对于Glue-IAM-Role。然后,点击下一步。* 将频率设置为按需运行。点击下一步。* 没有创建数据库,因此点击s3-data,点击下一步,然后点击完成。* 选择爬虫,s3-data,如前一步所述已创建,并已添加一个表。点击表并选择新创建的表,sales_records_csv。你现在可以看到模式已经被发现。如果推断的数据类型不符合你的要求,你可以更改数据类型。
在本节动手实践中,你学习了数据库表、数据库连接、S3 中的爬虫以及 Redshift 集群的创建。在下一节动手实践中,你将学习如何使用 Glue 创建 ETL 作业。
AWS Glue ETL 组件的实际操作
在本节中,你将使用之前创建的数据目录组件来构建一个作业。你将首先创建一个作业:
-
导航到 AWS Glue 控制台,并在ETL部分下点击作业。
-
点击s3-glue-redshift
-
Spark -
Glue 版本:Spark 2.4,Python 3,改进了作业启动时间(Glue 版本 2.0)
-
保持其他字段不变,然后点击下一步。
-
选择sales_records_csv并点击下一步。
-
默认选择更改模式,然后点击下一步(在撰写本书时,Glue 2.0 不支持机器学习转换)。
-
将数据库名设置为
glue-dev(如前节中创建),然后点击下一步。 -
接下来是输出模式定义页面,您可以选择要从目标模式中删除的所需列。向下滚动并点击保存作业并编辑脚本。
-
您现在可以在屏幕左侧看到正在创建的管道,以及右侧的推荐代码,如图图 3.6所示。您可以根据需求修改代码。点击运行作业按钮。会出现一个弹出窗口,要求您编辑您希望更改的任何详细信息。
这是个可选步骤。然后,点击运行作业按钮:
![图 3.6 – AWS Glue ETL 作业的屏幕截图]()
图 3.6 – AWS Glue ETL 作业的屏幕截图
-
作业成功后,导航到 Amazon Redshift 并点击查询编辑器。
-
将数据库名设置为
glue-dev,然后提供用户名和密码以创建连接。 -
选择
public模式,现在您可以查询表以查看记录,如图图 3.7所示:![图 3.7 – Amazon Redshift 查询编辑器的屏幕截图]()
图 3.7 – Amazon Redshift 查询编辑器的屏幕截图
您现在已了解如何使用 AWS Glue 创建 ETL 作业,将数据从 S3 存储桶复制到 Amazon Redshift。您还使用 UI 控制台中的查询编辑器查询了 Amazon Redshift 中的数据。建议在成功完成步骤后删除 Redshift 集群和 AWS Glue 作业。AWS 在您的账户中创建了两个存储桶来存储 AWS Glue 脚本和 AWS Glue 的临时结果。也请删除这些以节省成本。您将在下一节中使用在 S3 数据上创建的数据目录。
在下一节中,您将了解如何使用 Athena 查询 S3 数据。
使用 Athena 查询 S3 数据
Athena 是一种无服务器服务,旨在查询存储在 S3 中的数据。它是无服务器的,因为客户端不管理用于计算的服务器:
-
Athena 使用模式来呈现对存储在 S3 中的数据的查询结果。您定义您希望数据以模式的形式呈现的方式(方式或结构),Athena 从 S3 读取原始数据,根据定义的模式显示结果。
-
输出可以被其他服务用于可视化、存储或各种分析目的。S3 中的源数据可以是以下任何一种结构化、半结构化或非结构化数据格式:XML、JSON、CSV/TSV、AVRO、Parquet 或 ORC(以及其他格式)。CloudTrail、ELB 日志和 VPC 流日志也可以存储在 S3 中,并由 Athena 进行分析。
-
这遵循了读取时定义模式的技术。与传统技术不同,表在数据目录中预先定义,并且在从表中读取数据时,数据结构将与表的架构进行验证。可以在不转换源数据的情况下对数据进行类似 SQL 的查询。
现在,为了帮助您理解这一点,这里有一个示例,您将使用在 AWS Glue 上创建的 AWSDataCatalog 对 S3 数据进行操作,并使用 Athena 查询它们:
-
导航到 AWS Athena 控制台。从
sampledb数据库中选择AWSDataCatalog将在 AWS Glue 数据目录中创建一个表,名为elb_logs)。 -
选择
s3-data作为数据库。 -
点击右上角的设置,并填写如图 3.8 所示的详细信息:(我在此示例中使用了与上一个示例相同的存储桶和不同的文件夹):
![图 3.8 – Amazon Athena 设置的截图]()
图 3.8 – Amazon Athena 设置的截图
- 下一步是在查询编辑器中编写您的查询并执行它。一旦执行完成,请删除您的 S3 存储桶和 AWS Glue 数据目录。这将为您节省费用。
在本节中,您学习了如何通过 AWS Glue 数据目录使用 Amazon Athena 查询 S3 数据。您还学习了如何创建模式并从 S3 查询数据。在下一节中,您将了解 Amazon Kinesis Data Streams。
使用 Kinesis Data Streams 处理实时数据
Kinesis 是亚马逊的流服务,可以根据需求进行扩展。它默认保留数据 24 小时,或者可选地最多保留 365 天。Kinesis Data Streams 用于大规模数据摄取、分析和监控:
-
Kinesis 流可以被多个生产者摄取,同时多个消费者也可以从流中读取数据。以下是一个示例,以帮助您理解这一点。假设您有一个生产者将数据摄取到 Kinesis 流中,默认的保留期是 24 小时,这意味着今天早上 05:00:00 提取的数据将在流中可用,直到明天早上 04:59:59。在此之后,这些数据将不再可用,理想情况下,应该在它们过期之前被消费;否则,如果它们是关键数据,可以存储在别处。保留期可以延长至最多 365 天,但需要额外付费。
-
Kinesis 可用于实时分析或仪表板可视化。生产者可以想象成将数据推入 Kinesis 流的一段代码,它可以是一个 EC2 实例、Lambda 函数、IoT 设备、本地服务器、移动应用程序或设备等,这些设备正在运行代码。
-
同样,消费者也可以是一段在 EC2 实例、Lambda 函数或本地服务器上运行的代码,这些服务器知道如何连接到 Kinesis 流、读取数据并对数据进行一些操作。AWS 提供触发器,以便在 Kinesis 流中数据到达时立即调用 Lambda 消费者。
-
Kinesis 由于其分片架构而具有可伸缩性,这是 Kinesis 流的基本吞吐量单元。什么是分片? 分片是根据分区键对数据进行分区的一个逻辑结构。分片支持每秒1 MB的写入容量和每秒2 MB的读取容量。单个分片每秒支持 1,000 条
PUT记录。如果您创建了一个包含三个分片的流,那么可以实现3 MB/sec的写入吞吐量和6 MB/sec的读取吞吐量,这允许 3,000 条PUT记录。因此,随着分片数量的增加,您需要额外支付费用以获得更高的性能。 -
分片中的数据通过 Kinesis 数据记录进行存储,最大可达 1 MB。Kinesis 数据记录根据分区键跨分片存储。它们还有一个序列号。序列号在执行
putRecord或putRecordsAPI 操作时由 Kinesis 分配,以便唯一标识一条记录。分区键由生产者在将数据添加到 Kinesis 数据流时指定,分区键负责将记录隔离和路由到流中的不同分片中以平衡负载。 -
在 Kinesis 流中加密数据有两种方式:服务器端加密和客户端加密。客户端加密使得密钥的实施和管理变得困难,因为客户端必须在将数据放入流之前对其进行加密,并在从流中读取数据之后对其进行解密。通过AWS KMS启用服务器端加密后,数据在您将数据放入流和从流中获取数据时会自动加密和解密。
注意
不要将 Amazon Kinesis 与 Amazon SQS 混淆。Amazon SQS 支持一个生产组和消费组。如果您的用例需要多个用户发送和接收数据,那么 Kinesis 是解决方案。
对于解耦和异步通信,SQS 是解决方案,因为发送者和接收者不需要相互了解。
在 SQS 中,没有持久性的概念。一旦读取消息,下一步就是删除。Amazon SQS 没有保留时间窗口的概念。如果您的用例需要大规模摄取,则应使用 Kinesis。
在下一节中,您将了解如何存储流数据以进行进一步分析。
使用 Kinesis Data Firehose 存储和转换实时数据
有许多用例需要将数据流式传输并存储以供未来的分析。为了克服这些问题,你可以编写一个 Kinesis 消费者来读取 Kinesis 流并将数据存储在 S3 中。这个解决方案需要一个实例或机器来运行代码,并需要从流中读取和写入 S3 所需的访问权限。另一个可能的选择是运行一个 Lambda 函数,该函数在向流发出的putRecord或putRecords API 触发时执行,并从流中读取数据以存储在 S3 桶中:
-
为了使这个过程变得简单,Amazon 提供了一个名为 Kinesis Data Firehose 的独立服务。它可以轻松地连接到 Kinesis 数据流,并需要基本的 IAM 角色来将数据写入 S3。这是一个完全托管的服务,旨在减轻管理服务器和代码的负担。它还支持将流式数据加载到 Amazon Redshift、Elasticsearch 和 Splunk。Kinesis Data Firehose 会自动扩展以匹配数据的吞吐量。
-
数据可以在存储或发送到目的地之前通过 AWS Lambda 函数进行转换。如果你想使用未转换的数据构建原始数据湖,那么通过启用源记录备份,你可以在转换之前将其存储在另一个 S3 桶中。
-
在数据发送到 S3 桶后,借助 AWS KMS,可以对数据进行加密。必须在创建交付流时启用它。数据也可以以支持的格式(如 gzip、ZIP 或 Snappy)进行压缩。
在下一节中,你将了解用于从本地服务器摄取数据到 AWS 的不同 AWS 服务。
从本地到 AWS 的数据摄取的不同方式
随着对数据驱动用例需求的增加,目前管理本地服务器上的数据相当困难。当你处理大量数据时,备份并不容易。这些数据湖中的数据用于构建深度神经网络、创建数据仓库以从中提取有意义的信息、运行分析和生成报告。
现在,如果你查看将数据迁移到 AWS 的可选方案,这也带来了各种挑战。例如,如果你想将数据发送到 S3,那么你必须编写几行代码将你的数据发送到 AWS。你将需要管理代码和服务器以运行代码。必须确保数据通过 HTTPS 网络传输。你需要验证数据传输是否成功。这增加了过程的复杂性,同时也带来了时间和精力上的挑战。为了避免此类情况,AWS 提供了一些服务,通过设计混合基础设施允许本地数据中心与 AWS 之间的数据共享,以匹配或解决你的用例。你将在接下来的章节中了解这些内容。
AWS 存储网关
存储网关是一种混合存储虚拟设备。它可以在三种不同的模式下运行——文件网关、磁带网关和卷网关。它可以用于将本地数据中心扩展、迁移和备份到 AWS:
-
在磁带网关模式下,存储网关将虚拟磁带存储在 S3 上,当磁带被弹出并归档时,磁带将从 S3 移动到冰川。活动磁带存储在 S3 上进行存储和检索。归档或导出的磁带存储在冰川的虚拟磁带架(VTS)中。虚拟磁带可以创建,大小可以从 100 GiB 到 5 TiB 不等。总共可以配置 1 个 PB 的本地存储,并且可以将无限数量的磁带归档到冰川。这对于现有的磁带备份系统和需要将备份数据迁移到 AWS 的场景来说非常理想。您可以在以后停用物理磁带硬件。
-
在文件网关模式下,存储网关将文件映射到 S3 对象上,可以使用可用的存储类之一进行存储。这有助于您将数据中心扩展到 AWS。您可以将更多文件加载到文件网关中,这些文件将作为 S3 对象存储。它可以在您的本地虚拟服务器上运行,该服务器通过服务器消息块(SMB)或网络文件系统(NFS)连接到各种设备。文件网关通过 HTTPS 公共端点连接到 AWS,以在 S3 对象上存储数据。可以对那些 S3 对象应用生命周期策略。您可以将您的活动 目录(AD)轻松集成到文件网关中,以控制对文件共享中文件的访问。
-
在卷网关模式下,存储网关提供块存储。有两种使用方式;一种是网关缓存,另一种是网关存储:
-
网关存储是一种本地运行的卷存储网关。它具有本地存储和上传缓冲区。总共可以创建 32 个卷,每个卷的大小可以达到 16 TB,总容量为 512 TB。主数据存储在本地,备份数据在后台异步复制到 AWS。卷通过网络服务器访问,通过互联网小型计算机系统接口(iSCSI)提供。它通过 HTTPS 公共端点连接到存储网关端点,并从备份数据创建 EBS 快照。这些快照可以用来创建标准的 EBS 卷。此选项非常适合迁移到 AWS、灾难恢复或业务连续性。本地系统将继续使用本地卷,但 EBS 快照存储在 AWS 中,可以用作备份的替代品。这不是数据中心扩展的最佳选择,因为您需要大量的本地存储。
-
Gateway Cached 是一种本地运行的卷存储网关。它具有缓存存储和上传缓冲区。区别在于添加到存储网关的数据不是本地的,而是上传到 AWS。主数据存储在 AWS。频繁访问的数据在本地缓存。这是一个将本地数据中心扩展到 AWS 的理想选择。它通过 HTTPS 公共端点连接到存储网关端点,并创建由 S3 支持的卷快照(AWS 管理的存储桶),这些快照作为标准 EBS 快照存储。
Snowball、Snowball Edge 和 Snowmobile
这些属于同一产品类别或家族,用于在业务运营地点和 AWS 之间物理传输数据。为了将大量数据移动到 AWS 或从 AWS 中移出,你可以使用以下三种中的任何一种:
-
Snowball: 这是一个可以通过提交工作订单从 AWS 订购的物理设备。AWS 会为你提供一个设备,用于在发送回 AWS 之前加载你的数据。Snowball 中的数据使用 KMS 加密。它提供两种容量范围:50 TB 和 80 TB。对于 10 TB 到 10 PB 之间的数据,订购一个或多个 Snowball 设备是经济实惠的。该设备可以发送到不同的地点。它没有任何计算能力;它只提供存储能力。
-
Snowball Edge: 这就像 Snowball,但它同时具备存储和计算能力。它的容量比 Snowball 大。它提供快速网络,例如通过 RJ45 的 10 Gbps、10/25 Gb 通过 SFP28 以及 40/100 Gb+通过 QSFP+铜。这对于将千兆到太字节的数据安全快速传输到 AWS 是理想的。
-
Snowmobile: 这是一个在卡车上的运输集装箱内的便携式数据中心。它允许你将埃字节的数据从本地移动到 AWS。如果你的数据量超过 10 PB,则 Snowmobile 是首选。本质上,在请求使用 Snowmobile 服务时,一辆卡车会被开到你的位置,你将数据中心连接到卡车上并传输数据。如果你有多个地点,选择 Snowmobile 进行数据传输不是一个理想的选择。
AWS DataSync
AWS DataSync 旨在将数据从本地存储移动到 AWS,或反之亦然:
-
这是 AWS 为数据处理传输、归档或成本效益存储、灾难恢复、业务连续性和数据迁移提供的理想产品。
-
它具有特殊的数据验证功能,可以在数据到达 AWS 后立即验证原始数据与 AWS 中的数据,换句话说,它检查数据的完整性。
-
要深入了解此产品,可以考虑一个拥有 SAN/NAS 存储的本地数据中心示例。当您在 VMWare 平台上运行 AWS DataSync 代理时,此代理能够通过 NFS/SMB 协议与 NAS/SAN 存储进行通信。一旦启动,它就会与 AWS DataSync 端点通信,然后可以从那里连接到多种不同类型的地点,包括各种 S3 存储类别或基于 VPC 的资源,例如 弹性文件系统(EFS)和 Windows Server 的 FSx。
-
它允许您在特定时间段内安排数据传输。通过配置内置的带宽限制,您可以限制 DataSync 使用的网络带宽量。
AWS 数据迁移服务
在某些情况下,组织可能会决定将其数据库从一个迁移到另一个,例如需要更好的性能、增强的安全性、高级功能或避免来自供应商的许可费用。如果组织希望将其业务扩展到不同的地理位置,它将需要以经济高效的方式执行数据库迁移、灾难恢复改进和数据库同步。AWS DMS 允许您在将数据库从本地/EC2 实例/Amazon RDS 迁移到 Amazon RDS 或 Amazon Aurora 时利用可扩展性、灵活性和成本效益的优势。
在需要将多个数据库合并到单个数据库或需要在多个数据库之间集成数据的情况下,AWS DMS 可以成为一个有价值的工具。AWS DMS 设计为从一个源移动到目标,前提是其中一个端点位于 AWS:
-
DMS 支持同构和异构数据库迁移,允许您在不同数据库引擎之间进行迁移,例如 Oracle、MySQL、PostgreSQL 和 Microsoft SQL Server。
-
DMS 通过处理模式转换、数据复制和源数据库与目标数据库之间的持续同步来简化数据库迁移过程。
-
DMS 支持全量加载和持续 变更数据捕获(CDC)复制方法。全量迁移会将整个源数据库复制到目标数据库,而 CDC 仅捕获并复制初始加载后所做的更改。例如,对于需要最小停机时间的数据库迁移,DMS 首先执行初始全量迁移,然后通过 CDC 复制来保持目标数据库与源数据库更改的一致性。
-
DMS 提供了一个用户友好的控制台和 API,用于轻松配置、监控和管理数据库迁移。它提供详细的日志记录和错误处理,以帮助诊断和解决迁移问题。例如,在从 Oracle 迁移到 Amazon Aurora 的过程中,DMS 可以自动转换 Oracle 特定的数据类型并修改表结构以与 Aurora 数据库模式保持一致。
-
DMS 支持持续数据复制,即使在初始迁移之后也能保持源数据库和目标数据库的同步。这在需要持续数据同步或数据库复制的场景中特别有用。例如,如果一家公司维护一个用于高可用性的活动-活动数据库设置,DMS 将在不同地区的多个数据库实例之间复制数据更改,以实现实时同步。
-
DMS 提供了内置的验证和测试功能,以确保迁移数据的完整性和一致性。它执行数据验证检查并生成报告,以验证迁移过程的成功。例如,在将大型数据库从 Microsoft SQL Server 迁移到 Amazon RDS for PostgreSQL 之后,DMS 通过比较行数、数据类型和其他指标来验证迁移数据,以确保数据准确性。
-
DMS 支持一次性迁移和持续复制,适用于数据库整合和集成场景。它使组织能够将来自多个数据库的数据合并到单个目标数据库,或根据需要跨多个数据库分发数据。例如,假设一家拥有多个子公司数据库的公司希望将所有数据合并到一个集中式数据库中,以便进行统一的报告和分析。DMS 简化了从多个来源到目标数据库的数据迁移和持续同步。
在 AWS 上处理存储的数据
有几种服务用于处理存储在 AWS 中的数据。您将了解 AWS Batch 和 AWS MapReduce作业以及以托管方式运行的 Spark 应用程序。AWS Batch 用于长时间运行、计算密集型的工作负载。
AWS EMR
EMR 是 AWS 提供的一项服务,作为 Apache Hadoop 的托管实现。它包括 Hadoop 生态系统的其他组件,如 Spark、HBase、Flink、Presto、Hive 和 Pig。您不需要为认证考试详细了解这些内容,但这里有一些关于 EMR 的信息:
-
EMR 集群可以从 AWS 控制台或通过 AWS CLI 以特定数量的节点启动。集群可以是长期集群或临时集群。在长时间运行的传统集群中,您必须自行配置机器并管理它们。如果您有需要更快执行的任务,那么您需要手动添加集群。在 EMR 的情况下,这些管理开销消失了。您可以从 EMR 请求任意数量的节点,并且它将为您管理和启动节点。如果您在集群上启用了自动扩展,EMR 将根据需求调节节点。这意味着,当负载高时,EMR 将在集群中启动新的节点,一旦负载减少,就会取消节点。
-
EMR 在后台使用 EC2 实例运行,在一个 VPC 中的可用区。这使节点之间的网络速度更快。AWS Glue 在后台使用 EMR 集群,用户无需担心对 AWS EMR 的操作理解。
-
从使用场景的角度来看,EMR 可以用于处理或转换存储在 S3 中的数据,并将输出数据存储在 S3 中。EMR 使用节点(EC2 实例)作为数据处理单元。EMR 节点有多种变体,包括主节点、核心节点和任务节点。
-
EMR 主节点充当 Hadoop NameNode,管理集群及其健康。它负责在其他核心节点和任务节点之间分配作业工作负载。如果你启用了 SSH,则可以连接到主节点实例并访问集群。
-
EMR 集群可以有一个或多个核心节点。如果你将其与 Hadoop 生态系统联系起来,那么核心节点类似于 Hadoop 数据节点用于 HDFS,它们负责在它们内部运行任务。
-
任务节点是可选的,它们没有 HDFS 存储。它们负责运行任务。如果任务节点因某种原因失败,则不会影响 HDFS 存储,但核心节点故障会导致 HDFS 存储中断。
-
EMR 有一个名为 EMRFS 的文件系统。它由 S3 支持,这使得它在区域上具有弹性。如果核心节点失败,数据仍然安全存储在 S3 中。在 I/O 效率和速度方面,HDFS 比 EMRFS 更高效。
在下一节中,你将了解 AWS Batch,这是一个托管的批量处理计算服务,可用于长时间运行的服务。
AWS Batch
这是一个托管批量处理产品。如果你使用 AWS Batch,则可以无需终端用户交互运行作业,或者可以安排作业运行:
-
想象一个事件驱动的应用程序,它启动 Lambda 函数来处理存储在 S3 中的数据。如果处理时间超过 15 分钟,则 Lambda 停止执行并失败。对于此类场景,AWS Batch 是一个更好的解决方案,其中计算密集型工作负载可以通过 API 事件进行调度或驱动。
-
AWS Batch 适用于需要较长时间处理时间或更多计算资源的使用场景。
-
AWS Batch 作业可以是脚本或可执行文件。一个作业可以依赖于另一个作业。需要定义作业,例如谁可以运行作业(使用 IAM 权限)、作业可以在哪里运行(要使用的资源)、挂载点和其他元数据。
-
任务提交到队列中,在那里它们等待计算环境容量。这些队列与一个或多个计算环境相关联。
-
计算环境执行实际的工作,执行作业。这些可以是 ECS 或 EC2 实例,或者任何计算资源。你还可以定义它们的大小和容量。
-
环境根据其优先级从队列中接收作业并执行它们。它们可以是管理的或非管理的计算环境。
-
AWS Batch 可以将元数据存储在 DynamoDB 中以便进一步使用,也可以将输出存储在 S3 桶中。
注意
如果你在考试中遇到一个需要灵活计算、更高磁盘空间、无时间限制(超过 15 分钟)或有效资源限制的事件式工作负载的问题,那么答案很可能是 AWS Batch。
摘要
在本章中,你学习了在 AWS 中处理数据的不同方式。你还学习了将数据中心扩展到 AWS、将数据迁移到 AWS 以及数据摄取过程的能力。你学习了使用数据来处理数据并将其准备好进行分析的各种方法。你了解了使用数据目录的魔力,这可以帮助你通过 AWS Glue 和 Athena 查询你的数据。
在下一章中,你将学习各种机器学习算法及其用法。
考试准备练习 – 章节复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项有助于你通过认证考试的能力。这就是为什么在学习的早期阶段就培养这些技能是关键。
章节复习题旨在通过学习每个章节并复习章节中的关键概念来逐步提高你的应试技巧。你将在每个章节的末尾找到这些内容。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线练习资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH03。或者,你可以扫描以下二维码(图 3.9):

图 3.9 – 打开登录用户章节复习题的二维码
- 一旦你登录,你会看到一个类似于图 3.10所示的页面:

图 3.10 – 第三章的章节复习题
- 准备好之后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不要担心时间限制。
尝试 1
第一次尝试,目标至少达到40%。查看你答错的答案,并再次阅读章节中相关的部分,以修复你的学习差距。
尝试 2
第二次尝试,目标至少达到60%。查看你答错的答案,并再次阅读章节中相关的部分,以修复任何剩余的学习差距。
尝试 3
第三次尝试,目标至少达到75%。一旦得分达到 75%或更高,你就可以开始练习时间管理。
小贴士
你可能需要超过三次尝试才能达到 75%。这没关系。只需复习章节中的相关部分,直到你达到目标。
正在练习时间管理
目标:你的目标是保持得分不变,同时尽可能快速地回答这些问题。以下是你下一次尝试应该看起来像的样子:
| 尝试 | 得分 | 用时 |
|---|---|---|
| 尝试 5 次 | 77% | 21 分 30 秒 |
| 尝试 6 次 | 78% | 18 分 34 秒 |
| 尝试 7 次 | 76% | 14 分 44 秒 |
表 3.1 – 在线平台上的样本时间练习练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,每次尝试时为自己设定时间限制。
每次新的尝试,你的得分应保持在75%以上,同时完成所需的时间“应减少”。你可以重复尝试任意次数,直到你觉得自己能够自信地应对时间压力。
第四章:数据准备和转换
你可能听说过数据科学家大部分时间都在从事与数据准备相关的活动。现在是时候解释为什么会这样,以及他们从事的活动类型了。
在本章中,你将学习如何处理类别和数值特征,以及如何应用不同的技术来转换你的数据,例如独热编码、二进制编码器、序数编码、分箱和文本转换。你还将学习如何处理数据中的缺失值和异常值,这两个重要任务可以帮助你构建好的 机器学习(ML)模型。
在本章中,你将涵盖以下主题:
-
识别特征类型
-
处理类别特征
-
处理数值特征
-
理解数据分布
-
处理缺失值
-
处理异常值
-
处理不平衡数据集
-
处理文本数据
本章比其他章节要长一些,需要更多的耐心。详细了解这些主题将使你在 AWS 机器学习专业考试中处于有利位置。
识别特征类型
在不知道特征是什么以及它可以存储什么类型的信息之前,你无法开始建模。你已经阅读了关于处理特征的各个过程的内容。例如,你知道特征工程与为你的模型构建和准备特征的任务相关;你也知道特征选择与为特定算法选择最佳特征集的任务相关。这两个任务有一个共同的行为:它们可能根据它们处理的特征类型而变化。
理解这种行为(特征类型与适用转换)非常重要,因为它将帮助你消除考试中的无效答案(最重要的是,你将成为一名更好的数据科学家)。
通过 特征类型,你指的是特定特征应该存储的数据类型。图 4.1 展示了如何潜在地描述模型的不同特征类型。

图 4.1 – 特征类型
在 第一章**,机器学习基础 中,你被介绍了 图 4.1 中显示的特征分类。现在,看看一些真实示例,这样你可以消除你可能有的任何疑问:
| 特征类型 | 特征子类型 | 定义 | 示例 |
|---|---|---|---|
| 类别 | 名义 | 无定量值的标记变量 | 云服务提供商:AWS、MS、Google |
| 类别 | 序数 | 为标记变量添加顺序感 | 职位:初级数据科学家,高级数据科学家,首席数据科学家 |
| 类别 | 二元 | 只允许两个值的变量 | 欺诈分类:欺诈,非欺诈 |
| 数值 | 离散 | 单个和可数的项目 | 学生人数:100 |
| 数值 | 连续 | 有无限多的可能测量值,并且它们通常带有小数点 | 总金额:$150.35 |
表 4.1 – 特征值的真实示例
虽然查看变量的值可能有助于您找到其类型,但您绝不应该只依赖这种方法。变量的性质对于做出此类决定也非常重要。例如,有人可以将表 4.1中显示的云服务提供商变量编码如下:1(AWS),2(MS),3(Google)。在这种情况下,即使现在由离散数字表示,该变量仍然是一个名义特征。
如果您正在构建机器学习模型,并且没有告诉您的算法这个变量不是一个离散数字,而是一个名义变量,那么算法将把它当作一个数字处理,模型将不再可解释。
重要提示
在向任何机器学习算法提供数据之前,请确保您的特征类型已经被正确识别。
理论上,如果您对自己的特征满意并且已经正确地分类了每个特征,您应该准备好进入 CRISP-DM 方法的建模阶段,不是吗?好吧,也许不是。即使您已经正确地分类了特征,您可能还有许多原因想要在数据准备上花更多的时间:
-
一些机器学习库,如
scikit-learn,可能不接受分类特征上的字符串值。 -
您变量的数据分布可能不是您算法的最优分布。
-
您的机器学习算法可能会受到您数据规模的影响。
-
您变量的某些观察结果可能缺少信息,您将不得不修复它们。这些也被称为缺失值。
-
您可能会发现变量中的异常值,这些值可能会给您的模型带来潜在的偏差。
-
您的变量可能存储着不同类型的信息,而您可能只对其中的一些感兴趣(例如,日期变量可以存储星期几或月份的星期)。
-
您可能想要为文本变量找到一个数学表示。
-
相信我,这个列表没有真正的尽头!
在接下来的章节中,您将了解如何解决所有这些问题,从分类特征开始。
处理分类特征
对于分类特征的数值转换方法将根据您变量的子类型而有所不同。在接下来的章节中,您将了解如何转换名义和有序特征。
转换名义特征
在应用机器学习算法之前,您可能需要创建分类特征的数值表示。一些库可能已经内置了处理这种转换的逻辑,但大多数都没有。
你将学习的第一个转换称为标签编码。标签编码器适用于分类/名义变量,它将为你的变量的每个不同标签分配一个数字。表 4.2 展示了标签编码器是如何工作的:
| 国家 | 标签编码 |
|---|---|
| 印度 | 1 |
| 加拿大 | 2 |
| 巴西 | 3 |
| 澳大利亚 | 4 |
| 印度 | 1 |
表 4.2 – 标签编码器应用示例
标签编码器将始终确保每个不同的标签都关联一个唯一的数字。在上面的表中,尽管“印度”出现了两次,但它被分配了相同的数字。
你现在有了每个国家的数值表示,但这并不意味着你可以在模型中使用这种数值表示!在这个特定的情况下,你正在转换一个没有顺序的命名特征。
根据表 4.2,如果你将国家变量的编码版本传递给模型,它将做出诸如“巴西(3)大于加拿大(2)”这样的假设,这是没有意义的。
针对这种情况的一个可能解决方案是在“国家”之上应用另一种类型的转换:独热编码。这种转换将表示原始特征中的所有类别作为单独的特征(也称为虚拟变量),这将存储每个类别的存在或不存在。表 4.3 将转换与表 4.2 相同的信息,但这次它应用了独热编码:
| 国家 | 印度 | 加拿大 | 巴西 | 澳大利亚 |
|---|---|---|---|---|
| 印度 | 1 | 0 | 0 | 0 |
| 加拿大 | 0 | 1 | 0 | 0 |
| 巴西 | 0 | 0 | 1 | 0 |
| 澳大利亚 | 0 | 0 | 0 | 1 |
| 印度 | 1 | 0 | 0 | 0 |
表 4.3 – 独热编码应用示例
你现在可以使用国家变量的独热编码版本作为机器学习模型的特征。然而,作为一名持怀疑态度的数据科学家,你的工作永远不会结束,你的批判性思维能力将在 AWS 机器学习专业考试中得到考验。
假设你的数据集中有 150 个不同的国家。你会想出多少个虚拟变量?150 个,对吧?在这里,你遇到了一个潜在的问题:除了增加模型的复杂性(这绝不是任何模型所希望的特性)之外,虚拟变量还会给你的数据增加稀疏性。
稀疏数据集有很多变量填充了零。通常,很难将这种数据结构拟合到内存中(你很容易耗尽内存),并且对于机器学习算法来说,处理稀疏结构非常耗时。
你可以通过对原始数据进行分组并减少类别数量来解决稀疏问题,甚至可以使用自定义库压缩你的稀疏数据,使其更容易操作(例如 Python 中的 scipy.sparse.csr_matrix)。
因此,在考试期间,请记住,当你需要将分类/名义数据转换为机器学习模型输入时,独热编码绝对是正确的选择;然而,要考虑你原始特征的唯一类别数量,并思考是否为所有这些类别创建虚拟变量是否有意义(如果你有非常多的唯一类别,这可能没有意义)。
应用二进制编码
对于具有更多唯一类别的变量类型,创建它们的数值表示的一个潜在方法是应用二进制编码。在这种方法中,目标是转换一个分类变量为多个二进制列,但最小化新列的数量。
此过程包括三个基本步骤:
-
在通过顺序编码器处理后,分类数据被转换为数值数据。
-
然后将得到的数字转换为二进制值。
-
二进制值被分割成不同的列。
表 4.4展示了如何将表 4.2中的数据转换为二进制变量。
| 国家 | 标签编码器 | 二进制 | Col1 | Col2 | Col3 |
|---|---|---|---|---|---|
| 印度 | 1 | 001 | 0 | 0 | 1 |
| 加拿大 | 2 | 010 | 0 | 1 | 0 |
| 巴西 | 3 | 011 | 0 | 1 | 1 |
| 澳大利亚 | 4 | 100 | 1 | 0 | 0 |
| 印度 | 1 | 001 | 0 | 0 | 1 |
表 4.4 – 二进制编码的实际应用
如你所见,现在有三列(Col1、Col2 和 Col3),而不是像表 4.3中的独热编码转换那样有四列。
转换顺序特征
顺序特征具有一个非常特定的特征:它们有顺序。因为它们具有这种特性,所以对它们应用独热编码是没有意义的;如果你这样做,用于训练你的模型的底层算法将无法区分与该特征相关的数据点的隐含顺序。
这种类型变量的最常见转换方式被称为顺序****编码。顺序编码器将每个变量的不同标签与一个数字关联起来,就像标签编码器一样,但这次,它将尊重每个类别的顺序。以下表格展示了顺序编码器是如何工作的:
| 教育 | 顺序编码 |
|---|---|
| 训练生 | 1 |
| 初级数据分析师 | 2 |
| 高级数据分析师 | 3 |
| 首席数据科学家 | 4 |
表 4.5 – 顺序编码的实际应用
现在,你可以将编码后的变量传递给机器学习模型,它们将能够正确处理这个变量,无需应用独热编码转换。这次,“高级数据分析师大于初级数据分析师”这样的比较是完全有意义的。
避免在训练和测试数据集中产生混淆
不要忘记以下声明:编码器在训练数据上拟合,并在测试和生产数据上转换。这就是你的机器学习管道应该工作的方式。
假设你已经创建了一个适合表 4.2中数据的 one-hot 编码器,并返回根据表 4.3的数据。在这个例子中,假设这是你的训练数据。一旦你完成了训练过程,你可能想要将相同的 one-hot 编码转换应用到你的测试数据上,以检查模型的结果。
在刚才描述的场景中(这在建模管道中是一个非常常见的情况),你不能在测试数据上重新训练你的编码器!你应该只是重新使用你在训练数据上创建的之前的编码器对象。技术上,你不应该再次使用fit方法,而应该使用transform方法。
你可能已经知道为什么你应该遵循这条规则的原因,但只是为了提醒一下:测试数据是为了提取你模型性能指标而创建的,因此你不应该用它来提取任何其他知识。如果你这样做,你的性能指标将会受到测试数据的偏差,你也不能推断出相同的性能(在测试数据中显示)在生产环境中(当新数据到来时)很可能会发生。
好吧,到目前为止一切都很顺利。然而,如果你的测试集有一个在训练集中没有的新类别,你该如何转换这些数据呢?
回到图 4**.3(输入数据)和表 4.3(输出数据)中的 one-hot 编码示例。这个编码器知道如何转换以下国家:澳大利亚、巴西、加拿大和印度。如果你在测试集中有不同国家,编码器将不知道如何转换它,这就是为什么你需要定义它在有异常情况下的行为方式。
大多数机器学习库为这些情况提供了特定的参数。在先前的例子中,你可以配置编码器在虚拟变量上要么引发错误,要么设置所有为零,如表 4.6所示。
| 国家 | 印度 | 加拿大 | 巴西 | 澳大利亚 |
|---|---|---|---|---|
| 印度 | 1 | 0 | 0 | 0 |
| 加拿大 | 0 | 1 | 0 | 0 |
| 巴西 | 0 | 0 | 1 | 0 |
| 澳大利亚 | 0 | 0 | 0 | 1 |
| 印度 | 1 | 0 | 0 | 0 |
| 葡萄牙 | 0 | 0 | 0 | 0 |
表 4.6 – 在 one-hot 编码转换中处理未知值
正如你所见,葡萄牙没有出现在训练集中(表 4.2),所以在转换过程中,它将保持已知国家的相同列表,并说葡萄牙不在其中(所有为零)。
作为你正在成为的非常优秀的怀疑性数据科学家,你应该担心这样一个事实,即你有一个在训练过程中没有使用过的特定类别吗?好吧,也许吧。这种分析类型真的取决于你的问题领域。
处理未知值是非常常见的事情,也是你在你的机器学习管道中应该预期要做的事情。然而,你也应该问自己,由于你在训练过程中没有使用那个特定类别,你的模型是否可以被外推和推广。
记住,你的测试数据必须遵循与训练数据相同的数据分布,你很可能在训练或测试集中找到所有(或至少大多数)分类特征(的类别)。此外,如果你面临过拟合问题(在训练中表现良好,但在测试集中表现不佳),同时,你意识到你的分类编码器在测试集中转换了大量的未知值,猜猜看?很可能你的训练和测试样本没有遵循相同的分布,这完全无效化了你的模型。
正如你所见,你正在慢慢接近目标。你正在学习关于偏差和调查策略的精细细节——这真是太令人兴奋了!现在,继续前进,看看对数值特征进行转换。是的,每种类型的数据都很重要,并驱动着你的决策。
处理数值特征
在数值特征(离散和连续)方面,你可以考虑依赖于训练数据的转换以及其他仅依赖于(单个)被转换观察的转换。
依赖于训练数据的那些将使用训练集在fit过程中学习必要的参数,然后使用这些参数来转换任何测试或新数据。逻辑基本上与你刚刚学习用于分类特征的逻辑相同;然而,这次,编码器将学习不同的参数。
另一方面,那些仅依赖于(单个)观察的转换不依赖于训练或测试集。它们将简单地在一个单个值上执行数学计算。例如,你可以通过平方其值来对一个特定变量应用指数转换。这里没有依赖于任何地方学习到的参数——只需获取值并平方它。
到目前为止,你可能已经在想数值特征的数十种可用转换了!确实,有这么多选项,你在这里不会学习所有这些。然而,你不需要为了 AWS 机器学习专业考试而了解所有这些。你将学习最重要的那些(用于考试),但你不应限制你的建模技能:花点时间思考一下,根据你的用例创建自定义转换时,你拥有的无限选项。
数据标准化
应用数据标准化意味着改变数据的尺度。例如,你的特征可能存储员工年薪,范围在每年 20,000 到 200,000 美元之间,而你希望将此数据放入 0 到 1 的范围内;其中 20,000(观察到的最小值)将被转换为 0;而 200,000(观察到的最大值)将被转换为 1。
当你想要将训练数据拟合到受底层数据规模/幅度影响的特定类型的算法上时,这种技术尤为重要。例如,你可以考虑那些使用输入变量的点积(如神经网络或线性回归)的算法,以及那些依赖于距离度量的算法(如 k-最近邻(KNN)或k-means)。
另一方面,应用数据归一化对于基于规则的算法,如决策树,不会导致性能提升,因为它们将能够检查特征(无论是通过熵或信息增益分析)的预测能力,而不管数据的规模如何。
重要提示
你将在本书的后续章节中了解这些算法,以及相关的详细信息。例如,你可以将熵和信息增益视为决策树用来检查特征重要性的两种度量指标。了解每个特征的预测能力有助于算法定义树的根节点、中间节点和叶节点。
请花点时间,使用以下示例来理解为什么数据归一化将有助于那些类型的算法。你已经知道聚类算法的目的是在你的数据中找到组或集群,而最常用的聚类算法之一就是 k-means。
图 4.2 展示了不同尺度的变量如何改变 k-means 聚类的超平面投影:

图 4.2 – 在超平面上绘制不同尺度的数据
在 图 4.2 的左侧,你可以看到一个数据点在一个三维超平面上绘制(x,y,z)。所有三个维度(也称为特征)都被归一化到 0 和 1 的规模。在右侧,你可以看到相同的数据点,但这次 x 维度没有被归一化。你可以清楚地看到超平面已经改变。
在实际场景中,你会有更多的维度和数据点。数据规模的不同会改变每个集群的中心点,并可能改变某些点的分配集群。同样的问题也会出现在依赖于距离计算的算法上,如 KNN。
其他算法,如神经网络和线性回归,将使用你的输入数据进行加权求和。通常,这些类型的算法将执行如 W1X1 + W2X2 + WiXi* 的操作,其中 Xi 和 Wi 分别代表特定的特征值及其权重。同样,你将在稍后学习神经网络和线性模型的细节,但你能仅通过查看刚才描述的计算来看到数据缩放问题吗?如果 X(特征)和 W(权重)是很大的数字,它很容易产生非常大的值。这将使算法的优化变得更加复杂。在神经网络中,这个问题被称为梯度爆炸。
你现在对应该应用数据归一化的原因(以及何时不应应用)有了非常好的理解。数据归一化通常在机器学习库中作为 Min Max Scaler 实现。如果在考试中遇到这个术语,请记住它与数据归一化是相同的。
此外,数据归一化不一定需要将你的特征值转换到 0 到 1 的范围内。实际上,你可以将其转换到你想要的任何范围内。图 4.3 展示了归一化是如何正式定义的。

图 4.3 – 归一化公式
在这里,Xmin 和 Xmax 是范围的上下限值;X 是特征的值。除了数据归一化之外,还有另一种关于数值转换的非常重要的技术,你必须意识到,这不仅是为了考试,也是为了你的数据科学职业生涯。你将在下一节中了解这一点。
数据标准化
数据标准化是另一种缩放方法,它将数据的分布转换为均值变为 0,标准差变为 1。图 4.4 正式描述了这种缩放技术,其中 X 代表要转换的值,µ 指的是 X 的均值,而 σ 是 X 的标准差:

图 4.4 – 标准化公式
与归一化不同,数据标准化不会导致一个预定义的值范围。相反,它将你的数据转换成标准高斯分布,其中你的转换值将代表每个值相对于分布均值的标准差数。
重要提示
高斯分布,也称为正态分布,是统计模型中最常用的分布之一。这是一个具有两个主要控制参数的连续分布:µ(均值)和σ(标准差)。正态分布围绕均值是对称的。换句话说,大多数值将接近分布的均值。
数据标准化通常被称为 z 分数,并且广泛用于识别变量的异常值,你将在本章后面看到。为了演示,表 4.7 模拟了一个小数据集的数据标准化。输入值显示在“年龄”列中,而缩放值显示在“Z 分数”列中:
| 年龄 | 平均值 | 标准差 | Z 分数 |
|---|---|---|---|
| 5 | 31,83 | 25,47 | -1,05 |
| 20 | 31,83 | 25,47 | -0,46 |
| 24 | 31,83 | 25,47 | -0,31 |
| 32 | 31,83 | 25,47 | 0,01 |
| 30 | 31,83 | 25,47 | -0,07 |
| 80 | 31,83 | 25,47 | 1,89 |
表 4.7 – 数据标准化实践
在 AWS 机器学习专业考试中,确保你在手动应用归一化和标准化时充满信心。他们可能会提供一个值列表,以及平均值和标准差,并要求你给出列表中每个元素的缩放值。
应用分箱和离散化
分箱是一种技术,可以将一组值分组到一个桶或区间中——例如,将 0 至 14 岁的人分组到名为“儿童”的桶中,将 15 至 18 岁的人分组到名为“青少年”的桶中,依此类推。
离散化是将连续变量转换为离散或名义属性的过程。这些连续值可以通过多种策略进行离散化,例如等宽和等频率。
等宽策略将在多个相同宽度的区间中分割你的数据。等频率将你的数据分割成多个具有相同频率的区间。
看看下面的例子。假设你有一个包含 16 个数字的列表:10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 90。正如你所见,这个列表的范围在 10 到 90 之间。假设你想要使用等宽策略创建四个区间,你可以得到以下区间:
-
区间 >= 10 <= 30 > 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
-
区间 > 30 <= 50 >
-
区间 > 50 <= 70 >
-
区间 > 71 <= 90 > 90
在这种情况下,每个区间的宽度相同(20 个单位),但观测值分布不均。现在,下一个示例模拟了一个等频率策略:
-
区间 >= 10 <= 13 > 10, 11, 12, 13
-
区间 > 13 <= 17 > 14, 15, 16, 17
-
区间 > 17 <= 21 > 18, 19, 20, 21
-
区间 > 21 <= 90 > 22, 23, 24, 90
在这种情况下,所有区间都有相同的观测频率,尽管它们使用了不同的区间宽度来实现这一点。
一旦你计算出了你的区间,你可能想知道下一步是什么,对吧?在这里,你有一些选择:
-
你可以为你的区间命名,并将它们用作模型上的名义特征!当然,作为一个名义变量,你应该在将数据输入到机器学习模型之前考虑应用独热编码。
-
你可能想要对区间进行排序,并将它们用作有序特征。
-
也许您想通过平均每个箱子的最小值和最大值来从您的特征中去除一些噪声,并使用该值作为您的转换特征。
查看表 4.8以了解这些方法,使用我们的等频示例:
| 序数值 | 箱 | 转换为 名义特征 | 转换为 序数特征 | 去除噪声 |
|---|---|---|---|---|
| 10 | Bin >= 10 <= 13 | Bin A | 1 | 11,5 |
| 11 | Bin >= 10 <= 13 | Bin A | 1 | 11,5 |
| 12 | Bin >= 10 <= 13 | Bin A | 1 | 11,5 |
| 13 | Bin >= 10 <= 13 | Bin A | 1 | 11,5 |
| 14 | Bin > 13 <= 17 | Bin B | 2 | 15,5 |
| 15 | Bin > 13 <= 17 | Bin B | 2 | 15,5 |
| 16 | Bin > 13 <= 17 | Bin B | 2 | 15,5 |
| 17 | Bin > 13 <= 17 | Bin B | 2 | 15,5 |
| 18 | Bin > 17 <= 21 | Bin C | 3 | 19,5 |
| 19 | Bin > 17 <= 21 | Bin C | 3 | 19,5 |
| 20 | Bin > 17 <= 21 | Bin C | 3 | 19,5 |
| 21 | Bin > 17 <= 21 | Bin C | 3 | 19,5 |
| 22 | Bin > 21 <= 90 | Bin D | 4 | 55,5 |
| 23 | Bin > 21 <= 90 | Bin D | 4 | 55,5 |
| 24 | Bin > 21 <= 90 | Bin D | 4 | 55,5 |
| 90 | Bin > 21 <= 90 | Bin D | 4 | 55,5 |
表 4.8 – 处理箱和离散化的不同方法
再次,尝试不同的箱划分策略将给出不同的结果,您应该分析/测试最适合您数据集的最佳方法。这里没有标准答案——一切都关于数据探索!
应用其他类型的数值变换
归一化和标准化依赖于您的训练数据来调整其参数:在归一化的情况下,最小值和最大值,在标准缩放的情况下,平均值和标准差。这也意味着您必须仅使用您的训练数据来调整这些参数,而绝不能使用测试数据。
然而,还有其他类型的数值变换,它们不需要从训练数据中提取参数来应用。这些类型的变换完全依赖于数学计算。例如,其中一种变换被称为对数变换。这是机器学习模型中非常常见的一种变换,特别适用于偏斜特征。如果您不知道什么是偏斜分布,请查看图 4.5。

图 4.5 – 偏斜分布
在中间,您有一个正态分布(或高斯分布)。在左侧和右侧,您有偏斜分布。在偏斜特征方面,将有一些值远离平均值,在一个单一方向上(要么是左侧,要么是右侧)。这种行为将推动这个分布的中位数和平均值向同一方向移动,即您在图 4.5中可以看到的长尾方向。
一个数据曾经是偏斜的非常明显的例子是某个特定地区一组专业人士的年度薪酬,例如在美国佛罗里达州工作的资深数据科学家。这类变量通常大部分值都接近其他值(因为人们过去通常赚取平均薪酬),只有少数几个非常高的值(因为一小部分人的收入远高于其他人)。
希望现在您能轻松理解为什么均值和中位数会移动到尾部方向,对吧?高薪将推动它们向那个方向移动。
好吧,但为什么对数变换会对这种特征类型有益呢?这个问题的答案可以通过其背后的数学来解释:

图 4.6 – 对数性质
计算一个数的对数是指数函数的逆。因此,对数变换将根据给定的基数(例如,基数 2、基数 10 或自然对数的情况下的基数 e)来缩小您的数字的规模。从上一个例子中观察薪酬分布,您会将所有这些数字降低,使得数值越高,降低的幅度越大;然而,您会以对数尺度而不是线性方式来做这件事。这种行为将消除这个分布的异常值(使其更接近正态分布),这对许多机器学习算法(如线性回归)有益。表 4.9 展示了在将数字从线性尺度转换为对数尺度时的一些差异:
| 序数值 | 线性尺度(归一化) | 对数尺度(基数 10) |
|---|---|---|
| 10 | 0.0001 | 1 |
| 1,000 | 0.01 | 3 |
| 10,000 | 0.1 | 4 |
| 100,000 | 1 | 5 |
表 4.9 – 线性变换与对数变换之间的差异
如您所见,线性变换保持了数据的原始幅度(您仍然可以看到异常值,但它们位于另一个尺度上),而对数变换则消除了这些幅度的差异,同时仍然保持了值的顺序。
您能想到另一种遵循相同行为(使分布更接近高斯分布)的数学变换类型吗?好的,这里还有一个:平方根。取 表 4.9 中显示的这些数字的平方根,看看结果吧!
现在,请注意这一点:对数和平方根都属于一组称为幂变换的变换,而且有一个非常流行的、可能在您的 AWS 考试中提到的方法,可以执行一系列您所看到的幂变换。这种方法是由乔治·博克斯和大卫·考克斯提出的,其名称为Box-Cox。
重要提示
在你的考试中,如果你看到有关 Box-Cox 变换的问题,请记住这是一个可以进行许多幂变换(根据 lambda 参数)的方法,其最终目标是使原始分布更接近正态分布。
只为了结束关于为什么数学变换真的可以对机器学习模型产生影响的讨论,这里有一个指数变换的例子。
假设你有一组数据点,例如图 4.7左侧的数据点。你的目标是画一条线,能够完美地分割蓝色和红色点。仅通过观察原始数据(再次,在左侧),你就知道执行这个线性任务的最佳猜测就是你在同一张图中看到的那个。然而,科学(不是魔法)发生在图的右侧!通过将这些数字平方并在另一个超平面上绘制它们,你可以完美地分离每一组点。

图 4.7 – 指数变换的实际应用
你可能会想,你有无限种处理数据的方法。虽然这是真的,但你应该始终考虑你正在处理的业务场景并相应地规划工作。记住,模型改进或探索总是可能的,但你必须定义你的目标(记住 CRISP-DM 方法论)并继续前进。
顺便说一句,数据转换很重要,但它只是你作为数据科学家工作的一部分。你的建模之旅仍需要转移到其他重要主题,例如处理缺失值和异常值。然而,在此之前,你可能已经注意到在这一节中你被介绍了高斯分布,那么为什么不深入研究它呢?
理解数据分布
尽管高斯分布可能是统计和机器学习模型中最常见的分布,但你应该知道它不是唯一的。还有其他类型的数据分布,例如伯努利分布、二项分布和泊松分布。
二项分布是一个非常简单的分布,因为只有两种可能的事件类型:成功或失败。成功事件发生的概率为p,而失败事件的概率为1-p。
一些遵循伯努利分布的例子包括掷一个六面骰子或抛硬币。在这两种情况下,你必须定义成功事件和失败事件。例如,假设掷骰子时的以下成功和失败事件:
-
成功:掷出数字 6
-
失败:得到任何其他数字
你可以这样说,成功的概率为p(1/6 = 0.16 = 16%),失败的概率为1-p(1 - 0.16 = 0.84 = 84%)。
二项分布是伯努利分布的推广。伯努利分布只有一个事件的重复,而二项分布允许事件重复多次,你必须计算成功的次数。继续使用之前的例子,即计算在 10 次掷骰子中,得到 6 的次数。由于这个例子本身的性质,二项分布有两个参数,n 和 p,其中 n 是重复的次数,p 是每次重复成功的概率。
最后,泊松分布允许你在给定事件在某个时间段内发生的次数的情况下,找到该时间段内的事件数量。它有三个参数:lambda,e 和 k,其中 lambda 是每个区间内事件平均发生的次数,e 是欧拉数,k 是事件在每个区间内发生的次数。
在所有这些分布中,包括高斯分布,你可以根据它们的参数计算期望的均值和方差。这些信息通常用于假设检验,通过比较样本的均值和方差与分布的期望均值和方差,来检查某些样本数据是否遵循给定的分布。
你现在对数据分布更加熟悉了,不仅限于高斯分布。你将在整本书中继续学习关于数据分布的内容。现在,是时候继续学习缺失值和异常值检测了。
处理缺失值
如其名所示,缺失值指的是数据的缺失。这些缺失通常由标记表示,这些标记可能或可能不会以标准方式实现。
虽然使用标记是标准的,但这些标记在不同平台上的显示方式可能会有所不同。例如,关系型数据库用 NULL 表示缺失数据,核心 Python 代码将使用 None,而一些 Python 库将缺失数字表示为非数字(NaN)。
重要提示
对于数值字段,不要用 零 替换那些标准缺失标记。默认情况下,零不是缺失值,而是另一个数字。
然而,在实际的商业场景中,你可能找到或找不到那些标准标记。例如,一个软件工程团队可能已经设计了一个系统,自动用特定的标记填充缺失数据,例如字符串中的“未知”或数字中的“-1”。在这种情况下,你必须通过这两个标记来查找缺失数据。人们可以设置任何东西。
在之前的例子中,软件工程团队仍然非常友好地给了你标准的标记。然而,有许多情况是遗留系统在用户面前没有添加任何数据质量层,你可能会发现地址字段填满了“我不想分享”,或者电话号码字段填满了“不要给我打电话”。这显然是缺失数据,但不如之前的例子标准化。
关于缺失数据,你将学习到更多细微之处,所有这些你都将在本节中学习,但请注意:在你开始对缺失值做出决策之前,你应该做好良好的数据探索,并确保你找到那些值。你可以计算数据频率或使用缺失图,但请做点什么。永远不要假设你的缺失数据只由那些方便的标准标记表示。
为什么你应该关注这种类型的数据?首先,因为大多数算法(除了在非常具体的 ML 库上实现的决策树之外)在发现缺失值时会引发错误。其次(也许是最重要的),通过将所有缺失数据归入同一个类别,你假设它们都是相同的,但现实中你并不知道这一点。
这样的决定不仅会给你的模型带来偏差,还会降低其可解释性,因为你将无法解释缺失的数据。一旦你知道为什么你想处理缺失值,然后你可以分析你的选项。
从理论上讲,你可以将缺失值分为两大类:MCAR或MNAR。MCAR 代表完全随机缺失,表示缺失数据没有关联的模式。另一方面,MNAR 代表非随机缺失,意味着用于生成数据的底层过程严格与缺失值相关。
看看以下关于 MNAR 缺失值的例子。假设你在在线调查中收集关于特定产品的用户反馈。你的提问过程是动态的,并取决于用户的回答。当一个用户指定年龄低于 18 岁时,你永远不会询问他的婚姻状况。在这种情况下,婚姻状况的缺失值与用户的年龄相关(MNAR)。
了解你正在处理的缺失值的类别将帮助你理解你是否对生成数据的底层过程有任何控制权。有时,你可以回到源过程,并 somehow 完成你的缺失数据。
重要提示
虽然,在现实场景中,你通常需要通过排除或插补来处理缺失数据,但永远不要忘记,你总是可以尝试查看源过程,并检查你是否可以检索(或者至少更好地理解)缺失数据。你可能会在考试中遇到这个选项。
如果你没有机会从任何地方恢复你的缺失数据,那么你应该转向其他方法,例如逐行删除和插补。
列删除法指的是丢弃一些数据的过程,这是这种选择的一个缺点。这可能在行级别或列级别发生。例如,假设你有一个包含四个列的 DataFrame,其中一列有 90%的数据缺失。在这种情况下,通常更有意义的是删除整个特征(列),因为你对于大多数观察(行)没有这些信息。
从行的角度来看,你可能有一个包含少量观察(行)的 DataFrame,其中其特征(列)之一包含缺失数据。在这种情况下,与其删除整个特征,不如只删除那些少数观察。
使用这种方法的好处是删除一行或一列的简单性。然而,缺点是会丢失信息。如果你在处理缺失数据时不想丢失信息,那么你应该选择一个插补策略。
插补也被称为替换,其中你将用替代值替换缺失值。插补最常见的方法是将缺失值替换为特征的均值。请注意这种方法,因为它可能会出现在你的考试中:
| 年龄 |
|---|
| 35 |
| 30 |
| 25 |
| 80 |
| 75 |
表 4.10 – 使用均值或中位数替换缺失值
表 4.10显示了一个非常简单的数据集,只有一个特征和五个观察值,其中第三个观察值有缺失值。如果你决定用特征的均值来替换那个缺失数据,你会得到 49。有时,当数据中有异常值时,中位数可能更合适(在这种情况下,中位数将是 35):
| 年龄 | 工作状态 |
|---|---|
| 35 | 员工 |
| 30 | 员工 |
| 退休 | |
| 25 | 员工 |
| 80 | 退休 |
| 75 | 退休 |
表 4.11 – 使用组均值或中位数替换缺失值
如果你想要深入了解,你可以根据给定的特征组找到平均值或中位数。例如,表 4.11通过添加工作状态列扩展了表 4.10中的先前数据集。现在,有一些证据表明,最初通过使用整体中位数(35 岁)来更改缺失值的方法可能是错误的(因为那个人已经退休了)。
你现在可以做的,是将缺失值替换为属于同一工作状态的其它观察值的平均值或中位数。使用这种方法,你可以将缺失信息更改为 77.5。考虑到这个人已经退休,77.5 比 35 岁更有意义。
重要提示
对于分类变量,你可以用数据集中出现频率最高的值来替换缺失数据。根据特定特征对数据集进行分组的逻辑仍然适用。
你还可以使用更复杂的插补方法,包括构建一个机器学习模型来预测你的缺失数据值。这些插补方法(无论是通过平均还是预测值)的缺点是,你正在对数据做出可能不正确的推断,并将偏差添加到数据集中。
总结来说,处理缺失数据时的权衡是在丢失数据或向数据集添加偏差之间保持平衡。不幸的是,没有一种科学的方法可以遵循,无论你的问题是什么。为了决定你要做什么,你必须查看你的成功标准,探索你的数据,运行实验,然后做出你的决定。
你现在将转向许多机器学习算法的另一个头痛问题:异常值。
处理异常值
你参加这次学习之旅不仅仅是为了通过 AWS 机器学习专业考试,更是为了成为一名更好的数据科学家。从纯粹数学的角度来看,有许多不同的方式来观察异常值问题;然而,实际生活中使用的数据集是从底层业务流程中派生出来的,因此在进行异常值分析时,你必须包括业务视角。
异常值是一组数据中的非典型数据点。例如,图 4.8显示了在二维平面中绘制的一些数据点;即 x 和 y。红色点是异常值,因为它在这个数据系列中是一个非典型值。

图 4.8 – 识别异常值
处理异常值很重要,因为一些统计方法会受到它们的影响。然而,在图 4.8中,你可以看到这种行为在行动中的表现。在左侧,已经绘制了一条最佳拟合线,忽略了红色点。在右侧,同样的线被绘制,但包括了红色点。
通过忽略异常值点,你可以得出一个更好的解决方案,在前面图表的左侧计划中,因为它能够更接近大多数值。你也可以通过计算每条线相关的误差来证明这一点(你将在本书后面学到)。
值得提醒的是,你也在这本书的另一个情境中看到了异常值问题:具体来说,在表 4.10中处理缺失值时。在那个例子中,中位数被用来解决这个问题。你可以随时回去再读一遍,但此时应该非常清楚的是,中位数值比平均值(均值)值受异常值的影响较小。
你现在知道了什么是异常值以及为什么你应该处理它们。在处理异常值时,你应该始终考虑你的业务视角,但也有一些数学方法可以找到它们。现在,你准备好继续前进,看看一些异常值检测的方法。
你已经学习了最常见的方法:z 分数。在表 4.7中,你看到了一个包含一组年龄的表格。再次查阅它以刷新你的记忆。在该表格的最后一列,根据图 4**.4中显示的方程计算了每个年龄的 z 分数。
这些 z 分数值没有明确的范围;然而,在无异常的正态分布中,它们大多在-3 和 3 之间。记住:z 分数将给出分布均值的标准差数。表 4.10显示了正态分布的一些属性:

图 4.9 – 正态分布特性。图片改编自 https://pt.wikipedia.org/wiki/Ficheiro:The_Normal_Distribution.svg
根据正态分布特性,95%的值将属于平均值的-2 和 2 个标准差范围内的范围,而 99%的值将属于-3 和 3 个标准差范围内的范围。回到异常值检测的上下文中,你可以在这些 z 分数值上设置阈值,以指定一个数据点是否为异常值!
没有一个标准的阈值可以用来分类异常值。理想情况下,你应该查看你的数据,看看什么对你更有意义……通常(这不是规则),你将使用均值 2 到 3 个标准差之间的某个数字来标记异常值,因为根据这个规则,你的数据中不到 5%将被选中(再次强调,这只是一个参考阈值,以便你可以从进一步的结构化中选择一些数据)。你可能记得,在表 4.12中,异常值位于分布的均值以下和以上,其中异常值被标记为绝对 z 分数大于 3(为了演示的目的,值列被隐藏)。
| Value | Zscore | Is outlier? |
|---|---|---|
| ... | 1.3 | NO |
| ... | 0.8 | NO |
| ... | 3.1 | YES |
| ... | -2.9 | NO |
| ... | -****3.5 | YES |
| ... | 1.0 | NO |
| ... | 1.1 | NO |
表 4.12 – 根据 z 分数值标记异常值
在表 4.12中发现了两个异常值:第三行和第五行。另一种在数据中找到异常值的方法是应用箱线图逻辑。当你查看一个数值变量时,你可以从中提取许多描述性统计量,而不仅仅是之前看到的均值、中位数、最小值和最大值。数据分布中存在的一种属性称为分位数。
分位数是从随机变量的累积分布函数中按固定间隔建立的截止点。这些固定间隔,也称为q-分位数,在某些情况下将几乎相同大小,并且将获得特殊名称:
-
4 分位数被称为四分位数。
-
10 分位数被称为十分位数。
-
100 分位数被称为百分位数。
例如,20 百分位数(100 分位数常规区间的百分位数)指定 20%的数据分布在该点以下。在箱线图中,你可以使用 4 分位数(也称为四分位数)的常规区间来展示数据的分布(Q1 和 Q3),如图图 4**.10所示。

图 4.10 – 箱线图定义
Q1 也被称为下四分位数或 25 百分位数,这意味着 25%的数据分布在该点以下。Q3 也被称为上四分位数或 75 百分位数,这意味着 75%的数据分布在该点以下。
计算 Q1 和 Q3 之间的差异将给出四分位距(IQR)值,然后你可以使用这个值来计算箱线图的界限,如图中所示的“最小”和“最大”标签。
总的来说,你最终可以推断出,任何低于箱线图“最小”值或高于“最大”值的点都将被标记为异常值。
你现在已经了解了两种可以在数据上标记异常值的方法:z 分数和箱线图。你可以决定是否要从数据集中删除这些点,转换它们,或者创建另一个变量来指定它们的存在(如表 4.11所示)。
在继续数据准备和转换的旅程中,你将面临现实生活中其他类型的问题。接下来,你将了解到一些用例中包含被称为罕见事件的内容,这使得机器学习算法关注问题的错误方面,并提出不良解决方案。幸运的是,你将学习如何调整超参数或准备数据以促进算法收敛,同时适应罕见事件。
处理不平衡数据集
到目前为止,你可能已经意识到为什么数据准备可能是数据科学家工作中最耗时的部分。你已经学习了数据转换、缺失数据值和异常值,但问题列表还在继续。别担心——你正走在掌握这一主题的正确道路上!
机器学习模型,特别是分类问题中,另一个众所周知的问题是类别不平衡。在分类模型中,当数据集中的大多数观察值属于一个(或一些)类别(目标变量)时,可以说数据集是不平衡的。
这在欺诈识别系统中非常常见:例如,其中大多数事件属于常规操作,而极少数事件属于欺诈操作。在这种情况下,你也可以说欺诈是一个罕见事件。
对于定义数据集是否不平衡并没有强规则,这实际上取决于你的业务领域背景。大多数挑战问题将包含超过 99%的观察值属于多数类。
不平衡数据集的问题非常简单:机器学习算法将试图在训练数据中找到最佳拟合以最大化其准确性。在一个 99%的案例属于单个类的数据集中,如果没有调整,算法可能会优先考虑多数类的确定性。在最坏的情况下,它将把所有观察值分类为多数类,并忽略少数类,而这通常是我们建模罕见事件时的兴趣所在。
要处理不平衡数据集,你有两个主要方向可以选择:调整算法来处理这个问题,或者重新采样数据以使其更平衡。
通过调整算法,你必须指定分类中每个类的权重。这种类权重配置属于算法,而不是训练数据,因此它是一个超参数设置。重要的是要记住,并非所有算法都会有这种配置,也不是所有机器学习框架都会公开它。作为一个快速参考,来自 scikit-learn 机器学习库的DecisionTreeClassifier类是一个很好的例子,它实现了类权重超参数。
另一种解决不平衡问题的方法是通过对训练集应用欠采样或过采样来改变训练集。如果你决定应用欠采样,你所要做的就是从多数类中移除一些观察值,直到你得到一个更平衡的数据集。当然,这种方法的一个缺点是,你可能会丢失关于你正在移除观察值的多数类的重要信息。
最常见的欠采样方法是随机欠采样,这是一种简单的重采样方法,其中你随机从训练集中移除一些观察值。
另一方面,你可以选择进行过采样,其中你将创建少数类的新的观察值/样本。最简单的方法是简单的方法,其中你随机从训练集中选择观察值(带替换)进行复制。这种方法的一个缺点是可能存在过拟合的问题,因为你将复制/突出显示少数类的观察模式。
要避免模型欠拟合或过拟合,你应该始终在测试集上测试拟合后的模型。
重要提示
测试集不能进行欠采样或过采样:只有训练集应该通过这些重采样技术。
你也可以通过应用合成采样技术来对训练集进行过采样。随机过采样不会向训练集添加任何新信息:它只是复制现有的信息。通过创建合成样本,你是从现有样本中推导出这些新观察值(而不是简单地复制它们)。这是一种称为合成少数过采样技术(SMOTE)的数据增强技术。
技术上,SMOTE 所做的是在少数类的特征空间中绘制一条线,并提取接近该线的点。
重要提示
你可能会在考试中发现使用过 SMOTE 这个术语的问题。如果发生这种情况,请记住这个术语应用到的上下文:过采样。
好的——在下一节中,你将学习如何为机器学习模型准备文本数据。
处理文本数据
你已经学习了如何将分类特征转换为数值表示,无论是使用标签编码器、顺序编码器还是独热编码。然而,如果你的数据集中有包含长文本的字段,你该如何为它们提供数学表示,以便正确地输入机器学习算法呢?这是一个在自然语言处理(NLP)领域中的常见问题,它是人工智能的一个子领域。
NLP 模型旨在从文本中提取知识;例如,在语言之间翻译文本,识别文本语料库中的实体(也称为命名实体识别,简称NER),从用户评论中分类情感,以及许多其他应用。
重要提示
在第八章**,AWS 人工智能/机器学习应用服务中,你将了解一些将 NLP 应用于其解决方案的 AWS 应用服务,例如 Amazon Translate 和 Amazon Comprehend。在考试中,你可能会被要求思考构建某些类型的 NLP 应用程序最快或最简单的方法(开发工作量最少)。最快或最简单的方法通常是使用那些现成的 AWS 服务,因为它们为某些用例提供了预训练模型(特别是机器翻译、情感分析、主题建模、文档分类和实体识别)。
在接下来的几章中,你还将了解一些用于 NLP 应用的内置 AWS 算法,例如 BlazingText、潜在狄利克雷分配(LDA)、神经主题建模(NTM)和序列到序列算法。这些算法也让你能够创建与那些现成的服务相同的 NLP 解决方案;然而,你必须使用 SageMaker 并编写自己的解决方案。换句话说,它们提供了更多的灵活性,但需要更多的开发工作量。
请记住这一点,以备考试之用!
尽管 AWS 提供了许多现成的服务和内置算法,允许你创建 NLP 应用程序,但你现在不会查看这些 AWS 产品功能(你将在第六章**,应用机器学习算法和第八章**,AWS 人工智能/机器学习应用服务)。你将通过查看一些对准备数据用于 NLP 至关重要的数据准备技术来完成本章。
词袋模型
你将学习的第一种方法是称为词袋(BoW)。这是一种非常常见且简单的技术,应用于文本数据,它创建矩阵表示来描述文本中的单词数量。BoW 包括两个主要步骤:创建词汇表和创建表示文本中已知词汇出现的表示。这些步骤可以在图 4**.11中看到。11.*

图 4.11 – BoW 在行动
首先,通常不能使用原始文本来准备 BoW 表示。有一个数据清洗步骤,其中将文本转换为小写;将每个单词拆分为标记;删除标点符号、非字母字符和停用词;并在必要时,应用任何其他你可能想要的定制清洗技术。
一旦你清洗了原始文本,你可以将每个单词添加到全局词汇中。技术上,这通常是一个包含元组的字典,形式为{(word, number of occurrences)}——例如,{(apple, 10), (watermelon, 20)}。如我之前提到的,这是一个全局字典,你应该考虑你正在分析的所有文本。
现在,有了清洗后的文本和更新的词汇表,你可以以矩阵的形式构建文本表示,其中每一列代表全局词汇中的一个单词,每一行代表你已分析的文本。你如何在每一行中表示这些文本可能因不同的策略而异,例如二进制、频率和计数。接下来,你将更深入地学习这些策略。
在图 4**.11中,正在使用 BoW 的三个不同策略处理单个文本片段。这就是为什么你可以在表格中看到三行,而不是一行(在实际场景中,你必须从中选择一个进行实现)。
在第一行,使用了二进制策略,如果单词存在于全局词汇中,则分配 1,否则分配 0。因为词汇是在单个文本上构建的,所以该文本中的所有单词都属于词汇(这就是为什么在二进制策略中只能看到 1 的原因)。
在第二行,使用了频率策略,该策略会检查文本中每个单词出现的次数,并将其除以文本中单词的总数。例如,单词“this”只出现一次(1),而文本中还有七个其他单词(7),所以 1/7 等于 0.14。
最后,在第三行,使用了计数策略,这是一种简单的对文本中每个单词出现次数的计数。
重要提示
这个提示非常重要——你很可能在考试中会遇到它。你可能已经注意到,BoW 矩阵在列中包含唯一的单词,并且每个文本表示都在行中。如果你有 100 篇较长的文本,其中只有 50 个唯一的单词,那么你的 BoW 矩阵将有 50 列和 100 行。在考试期间,你很可能会收到一份文本列表,并被要求准备 BoW 矩阵。
你还应该了解关于 BoW 的一个极其重要的概念,那就是 n-gram 配置。n-gram 这个术语用来描述你希望如何查看你的词汇,无论是通过单个单词(uni-gram)、两个单词的组合(bi-gram)、三个单词的组合(tri-gram),甚至是n个单词的组合(n-gram)。到目前为止,你已经看到了使用 uni-gram 方法的 BoW 表示,但更复杂的 BoW 表示可能使用 bi-gram、tri-gram 或 n-gram。
主要逻辑本身并没有改变,但你需要知道如何在 BoW 中表示 n-gram。仍然以图 4**.11中的例子为例,bi-gram 方法会以以下方式组合这些单词:[这部电影,电影真的很,真的很棒,好尽管,尽管老,老制作]。在考试之前,请确保你理解这一点。
重要提示
BoW 的强大和简单之处在于你可以轻松地构建一个训练集来训练你的算法。如果你看*图 4**.11,你能看到拥有更多数据和仅仅在表中添加一个分类列,比如好评或差评,这将使我们能够训练一个二元分类模型来预测情感吗?
好吧——你可能已经注意到,你被介绍到的许多令人惊叹的技术都伴随着一些缺点。BoW 的问题在于维护其词汇的挑战。你很容易看到,在一个巨大的文本语料库中,词汇量往往会变得越来越大,矩阵表示往往会变得稀疏(是的——又是稀疏性问题)。
解决词汇量问题的一个可能方法是通过使用词哈希(在机器学习中也称为哈希****技巧)。哈希函数将任意大小的数据映射到固定大小的数据。这意味着你可以使用哈希技巧用固定数量的特征来表示每个文本(无论词汇的大小)。技术上,这个哈希空间允许碰撞(不同的文本由相同的特征表示),所以在实现特征哈希时需要考虑这一点。
TF-IDF
BoW 伴随的另一个问题是,特别是当你使用频率策略构建特征空间时,更频繁的单词会因为文档中的高出现次数而显著提高它们的分数。结果是,这些高频率出现的单词往往是文档的关键词,而只是其他在几篇其他文档中也出现多次的单词。
词频-逆文档频率(TF-IDF)通过检查它们在其他文档中的频率并使用这些信息来重新调整文档中单词的频率来惩罚这些类型的单词。
在这个过程结束时,TF-IDF 往往会给文档特有的单词(文档特定单词)赋予更多的重要性。接下来,让我们看看一个具体的例子,以便你能深入理解。
考虑这样一个文本语料库,它包含 100 个单词,而单词“Amazon”出现了三次。这个单词的词频(TF)将是 3/100,等于 0.03。现在,假设你有其他 1,000 个文档,而单词“Amazon”在这 1,000 个文档中出现了 50 次。在这种情况下,逆文档频率(IDF)将由对数给出,即 1,000/50,等于 1.30。在分析的具体文档中,单词“Amazon”的 TF-IDF 分数将是 TF * IDF 的乘积,即 0.03 * 1.30(0.039)。
假设不是 50 个文档,单词“Amazon”也出现在另外 750 个文档上——换句话说,比之前的场景出现频率要高得多。在这种情况下,这个方程的 TF 部分不会改变——它仍然是 0.03。然而,IDF 部分会略有变化,因为这次它将是 1,000/750 的对数,等于0.0036。正如你所看到的,现在单词“Amazon”的重要性比之前的例子要小得多。
词嵌入
与传统的如 BoW 和 TD-IDF 方法不同,现代文本表示方法将注意信息的上下文,以及单词的存在或频率。遵循这一概念的一个非常流行且强大的方法被称为词嵌入。词嵌入创建一个固定长度的密集向量,可以存储关于文档上下文和意义的信息。
每个单词在多维超平面中用一个数据点表示,这被称为嵌入空间。这个嵌入空间将有 n 个维度,其中每个维度都指代这个密集向量中的一个特定位置。
虽然这可能听起来很复杂,但这个概念实际上非常简单。假设你有一份包含四个单词的列表,你想要在五维嵌入空间中绘制这些单词。这些单词是 king、queen、live 和 castle。表 4.13展示了如何做到这一点。
| 维度 1 | 维度 2 | 维度 3 | 维度 4 | 维度 5 | |
|---|---|---|---|---|---|
| 国王 | 0.22 | 0.76 | 0.77 | 0.44 | 0.33 |
| 王后 | 0.98 | 0.09 | 0.67 | 0.89 | 0.56 |
| 直播 | 0.13 | 0.99 | 0.88 | 0.01 | 0.55 |
| 城堡 | 0.01 | 0.89 | 0.34 | 0.02 | 0.90 |
表 4.13 – 嵌入空间表示
忘记表 4.13中的假设数字,专注于数据结构;你会发现现在每个单词在嵌入空间中由n个维度表示。将单词转换为向量的这个过程可以通过许多不同的方法来完成,但最流行的方法是 word2vec 和 GloVe。
一旦每个单词都被表示为一个固定长度的向量,你就可以应用许多其他技术来完成你需要的事情。一个非常常见的任务是将这些“单词”(实际上,它们的维度)绘制在超平面中,并直观地检查它们彼此之间的接近程度!
技术上,你不会直接用这个来绘制它们,因为人类大脑无法解释超过三个维度。此外,你通常应用一种降维技术(例如你稍后将要学习的主成分分析),将维度数量减少到两个,并最终在笛卡尔平面上绘制单词。这就是为什么你可能看到表 4.15底部的图片。你有没有想过如何在图表上绘制单词?

图 4.12 – 绘制单词
接下来,你将学习如何构建图 4.12中显示的五个维度。同样,有不同方法来完成这个任务,但你将学习最流行的方法,它使用一个固定上下文窗口的共现矩阵。
首先,你必须想出一些逻辑来表示每个词,同时记住你还要考虑它们的上下文。为了解决上下文需求,你需要定义一个固定上下文窗口,它将负责指定将有多少词被分组在一起进行上下文学习。例如,假设这个固定上下文窗口为 2。
接下来,你将创建一个共现矩阵,该矩阵将根据预定义的上下文窗口计算每一对词出现的次数。考虑以下文本:“I will pass this exam, you will see. I will pass it。”
第一词“pass”的上下文窗口将是以下这些加粗的词:“I will pass this exam, you will see. I will pass it.” 考虑到这个逻辑,看看每一对词在上下文窗口中出现的次数(图 4.13)。

图 4.13 – 共现矩阵
如你所见,当使用大小为 2 的上下文窗口时,“I will”这对词出现了三次:
-
我会通过这次考试,你将会看到。我会通过它。
-
我会通过这次考试,你会看到。我会通过它。
-
我会通过这次考试,你将会看到。我会通过它。
查看图 4.13,应将相同的逻辑应用于所有其他词对,将“…”替换为相关的出现次数。你现在为每个词都有一个数值表示了!
重要提示
你应该知道,除了固定上下文窗口的共现矩阵之外,还有许多替代方案,例如使用 TD-IDF 向量化或甚至更简单的每篇文档的单词计数器。这里最重要的信息是,无论如何,你必须为每个词提供一个数值表示。
最后一步是最终找到表 4.13中显示的那些维度。你可以通过创建一个多层模型来完成这个任务,通常基于神经网络,其中隐藏层将代表你的嵌入空间。图 4.14显示了一个简化的例子,其中可以将图 4.13中显示的单词压缩到五个维度的嵌入空间中:

图 4.14 – 使用神经网络构建嵌入空间
你将在本书的后面部分更详细地了解神经网络。现在,理解嵌入向量来自何处已经是一项了不起的成就!
在建模自然语言问题时,你应该记住的另一件重要事情是,你可以在你的模型中重用预训练的嵌入空间。一些公司已经创建了基于数十亿文档训练的现代神经网络架构,这些架构已经成为该领域的尖端技术。为了参考,请查看由谷歌提出的双向编码器表示(BERT),它已被数据科学社区和行业广泛使用。
现在,你已经到达了关于数据准备和转换的漫长但非常重要的章节的结尾。利用这个机会,快速回顾一下你所学到的了不起的东西。
摘要
首先,你被介绍到你可能需要与之一起工作的不同类型的特征。确定你将处理变量的类型对于定义可以应用于每种情况的转换类型和技术非常重要。
然后,你学习了如何处理分类特征。你看到有时分类变量确实有顺序(例如有序变量),而有时则没有(例如名义变量)。你了解到独热编码(或虚拟变量)可能是名义特征最常用的转换类型;然而,根据唯一类别的数量,在应用独热编码后,你的数据可能会出现稀疏性问题。至于有序特征,你不应该在它们之上创建虚拟变量,因为这会使你失去变量中已包含的顺序信息。在这些情况下,有序编码是最合适的转换。
你继续你的旅程,通过查看数值特征,你学习了如何处理连续和离散数据。你了解了最重要的转换类型,例如归一化、标准化、分箱和离散化。你看到某些类型的转换依赖于底层数据来找到它们的参数,因此非常重要,避免使用测试集从数据中学习任何东西(它必须严格仅用于测试)。
你也看到了,你甚至可以将纯数学应用到你的数据转换中;例如,你了解到幂变换可以用来减少特征的偏度,使其更接近正态分布。
之后,你研究了缺失数据,并了解了这项任务的重要性。当你建模时,不能将缺失值视为一个简单的计算问题,其中你只需用y替换x。这是一个更大的问题,你需要通过探索你的数据并检查你的缺失数据是否是随机生成的来开始解决这个问题。
当你决定删除或替换缺失数据时,你必须意识到你可能会丢失信息或向数据集添加偏差。请记住回顾本章的所有重要笔记,因为它们可能与你考试的相关性很大。
你还学习了如何进行异常值检测。你了解了寻找异常值的不同方法,例如 z 分数和箱线图方法。最重要的是,你学习了你可以标记或平滑它们。
在开始时,你被建议本章将是一次漫长但值得的关于数据准备之旅。你也已经学会了如何处理罕见事件,因为这是机器学习中最具挑战性的问题之一。现在你意识到,有时你的数据可能是不平衡的,你必须要么通过改变类别权重来欺骗你的算法,要么通过下采样或过采样来重新采样你的数据。
最后,你学习了如何处理用于 NLP 的文本数据。你现在应该能够手动计算 BoW 和 TF-IDF 矩阵!你甚至更深入地学习了词嵌入的工作原理。在本小节中,你了解到你可以创建自己的嵌入空间(使用许多不同的方法)或重用预训练的嵌入,例如 BERT。
你已经完成了!在下一章中,你将深入探讨数据可视化技术。
考试准备练习 – 章节复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的重要技能。这就是为什么在学习的早期阶段就培养这些技能至关重要。
章节复习题旨在通过学习并复习每个章节的关键概念来逐步提高你的应试技巧。你将在每个章节的末尾找到这些复习题。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线实践资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH04。或者,你可以扫描以下二维码(图 4.15):

图 4.15 – 为登录用户打开章节复习题的二维码
- 一旦你登录,你将看到一个类似于图 4.16所示的页面:

图 4.16 – 第四章复习题
- 准备就绪后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不必担心时间限制。
尝试 1
第一次尝试,目标至少是 40%。查看你答错的答案,并再次阅读章节中的相关部分,以填补学习上的差距。
尝试 2
第二次尝试,目标至少是 60%。查看你答错的答案,并再次阅读章节中的相关部分,以填补任何剩余的学习差距。
尝试 3
第三次尝试,目标至少是 75%。一旦得分达到 75% 或以上,你就可以开始练习时间管理。
小贴士
你可能需要超过 三次 尝试才能达到 75%。这没关系。只需复习章节中的相关部分,直到达到目标。
练习时间管理
目标:你的目标是保持分数不变,同时尽可能快地回答这些问题。以下是你下一次尝试的示例:
| 尝试 | 分数 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分钟 30 秒 |
| 尝试 6 | 78% | 18 分钟 34 秒 |
| 尝试 7 | 76% | 14 分钟 44 秒 |
表 4.14 – 在线平台上的样本时间练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,为每次尝试设定自己的时间限制。
每次新的尝试,你的分数应保持在 75% 以上,而完成所需的时间“应减少”。重复尝试,直到你觉得自己能够自信地应对时间压力。
第五章:数据理解和可视化
数据可视化是一门艺术!无论你和你团队在数据准备和建模的初步分析上投入了多少努力,如果你不知道如何有效地展示你的发现,你的听众可能无法理解你试图传达的观点。
通常,当你处理决策者时,这种状况可能会变得更糟。例如,如果你选择了错误的图表集来讲述一个特定的故事,人们可能会误解你的分析并做出糟糕的决策。
理解不同类型的数据可视化,并知道它们如何与每种分析类型相匹配,将使你在吸引听众和传达你想要的信息方面处于非常有利的地位。
在本章中,你将了解一些数据可视化技术。你将涵盖以下主题:
-
在你的数据中可视化关系
-
在你的数据中可视化比较
-
在你的数据中可视化组成
-
在你的数据中可视化分布
-
构建关键绩效指标
-
介绍 QuickSight
你已经知道为什么你需要掌握这些主题。开始吧!
在你的数据中可视化关系
当你需要展示数据中的关系时,你通常是在谈论在图表中绘制两个或更多变量以可视化它们的依赖程度。散点图可能是展示两个变量之间关系的最常见图表类型。图 5.1 展示了两个变量 X 和 Y 的散点图。

图 5.1 – 使用散点图绘制关系
图 5.1 显示了 X 和 Y 之间清晰的关系。随着 X 的增加,Y 也增加。在这种情况下,你可以这样说,这两个变量之间存在线性关系。请记住,散点图也可能捕捉到其他类型的关系,而不仅仅是线性关系。例如,也可能会在两个变量之间找到指数关系。
另一个很好的图表用于比较的是 气泡图。就像散点图一样,它也会显示变量之间的关系;然而,在这里,你可以使用第三个维度,它将由点的尺寸来表示。
图 5.2 是一个气泡图,它解释了一个投资方案,其中 x 轴是年利率,y 轴是投资期限,气泡的大小表示分配给每个投资选项的金额。

图 5.2 – 使用气泡图绘制关系
查看图 5.2,你可以看到两种类型的关系。第一种是年度率和投资期限之间的关系:投资期限越长,年度率越高。第二种是投资金额和年度率之间的关系:投资金额越高,年度率越高。正如你所看到的,这是一种非常有效的展示此类分析的方式。接下来,你将学习如何比较变量。
在你的数据中可视化比较
比较在数据分析中非常常见,并且有不同方式来展示它们。从条形图开始,你可能已经看到过许多使用这种可视化类型的报告。
条形图可以用来比较不同类别中的一个变量——例如,不同型号的汽车价格或按国家划分的人口规模。在图 5.3中,条形图用于分析截至 2020 年 4 月 7 日印度一系列地区的 COVID-19 阳性测试百分比。

图 5.3 – 使用条形图进行对比(来源:印度国家卫生部门)
有时,你还可以使用堆积柱状图为正在分析的数据添加另一个维度。例如,图 5.4使用堆积条形图展示了根据性别在泰坦尼克号上的人数。此外,它还按性别细分了幸存者(正类)和未幸存者(负类)的人数。

图 5.4 – 使用堆积条形图分析泰坦尼克号灾难数据集
如你所见,大多数女性在灾难中幸存,而大多数男性没有。堆积条形图帮助我们可视化了不同性别的命运差异。最后,你应该知道你还可以在那些堆积条形图上显示百分比,而不仅仅是绝对数字。
柱状图在需要比较不同时期的一个或两个变量时也非常有用。例如,在图 5.5中,你可以看到按省份划分的加拿大年度电动汽车销量。

图 5.5 – 使用柱状图进行对比(来源:electrek.co/)
另一种在不同时期进行对比的非常有效的方法是使用折线图。图 5.6展示了如何在一个特定项目中,通过不同的发布日期比较不同算法的性能。
重要提示
折线图通常非常有帮助,可以指示在分析的时间段内数据是否存在任何趋势。折线图的一个非常常见的用途是预测,通常需要分析时间序列数据中的趋势和季节性。
例如,在图 5.6中,你可以看到分类和回归树(CART)模型与其他算法(如AdaBoost(ADA)、梯度提升(GB)、随机森林(RF)和逻辑回归(LOGIT))相比,曾经是表现最差的模型。
然而,在七月,CART 模型得到了优化,结果证明它是所有其他模型中表现第三好的模型。每个时期最佳模型的全貌可以很容易地在图 5.6中看到。

图 5.6 – 使用折线图进行绘图比较
最后,你也可以使用表格来展示你数据的比较。当你有多个维度(通常放在表格的行中)和一到多个指标进行比较时(通常放在表格的列中),表格更有用。
在下一节中,你将了解另一组旨在展示变量分布的图表。这组图表对于建模任务尤为重要,因为你必须知道特征的分布才能考虑潜在的数据转换。
在你的数据中可视化分布
探索你特征的分布对于理解其一些关键特征非常重要,例如其偏度、均值、中位数和分位数。你可以通过绘制直方图轻松地可视化偏度。这种类型的图表将你的数据分组到桶或桶中,并在其上执行计数。例如,图 5.7显示了年龄变量的直方图:

图 5.7 – 使用直方图绘制分布
通过观察直方图,你可以得出结论,大多数人年龄在 20 到 50 岁之间。你还可以看到一些超过 60 岁的人。另一个直方图的例子是图 5.8,它绘制了来自具有不同票价特定事件的支付分布。它的目的是分析人们为每张票支付多少钱。

图 5.8 – 使用直方图检查偏度
在这里,你可以看到大多数人每张票支付最多 100 美元。这就是为什么你可以看到向右偏斜的分布(尾部)的原因。
如果你想要看到分布的其他特征,例如它的中位数、分位数和异常值,那么你应该使用箱线图。在图 5.9中,可以看到在给定数据集中不同算法的另一个性能比较。
这些算法在交叉验证过程中执行了多次,产生了同一算法的多个输出;例如,每个折叠上算法执行的每个准确度指标。
由于每个算法都有多个准确度指标,你可以使用箱线图来检查这些算法在交叉验证过程中的表现。

图 5.9 – 使用箱线图绘制分布
在这里,你可以看到箱线图可以展示一些关于数据分布的信息,例如它的中位数、下四分位数、上四分位数和异常值。为了完全理解箱线图的每个元素,请查看 图 5.10。

图 5.10 – 箱线图元素
通过分析 图 5.9 中显示的箱线图,你可以得出结论,ADA 算法在交叉验证过程中呈现了一些异常值,因为其中一个执行结果非常好(大约 92% 的准确率)。AdaBoost 的所有其他执行结果都低于 85% 的准确率,中位数约为 80%。
在分析 图 5.9 后,你可以得出另一个结论,即 CART 算法在交叉验证过程中表现最差(中位数和下四分位数最低)。
在你总结这一部分之前,请注意,你也可以使用散点图来分析当你有多个变量时的数据分布。接下来,你将查看另一组图表,这些图表对于展示数据中的组成非常有用。
可视化数据中的组成
有时,你想分析组成一个特征的各种元素——例如,每个地区的销售额百分比或每个渠道的查询百分比。在这两个例子中,它们没有考虑任何时间维度;相反,它们只是查看整个数据点。对于这些类型的组成,在没有时间维度的情况下,你可以使用饼图、堆叠 100% 条形图和 树状图来展示你的数据。
图 5.11 是一个饼图,显示了在预定义时间段内每个客户渠道的查询数量。

图 5.11 – 使用饼图绘制组成
如果你想在考虑时间维度的同时展示组成,那么你最常见的选项是堆叠面积图、堆叠 100% 面积图、堆叠柱状图或堆叠 100% 柱状图。为了参考,请查看 图 5.12,它显示了从 2016 年到 2020 年各地区的销售额。

图 5.12 – 使用堆叠 100% 柱状图绘制组成
如你所见,堆叠 100% 柱状图帮助我们理解不同时间段的组成。
构建关键性能指标
在您完成这些数据可视化部分之前,您需要了解 关键 性能指标,或简称 KPI。
KPI 通常是一个单一值,描述了业务指标的结果,例如客户流失率、净推荐值 (NPS)、投资回报率 (ROI) 等。尽管不同行业之间存在一些标准指标,但您通常需要根据公司的需求构建自定义指标。
实话实说,与指标相关的最复杂挑战并不在于其可视化本身,而在于它们是如何构建的(所使用的规则)以及它们将在公司不同层级之间如何被传达和使用。
从可视化角度来看,就像任何其他单一值一样,您可以使用您所了解的所有图表来分析您的指标,具体取决于您的需求。然而,如果您只想展示您的 KPI,没有时间维度,您可以使用一个 小部件。
好的,这些都是您在 AWS Certified Machine Learning – Specialty 考试中应该了解的数据可视化的重要主题。现在,让我们来看看 QuickSight,这是一个 AWS 服务,您可以在其中实现您刚刚学到的所有可视化技术。
介绍 QuickSight
Amazon QuickSight 是一种基于云的分析服务,允许您构建数据可视化和即席分析。QuickSight 支持多种数据源,例如 Redshift、Aurora、Athena、RDS 以及您本地的数据库解决方案。
其他数据源包括 S3,您可以从 Excel、CSV 或日志文件中检索数据,以及 软件即服务 (SaaS) 解决方案,您可以从 Salesforce 实体中检索数据。
Amazon QuickSight 有两个版本:
-
标准版
-
企业版
这两个版本之间最重要的区别是它们与 Microsoft Active Directory (AD) 的集成可能性以及静态加密。这两个功能仅在企业版中提供。
重要提示
请记住,AWS 服务不断演变,因此标准版和企业版之间可能在未来出现更多差异。您应始终查阅 AWS 服务的最新文档,以检查有什么新内容。
在访问管理方面,QuickSight 提供了一个非常简单的界面,您可以使用它来控制用户访问。在标准版中,您邀请用户加入 QuickSight 账户有两个主要选项:
-
您可以邀请 IAM 用户。
-
您可以向电子邮件地址发送邀请。
如果您邀请 IAM 用户,那么他们可以自动登录到您的账户并查看或编辑您的可视化,具体取决于您在 QuickSight 用户创建过程中提供的权限类型。如果您邀请了一个电子邮件地址,那么电子邮件的所有者必须访问他们的邮箱来完成此操作。
删除用户也是简单的。在删除用户时,您必须提供的额外信息是您是否希望将孤立的资源转移到您的账户中的另一个用户或者删除所有用户的资源。
如果您正在使用企业版,此过程授权用户可能会有所不同,因为您有 AD 在为您工作。在这种情况下,您可以授予 AD 组访问权限,并且来自这些组的所有用户都将获得对 QuickSight 账户的访问权限。
此外,请记住,在两个版本中,所有数据传输都是加密的;然而,您只能在企业版中找到静态加密。
当您将数据带入 QuickSight 时,您实际上在创建所谓的数据集。数据集反过来以优化的结构导入 QuickSight,称为超级快速、并行、内存计算引擎(SPICE)。这就是为什么 QuickSight 可以对大数据进行数据可视化。
最后,您应该知道 QuickSight 不仅允许您绘制数据,还可以执行一些小数据准备任务,例如重命名字段、计算新字段、更改数据类型、准备查询以从源检索数据以及连接来自同一源的数据表。
总结使用 QuickSight 的主要步骤:
-
用户创建和授权。
-
连接到数据源。
-
将数据带入数据集。
-
您的数据集将被导入到SPICE中。
-
从数据集中,您可以创建一个分析。
-
最后,在您的分析中,您可以添加视觉元素。
-
如果您想更进一步,您可以创建分析快照并将其放置在仪表板中。或者,您可以将分析分组为故事。
这就带您结束了关于数据可视化的这一章!现在,花点时间回顾一下您所学的内容。
摘要
您在本章开始时学习了如何可视化数据中的关系。散点图和气泡图是这一类别中最重要的图表,分别用于展示两个或三个变量之间的关系。
然后,您转向了数据可视化的另一类别,其目的是在数据中进行比较。您可以使用最常见的图表来展示比较,如柱状图、条形图和折线图。表格也很有用,可以展示比较。
您接下来学习的是可视化数据分布。用于展示分布的最常见图表类型是直方图和箱线图。
然后,你转向了组合。当你想要展示构成数据的不同元素时,你可以使用这组图表。在展示组合时,你必须意识到你想要展示的是静态数据还是随时间变化的数据。对于静态数据,你应该使用饼图、堆叠的 100% 柱状图或树状图。对于随时间变化的数据,你应该使用堆叠面积图、堆叠 100% 面积图、堆叠柱状图或堆叠 100% 柱状图。
本章的最后部分是为 QuickSight 保留的,QuickSight 是一种 AWS 服务,你可以使用它来可视化你的数据。你了解了服务的不同版本和功能,然后介绍了 SPICE。
干得好!在下一章中,你将学习机器学习算法。这将是你认证旅程中非常重要的一章,所以请确保你已经准备好了!然而,在你跳入新章节之前,花点时间再为考试练习一下!
考试准备练习 – 章节复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的关键技能。这就是为什么在学习的早期阶段就培养这些技能至关重要。
章节复习题旨在随着你学习并复习每一章的内容,逐步提高你的应试技巧,同时复习章节中关键概念的理解。你可以在每个章节的末尾找到这些复习题。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线练习资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH05。或者,你可以扫描以下二维码(图 5.13):

图 5.13 – 为登录用户打开章节复习题的二维码
- 一旦登录,你会看到一个类似于 图 5.14 所示的页面:

图 5.14 – 第五章的章节复习题
- 准备就绪后,开始以下练习,多次尝试测验。
考试准备练习
对于前三次尝试,不要担心时间限制。
尝试 1
第一次,目标至少达到 40%。看看你答错的答案,并再次阅读章节中相关的部分,以填补你的学习差距。
尝试 2
第二次,目标至少达到 60%。看看你答错的答案,并再次阅读章节中相关的部分,以填补任何剩余的学习差距。
尝试 3
第三次尝试,目标至少达到75%。一旦得分达到 75% 或更高,你就可以开始练习时间管理。
小贴士
你可能需要超过三次尝试才能达到 75%。这没关系。只需复习章节中的相关部分,直到你达到目标。
练习时间管理
目标:你的目标是保持分数不变,同时尽可能快地回答这些问题。以下是你下一次尝试的示例:
| 尝试 | 分数 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分 30 秒 |
| 尝试 6 | 78% | 18 分 34 秒 |
| 尝试 7 | 76% | 14 分 44 秒 |
表 5.1 – 在线平台上的样本时间练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,为每次尝试设定自己的时间限制。
每次新的尝试,你的分数应该保持在75%以上,而完成所需的时间应该“减少”。重复尽可能多的尝试,直到你觉得自己能够应对时间压力。
第六章:应用机器学习算法
在上一章中,你学习了关于数据理解和可视化的知识。现在是时候进入建模阶段,研究机器学习算法了!在早期章节中,你了解到构建机器学习模型需要大量关于 AWS 服务、数据工程、数据探索、数据架构等方面的知识。这次,你将更深入地研究已经介绍过的算法以及更多内容。
对不同类型算法和机器学习方法的良好理解将使你在项目决策中处于非常有利的地位。当然,这种知识对于 AWS 认证机器学习专业考试也是至关重要的。
请记住,有数千种算法存在。你甚至可以为特定问题提出自己的算法。在本章中,你将了解最相关的算法,并希望这些算法你可能在考试中遇到。
本章的主要内容包括以下几方面:
-
存储训练数据
-
关于集成模型的说明
-
监督学习:
-
回归模型
-
分类模型
-
预测模型
-
Object2Vec
-
无监督学习:
-
聚类
-
异常检测
-
维度约简
-
IP 洞察
-
文本分析(自然语言处理)
-
图像处理
-
强化学习
好的,拿杯咖啡,享受这个过程吧!
介绍本章
在本章中,你将了解几种算法、建模概念和学习策略。所有这些话题对于你在考试和作为数据科学家职业生涯中的知识都是有益的。
本章的结构不仅涵盖了考试所需的必要主题,还让你对最重要的学习策略有一个很好的了解。例如,考试将检查你对 K-Means 基本概念的了解。然而,本章将更深入地探讨这一点,因为这对于你作为数据科学家的职业生涯来说是一个重要的话题。
本章将采用深入探讨某些类型模型算法逻辑的方法,这些模型是每位数据科学家都应该掌握的。此外,请记住:有时你可能需要比考试预期更深入地学习,但这对你职业生涯来说将极其重要。
在本章中,你将多次看到术语内置算法。这个术语将用来指代 AWS 在他们的 SageMaker SDK 中实现的算法列表。
这里有一个具体的例子:你可以使用 scikit-learn 的K 最近邻算法,或简称 KNN(如果你不记得 scikit-learn 是什么,可以通过回到*第一章**“机器学习基础”来刷新你的记忆)来创建一个分类模型并将其部署到 SageMaker。然而,AWS 也在其 SDK 中提供了 KNN 算法的自己的实现,该实现针对 AWS 环境进行了优化。在这里,KNN 是一个内置算法的例子。
在 AWS 上的可能性是无限的,因为你可以利用内置算法,或者引入你自己的算法来在 SageMaker 上创建模型。最后,为了使这一点非常清楚,这里有一个从 AWS SDK 导入内置算法的例子:
import sagemaker
knn = sagemaker.estimator.Estimator(get_image_uri(boto3.Session().region_name, "knn"),
get_execution_role(),
train_instance_count=1,
train_instance_type='ml.m5.2xlarge',
output_path=output_path,
sagemaker_session=sagemaker.Session())
knn.set_hyperparameters(**hyperparams)
你将在*第九章**“Amazon SageMaker 建模”中学习如何在 SageMaker 上创建模型。目前,你只需了解 AWS 有一套自己的库,其中实现了这些内置算法。
要训练和评估一个模型,你需要训练数据和测试数据。在实例化你的估计器之后,你应该用这些数据集来喂养它。不要破坏*第九章“Amazon SageMaker 建模”,但你应该提前了解数据通道**的概念。
数据通道是与输入数据相关的配置,你可以在创建训练作业时将其传递给 SageMaker。你应该设置这些配置,只是为了通知 SageMaker 你的输入数据是如何格式化的。
在*第九章**“Amazon SageMaker 建模”中,你将学习如何创建训练作业以及如何设置数据通道。到目前为止,你应该知道在配置数据通道时,你可以设置一个ContentType和一个TrainingInputMode。现在,你将更详细地了解训练数据应该如何存储,以便能够与 AWS 的内置算法正确集成。
存储训练数据
首先,你可以使用多个 AWS 服务来准备机器学习的数据,例如弹性映射减少(EMR),Redshift,Glue 等。在预处理训练数据后,你应该将其存储在 S3 中,以算法期望的格式存储。表 6.1显示了每个算法可接受的数据格式列表。
| 数据格式 | 算法 |
|---|---|
Application/x-image |
目标检测算法,语义分割 |
Application/x-recordio |
目标检测算法 |
Application/x-recordio-protobuf |
因子分解机,K-Means,KNN,潜在狄利克雷分配,线性学习器,NTM,PCA,RCF,序列到序列 |
Application/jsonlines |
BlazingText, DeepAR |
Image/.jpeg |
目标检测算法,语义分割 |
Image/.png |
目标检测算法,语义分割 |
Text/.csv |
IP Insights, K-Means, KNN, 潜在狄利克雷分配,线性学习器,NTM,PCA,RCF,XGBoost |
Text/.libsvm |
XGBoost |
表 6.1 – AWS 算法可接受的每种数据格式
如你所见,许多算法接受Text/.csv格式。如果你想使用该格式,你应该遵循以下规则:
-
你的 CSV 文件不能有标题记录。
-
对于监督学习,目标变量必须在第一列。
-
在配置训练管道时,将输入数据通道设置为
content_type等于text/csv。 -
对于无监督学习,在
content_type中设置label_size,如下所示:'content_type=text/csv;label_size=0'。
虽然对于许多用例来说,text/.csv格式是可行的,但大多数情况下,AWS 的内置算法与recordIO-protobuf配合得更好。这是一种用于训练 AWS 内置算法的优化数据格式,其中 SageMaker 将数据集中的每个观测值转换为二进制表示,即一组 4 字节的浮点数。
RecordIO-protobuf 接受两种输入模式:管道模式和文件模式。在管道模式下,数据将直接从 S3 流式传输,这有助于优化存储。在文件模式下,数据将从 S3 复制到训练实例的存储卷中。
你几乎准备好了!现在你可以快速查看一些建模定义,这将帮助你理解一些更高级的算法。
关于集成模型的一些话
在你开始深入研究算法之前,有一个重要的建模概念你应该了解——集成。集成这个术语用来描述使用多个算法来创建模型的方法。
一个不实现集成方法的常规算法将依赖于单个模型来训练和预测目标变量。这就是当你创建决策树或回归模型时发生的情况。另一方面,实现集成方法的算法将依赖于多个模型来预测目标变量。在这种情况下,由于每个模型可能会对目标变量提出不同的预测,集成算法实现了一个投票系统(用于分类模型)或平均系统(用于回归模型)来输出最终结果。表 6.2展示了由三个模型组成的集成算法的一个非常简单的投票系统。
| 交易 | 模型 A | 模型 B | 模型 C | 预测 |
|---|---|---|---|---|
| 1 | 欺诈 | 欺诈 | 非欺诈 | 欺诈 |
| 2 | 非欺诈 | 非欺诈 | 非欺诈 | 非欺诈 |
| 3 | 欺诈 | 欺诈 | 欺诈 | 欺诈 |
| 4 | 非欺诈 | 非欺诈 | 欺诈 | 非欺诈 |
表 6.2 – 集成方法中投票系统的一个示例
如前所述,同样的方法也适用于回归问题,其中不是投票,而是可以平均每个模型的预测结果,并使用该结果作为输出。
投票和平均只是集成方法的两个例子。其他强大的技术包括混合和堆叠,其中你可以创建多个模型,并将每个模型的输出作为主模型的特征。回顾一下 表 6.2,模型 A、模型 B 和 模型 C 的列可以用作预测最终结果的特性。
结果表明,许多机器学习算法在训练过程中使用集成方法,以嵌入式的方式。这些算法可以分为两大类:
-
自助聚合 或 袋装法:这种方法中,在数据的不同样本上训练多个模型。然后,通过投票或平均系统进行预测。这个类别中最受欢迎的算法被称为 随机森林。
-
提升法:这种方法中,在数据的不同样本上训练多个模型。然后,一个模型试图通过惩罚错误预测来纠正下一个模型的错误。这个类别中最受欢迎的算法是 随机梯度提升 和 AdaBoost。
现在你已经了解了集成模型,你可以看看一些可能出现在你的考试中的机器学习算法。并非所有这些算法都使用集成方法。
下几节将根据 AWS 算法类别进行划分,如下所示:
-
监督学习
-
无监督学习
-
文本分析
-
图像处理
最后,你将了解 AWS 上的强化学习概述。
监督学习
AWS 为通用目的(回归和分类任务)和更具体的目的(预测和向量化)提供了监督学习算法。以下是在这些子类别中可以找到的内置算法列表:
-
线性学习算法
-
因子分解机算法
-
XGBoost 算法
-
KNN 算法
-
Object2Vec 算法
-
DeepAR 预测算法
你将首先学习关于回归模型和线性学习算法。
与回归模型一起工作
查看 线性回归 模型是理解一般回归模型(线性回归和非线性回归模型)内部情况的好方法。这是每位数据科学家必备的知识,也能帮助你解决实际问题。你将在接下来的小节中对此进行更深入的了解。
介绍回归算法
线性回归模型旨在根据一个或多个变量(x)预测一个数值(y)。从数学上讲,这种关系可以定义为 y = f(x),其中 y 被称为 因变量,x 被称为 自变量。
在回归模型中,你想要预测的组成部分(y)始终是一个连续的数字——例如,房屋价格或交易数量。你在第一章**,机器学习基础,*图 1**.2 中看到了这一点,当你学习关于给定目标变量的正确监督学习算法时。请随时回去复习。
当你只用一个变量来预测y时,这个问题被称为简单线性回归。另一方面,当你使用多个变量来预测y时,你面临的是一个多元线性****回归问题。
此外,还有一种被称为非线性回归的回归模型类别。然而,让我们暂时将其放在一边,先来理解一下简单线性回归的含义。
回归模型属于机器学习的监督方面(另一方面是非监督),因为算法试图根据独立变量和依赖变量之间的现有相关性来预测值。
但在y=f(x)中,f代表什么?在这里,f是负责根据x预测y的回归函数。换句话说,这就是你想要找到的函数。在谈论简单线性回归时,请注意以下三个问题和答案:
-
线性回归中f的形状是什么?
当然是线性的!
-
你如何表示线性关系?
使用一条直线(你将在几分钟内理解原因)。
-
那么,定义一条线的函数是什么?
ax + b(只需查看任何一本数学书)。
就这些了!线性回归模型由y = ax + b给出。当你试图根据x预测y时,你只需要找出a和b的值。你可以采用相同的逻辑来了解其他类型回归内部的情况。
找出a和b的值是你唯一要做的事情。值得知道的是,a也被称为alpha 系数,或斜率,表示线的倾斜度,而b也被称为beta 系数,或y 截距,表示线与y轴交叉的位置(进入由x和y组成的二维平面)。你将在下一小节中了解这两个术语。
还有一个值得知道的事实,每个你无法控制的预测因子都存在一个偏差(e)。换句话说,简单线性回归的正式定义是y = ax + b + e。
在下一小节中,你将学习如何找到 alpha 和 beta 来解决简单线性回归问题。
最小二乘法
有不同的方法来找到直线的斜率和y截距,但最常用的方法是最小二乘法。这个方法背后的原理很简单:你必须找到一条最佳线,以减少平方误差的总和。
在图 6.1 中,你可以看到一个带有多个点和线的笛卡尔平面。线 a代表这些数据点的最佳拟合线——换句话说,那将是这些点的最佳线性回归函数。但你怎么知道呢?很简单:如果你计算每个点的误差,你就会发现线 a包含了最小的平方误差总和。

图 6.1 – 最小二乘法原理的可视化
从零开始理解线性回归不仅对认证考试很重要,而且对你的数据科学家职业生涯也至关重要。为了提供一个完整的示例,已经开发了一个包含你将要看到的全部计算的电子表格!鼓励你利用这份辅助材料进行一些模拟。无论如何,你将在下一小节中看到这些计算的实际应用。
从零开始创建线性回归模型
你将使用一个非常简单的数据集,其中只有两个变量:
-
x:代表一个人的工作年限
-
y:代表一个人的平均工资
你想要了解x和y之间的关系,如果可能的话,根据工作经验x预测工资(y)。现实问题通常有更多的独立变量,并且不一定呈线性。然而,这个例子将为你掌握更复杂的算法提供基础知识。
要找出 alpha 和 beta 系数(或者如果你更喜欢,斜率和y截距),你需要找到与数据集相关的某些统计信息。在表 6.3中,你有数据以及这些辅助统计信息。
| X (****独立变量) | Y (****依赖变量) | X 平均值 | Y 平均值 | 协方差 (****X,Y) | X 方差 | Y 方差 |
|---|---|---|---|---|---|---|
| 1 | 1.000 | 21.015 | 20 | 21.808.900 | ||
| 2 | 1.500 | 14.595 | 12 | 17.388.900 | ||
| 3 | 3.700 | 4.925 | 6 | 3.880.900 | ||
| 4 | 5.000 | 1.005 | 2 | 448.900 | ||
| 5 | 4.000 | 835 | 0 | 2.788.900 | ||
| 6 | 6.500 | 415 | 0 | 688.900 | ||
| 7 | 7.000 | 1.995 | 2 | 1.768.900 | ||
| 8 | 9.000 | 8.325 | 6 | 11.088.900 | ||
| 9 | 9.000 | 11.655 | 12 | 11.088.900 | ||
| 10 | 10.000 | 19.485 | 20 | 18.748.900 | ||
| COUNT | 10 | 5,50 | 5.670,00 | 8.425,00 | 8,25 | 8.970.100,00 |
表 6.3 – 基于工作经验预测平均工资的数据集
如你所见,x 和 y 之间存在几乎完美的线性关系。随着工作经验的增加,工资也随之增加。除了 x 和 y,你还需要计算以下统计量:记录数、x 的平均值、y 的平均值、x 和 y 的协方差、x 的方差和 y 的方差。图 6.2 描述了提供方差和协方差(分别)的数学表示的公式,其中 x bar、y bar 和 n 分别代表 x 的平均值、y 的平均值和记录数:

图 6.2 – 方差和协方差的数学表示
如果你想检查 表 6.2 中那些辅助统计量的公式的计算细节,请参阅本书附带的支持材料。在那里,你会发现这些公式已经为你实现了。
这些统计量很重要,因为它们将被用来计算 alpha 和 beta 系数。图 6.3 解释了如何计算这两个系数,以及相关系数 R 和 R 平方。这两个指标将给你一个关于模型质量的概念,它们越接近 1,模型就越好。

图 6.3 – 计算简单线性回归系数的方程
应用这些公式后,你将得到 表 6.4 中所示的结果。它已经包含了你所需的所有信息,以便在新的数据上做出预测。如果你将系数替换到原始方程 y = ax + b + e 中,你会发现回归公式如下:y = 1021.212 * x + 53.3。
| 系数 | 描述 | 值 |
|---|---|---|
| Alpha | 线性斜率 | 1,021,212,121 |
| Beta | 截距 | 53 |
| R | 相关系数 | 0,979,364,354 |
| R² | 决定系数 | 0,959,154,538 |
表 6.4 – 求回归系数
从现在开始,为了进行预测,你只需要将 x 替换为工作经验的年数。结果,你会发现 y,即预测的工资。你可以在 图 6.4 中看到模型拟合,以及在 表 6.5 中的一些模型预测。

图 6.4 – 回归方程中的拟合数据
| 输入 | 预测 | 误差 |
|---|---|---|
| 1 | 1.075 | 75 |
| 2 | 2.096 | 596 |
| 3 | 3.117 | - 583 |
| 4 | 4.138 | - 862 |
| 5 | 5.159 | 1.159 |
| 6 | 6.181 | - 319 |
| 7 | 7.202 | 202 |
| 8 | 8.223 | - 777 |
| 9 | 9.244 | 244 |
| 10 | 10.265 | 265 |
| 11 | 11.287 | |
| 12 | 12.308 | |
| 13 | 13.329 | |
| 14 | 14.350 | |
| 15 | 15.372 | |
| 16 | 16.393 | |
| 17 | 17.414 | |
| 18 | 18.435 | |
| 19 | 19.456 | |
| 20 | 20.478 |
表 6.5 – 模型预测
当你分析回归模型时,你应该能够知道你的模型是否质量良好。你在第一章**机器学习基础中了解到许多建模问题(例如过拟合),并且你已经知道你总是要检查模型性能。
回归模型的一个良好方法是进行所谓的残差分析。这就是你在散点图上绘制模型的误差,并检查它们是否随机分布(如预期的那样)或不随机分布。如果误差不是随机分布的,这意味着你的模型无法泛化数据。"图 6.5**.5*"显示了基于"表 6.5"数据的残差分析。

图 6.5 – 残差分析
这里的要点是误差是随机分布的。这样的证据,加上高 R 平方评分,可以用作支持使用此模型的论据。
重要提示
在第七章**评估和优化模型中,你将了解评估指标。例如,你将了解到每种类型的模型可能都有自己的评估指标集。回归模型通常使用均方误差(MSE)和均方根误差(RMSE)进行评估。换句话说,除了 R、R 平方和残差分析之外,理想情况下,你将在测试集上执行你的模型以提取其他性能指标。你甚至可以使用交叉验证系统来检查模型性能,正如你在第一章**机器学习基础中学到的。
非常常见的是,当模型残差确实呈现模式并且不是随机分布时,这是因为数据中现有的关系不是线性的,而是非线性的,因此必须应用另一种建模技术。在下一小节中,你将学习如何解释回归模型。
解释回归模型
了解如何解释线性回归模型也是很好的。有时,你使用线性回归不一定是为了创建预测模型,而是为了进行回归分析。然后你可以使用回归分析来理解自变量和因变量之间的关系。
回顾回归方程(y = 1021.212 * x + 53.30),你可以看到两个术语:alpha 或斜率(1021.20)和 beta 或y截距(53.3)。你可以这样解释这个模型:对于每增加一年工作经验,你的薪水将增加 1,021.20 美元。此外,请注意,当“工作经验年数”等于 0 时,预期的薪水将是 53.30 美元(这是直线与y轴相交的点)。
从一个更广泛的角度来看,你的回归分析应该回答以下问题:对于每个添加到自变量(斜率)的额外单位,因变量的平均变化是多少?
检查调整后的 R 平方
在这个阶段,你对回归模型有了更深入的了解!还有一个非常重要的主题你应该知道,无论它是否会在考试中出现,那就是你模型的经济性方面。
你已经在第一章**,机器学习基础中听说过经济性。这是优先考虑简单模型而不是复杂模型的能力。在研究回归模型时,你可能需要使用多个特征来预测你的结果。这也被称为多元回归模型。
在这种情况下,R 和 R 平方系数往往会奖励具有更多特征的更复杂模型。换句话说,如果你继续向多元回归模型添加新特征,你会得到更高的 R 和 R 平方系数。这就是为什么你不能仅仅基于这两个指标来做决定。
你可以使用的一个额外指标(除了 R、R 平方、MSE 和 RMSE 之外)被称为调整后的 R 平方。当你向模型添加不带来任何实际价值的额外特征时,这个指标会受到惩罚。在表 6.6中,你可以看到模型开始失去经济性。
| 特征 数量 | R 平方 | 调整后的 R 平方 |
|---|---|---|
| 1 | 81 | 79 |
| 2 | 83 | 82 |
| 3 | 88 | 87 |
| 4 | 90 | 86 |
| 5 | 92 | 85 |
表 6.6 – 比较 R 平方和调整后的 R 平方
在这里,你可以得出结论,保持模型中的三个变量比保持四个或五个更好。向模型中添加四个或五个变量会增加 R 平方(正如预期的那样),但会降低调整后的 R 平方。
到目前为止,你应该对回归模型有了很好的理解。现在,让我们看看 AWS 为这类模型提供的内置算法有哪些。
AWS 上的回归建模
AWS 有一个内置算法称为线性学习器,你可以用它来实现线性回归模型。内置的线性学习器使用随机梯度下降(SGD)来训练模型。
重要提示
当讨论神经网络时,你将了解更多关于 SGD 的内容。现在,你可以将 SGD 视为之前讨论的流行的最小二乘误差方法的替代方案。
内置的线性学习器算法提供了一个超参数,可以在训练过程之前对数据进行归一化。这个超参数的名称是normalize_data。这非常有帮助,因为线性模型对数据的规模很敏感,通常利用数据归一化。
重要提示
在第四章**,数据准备和转换中讨论了数据归一化。如果你需要,请回顾该章节。
线性学习器算法的一些其他重要超参数是L1和wd,分别扮演L1 正则化和L2 正则化的角色。
L1 和 L2 正则化有助于线性学习器(或任何其他回归算法实现)避免过度拟合。传统上,实现 L1 正则化的回归模型被称为lasso 回归模型,而具有 L2 正则化的回归模型被称为岭回归模型。
虽然这可能听起来很复杂,但实际上并不复杂!回归模型方程仍然是相同的:y = ax + b + e。变化在于损失函数,它用于找到最佳最小化误差的系数。如果你回顾图 6.1,你会看到误差函数被定义为e = (ŷ - y)²,其中ŷ是回归函数值,y是真实值。
L1 和 L2 正则化将惩罚项添加到损失函数中,如图 6.6中的公式所示(注意你正在用ax + b替换ŷ):

图 6.6 – L1 和 L2 正则化
λ(lambda)参数必须大于 0,并且需要手动调整。一个非常高的λ值可能会导致欠拟合问题,而一个非常低的λ值可能不会导致最终结果有显著的变化(如果你的模型已经过度拟合,它将保持过度拟合)。
在实际应用中,L1 正则化和 L2 正则化之间的主要区别在于,L1 会将不那么重要的系数缩小到 0,这将迫使特征被删除(充当特征选择器)。换句话说,如果你的模型因为特征数量过多而过度拟合,L1 正则化应该能帮助你解决这个问题。
重要提示
在考试期间,记住 L1 和 L2 正则化的基础,特别是它们之间的关键区别,其中 L1 作为一个特征选择器效果很好。
最后,许多内置算法可以服务于多种建模目的。线性学习器算法可以用于回归、二分类和多分类。确保你在考试中记住这一点(这不仅仅是关于回归模型)。
AWS 有其他内置算法适用于回归和分类问题——那就是分解机、KNN和XGBoost算法。由于这些算法也可以用于分类目的,这些内容将在关于分类算法的章节中介绍。
重要提示
你在考试期间需要记住一个非常重要的提示:线性学习器、分解机、KNN 和 XGBoost 算法都适用于回归和分类问题。这些算法通常被称为通用算法。
有了这些,您已经到达了关于回归模型的这一节结束。记得在考试前查看相关材料。您也可以在日常工作时使用参考材料!现在,让我们继续探讨另一个经典的机器学习问题示例:分类模型。
与分类模型一起工作
您在本章中一直在学习什么是分类模型。然而,现在,您将查看一些适合分类问题的算法。请记住,有数百种分类算法,但由于您正在为 AWS 认证机器学习专业考试做准备,所以将涵盖 AWS 预先构建的算法。
您将从因子机开始。因子机被认为是线性学习算法的扩展,优化以在具有高维稀疏数据集的特征之间找到关系。
重要提示
因子机的一个非常传统的用例是推荐系统,其中数据通常具有很高的稀疏度。在考试中,如果您面临一个通用问题(无论是回归还是二分类任务),其中基础数据集是稀疏的,那么从算法角度来看,因子机可能是最好的答案。
当您在回归模型中使用因子机时,将使用 RMSE 来评估模型。另一方面,在二分类模式下,算法将使用对数损失、准确率和 F1 分数来评估结果。关于评估指标的更深入讨论将在第七章**,评估和优化模型中提供。
您应该知道,因子机只接受text/.csv格式的输入数据。
适用于分类问题的下一个内置算法被称为 K 最近邻,简称 KNN。正如其名所示,此算法将尝试找到输入数据最近的K个点,并返回以下预测之一:
-
如果是一个分类任务,则K个最近点的最频繁出现的类别
-
如果是一个回归任务,则标签为K个最近点的平均值
KNN 是一个基于索引的算法,因为它计算点之间的距离,为这些点分配索引,然后存储排序后的距离及其索引。有了这种类型的数据结构,KNN 可以轻松选择最接近的K个点来做出最终预测。请注意,K是 KNN 的超参数,应在建模过程中进行优化。
另一个适用于通用目的的 AWS 内置算法,包括分类,被称为极端梯度提升,简称XGBoost。这是一个基于集成和决策树的模型。
XGBoost 使用一组较弱的模型(决策树)来预测目标变量,这可以是回归任务、二分类或多分类。这是一个非常流行的算法,并且已经被顶尖选手在机器学习竞赛中使用。
XGBoost 使用提升学习策略,其中一个模型试图纠正先前模型的错误。它被称为“梯度”是因为它使用梯度下降算法在添加新树时最小化损失。
重要提示
在这个上下文中,术语较弱用来描述非常简单的决策树。
虽然 XGBoost 比单个决策树更稳健,但在考试中,对决策树及其主要配置有清晰的理解是非常重要的。顺便说一下,它们是许多集成算法(如 AdaBoost、随机森林、梯度提升和 XGBoost)的基础模型。
决策树是基于规则的算法,以树的形式组织决策,如图图 6.7所示。

图 6.7 – 决策树模型示例
它们由根节点(位于树的顶部)、中间或决策节点(位于树的中间)和叶节点(底部节点,没有分割)组成。树的深度由根节点和最后一个叶节点之间的差异给出。例如,在图 6.7中,树的深度是 3。
树的深度是这类模型最重要的超参数之一,通常被称为最大深度。换句话说,最大深度控制了决策树可以达到的最大深度。
决策树模型的另一个非常重要的超参数是叶节点中的最小样本/观察数。它也用于控制树的生长。
决策树有许多其他类型的超参数,但这两个对于控制模型过拟合尤为重要。深度较高或叶节点中观察数非常少的决策树在预测/外推过程中可能会遇到问题。
这是因为决策树使用叶节点中的数据来做出预测,基于属于该节点的每个观察/目标变量的比例(对于分类任务)或平均值(对于回归任务)。因此,节点应该有足够的数据来在训练集之外做出良好的预测。
如果你在考试中遇到CART这个术语,你应该知道它代表分类和回归树,因为决策树可以用于分类和回归任务。
为了选择在树中分割数据的最佳变量,模型将选择那些最大化节点间目标变量分离的变量。这项任务可以通过不同的方法完成,例如基尼系数和信息增益。
预测模型
时间序列是指按一定规律收集的具有序列依赖性的数据点。时间序列具有度量、事实和时间单位,如图图 6。8*所示。

图 6.8 – 时间序列陈述
此外,时间序列还可以被分类为单变量或多变量。单变量时间序列在一段时间内只包含一个变量,而多变量时间序列在一段时间内包含两个或更多变量。图 6。9*显示了单变量时间序列。

图 6.9 – 时间序列示例
时间序列可以按以下方式分解:
-
观察值或水平:序列的平均值
-
趋势:增加、减少的模式(有时没有趋势)
-
季节性:在特定时间段内的规律性峰值(有时没有季节性)
-
噪声:无法解释的东西
有时,你还可以在序列中找到无法在预测模型中捕捉到的孤立峰值。在这种情况下,你可能希望将这些峰值视为异常值。图 6。10是图 6。9所示时间序列的分解。

图 6.10 – 时间序列分解
值得强调的是,你可以使用加法或乘法方法来分解时间序列。加法模型建议你的时间序列将每个组成部分相加以解释目标变量——即,y(t) = 水平 + 趋势 + 季节性 + 噪声。
另一方面,乘法模型建议你的时间序列将每个组成部分相乘以解释目标变量——即,*y(t) = 水平 * 趋势 * 季节性 ** 噪声。
在下一节中,你将更深入地了解时间序列的组成部分。
检查时间序列的平稳性
将时间序列分解并理解其组成部分如何通过加法和乘法模型相互作用是一项伟大的成就!然而,你学得越多,你就越想深入探究问题。也许你已经意识到,没有趋势和季节性的时间序列比具有所有这些成分的时间序列更容易预测!
这自然是正确的。如果你不需要理解趋势和季节性,并且如果你无法控制噪声,你所要做的就是探索观察到的值并找到它们的回归关系。
在一个时间段内具有恒定均值和方差的时间序列被称为平稳的。一般来说,具有趋势和季节性的时间序列不是平稳的。可以对序列应用数据转换,将其转换为平稳时间序列,从而使建模任务变得更容易。这种转换被称为微分。
当你在探索时间序列时,你可以通过应用假设检验,如迪基-富勒、KPSS和菲利普斯-佩荣,来检查平稳性,仅举几个例子。如果你发现它是非平稳的,那么你可以应用微分使其成为平稳时间序列。一些算法已经内置了这种能力。
探索,探索,再探索
在这一点上,重要的是要记住,在数据科学中,探索任务一直在进行。这里没有什么不同。当你构建时间序列模型时,你可能想查看数据并检查它是否适合这种类型的建模。
自相关图是你可以用于时间序列分析的工具之一。自相关图允许你检查时间序列中滞后之间的相关性。图 6.11展示了这种可视化类型的一个示例。

图 6.11 – 自相关图
记住,如果你在处理单变量时间序列,你的时间序列只包含一个变量。因此,找到你独特变量的滞后之间的自相关对于理解你是否能构建一个好的模型至关重要。
是的,有时候,可能会发生这样的情况,你面前没有时间序列。而且,无论你多么努力,你都无法将这类数据建模为时间序列。这类数据通常被称为白噪声。
另一种你无法预测的序列被称为随机游走。随机游走本质上是随机的,但它们依赖于前一时间步。例如,随机游走的下一个点可能是在 0 和 1 之间的随机数,也可能是序列的最后一个点。
重要提示
如果你在考试中遇到这些术语,请务必将它们与时间序列中的随机性联系起来。
有了这些,你已经了解了时间序列建模背后的主要理论。你也应该意识到,目前最流行的用于处理时间序列的算法被称为自回归积分移动平均(ARIMA)和指数平滑(ETS)。本书不会深入探讨这两个模型。相反,你将看到 AWS 在时间序列建模方面能提供什么。
理解 DeepAR
DeepAR预测算法是一个内置的 SageMaker 算法,用于使用循环神经网络(RNN)预测一维时间序列。
传统的时序算法,如 ARIMA 和 ETS,旨在为每个时间序列拟合一个模型。例如,如果你想预测每个地区的销售额,你可能需要为每个地区创建一个模型,因为每个地区可能有自己独特的销售行为。另一方面,DeepAR 允许你在单个模型中操作多个时间序列,这在更复杂的应用场景中似乎是一个巨大的优势。
DeepAR 的输入数据,正如预期的那样,是一个或多个时间序列。这些时间序列中的每一个都可以与以下内容相关联:
-
一个静态(时间独立)的类别特征向量,由
cat字段控制 -
一个动态(时间依赖)时间序列的向量,由
dynamic_feat控制
重要提示
注意,在多个时间序列上训练和进行预测的能力与静态类别特征向量密切相关。在定义 DeepAR 将要训练的时间序列时,你可以设置类别变量来指定每个时间序列属于哪个组。
DeepAR 的两个主要超参数是context_length,它用于控制在训练过程中模型可以看到多远的历史,以及prediction_length,它用于控制模型将输出预测的多远未来。
DeepAR 还可以处理缺失值,在这种情况下,指的是时间序列中存在的间隙。DeepAR 的一个非常有趣的功能是从时间序列中创建派生特征。这些派生特征,由基本时间频率创建,有助于算法学习时间依赖的模式。表 6.7显示了 DeepAR 根据其训练的每种类型的时间序列创建的所有派生特征。
| 时间序列的 频率 | 派生特征 |
|---|---|
| 分钟 | 小时中的分钟数,天的小时数,周中的天数,月份中的天数,年份中的天数 |
| 小时 | 天的小时数,周中的天数,月份中的天数,年份中的天数 |
| 天 | 周中的天数,月份中的天数,年份中的天数 |
| 周 | 月份中的天数,年份中的周数 |
| 月份 | 年份中的月份 |
表 6.7 – 按时间序列频率派生的 DeepAR 特征
你现在已经完成了关于预测模型的这一部分。接下来,你将查看关于监督学习的最后一个算法——即Object2Vec算法。
Object2Vec
Object2Vec 是 SageMaker 内置算法,它推广了众所周知的Word2Vec算法。Object2Vec 用于为高维对象创建嵌入空间。根据定义,这些嵌入空间是原始对象的压缩表示,可用于多个目的,例如特征工程或对象比较。

图 6.12 – 嵌入空间的视觉示例
图 6**.12说明了嵌入空间的意思。神经网络模型的第一层和最后一层只是将输入数据映射到自身(由相同大小的向量表示)。
当你深入到模型的内部层时,数据被越来越压缩,直到它达到这个架构中间的层,即嵌入层。在这一特定层上,你有一个更小的向量,其目的是对来自第一层的高维原始向量进行准确和压缩的表示。
通过这样,你已经完成了关于 AWS 中机器学习算法的第一部分。接下来,你将了解一些无监督算法。
无监督学习
AWS 为以下任务提供了几个无监督学习算法:
-
聚类:K-Means 算法
-
维度降低:主成分分析(Principal Component Analysis,简称 PCA)
-
模式识别:IP 洞察
-
异常检测:随机切割森林(Random Cut Forest,简称 RCF)算法
让我们先从聚类以及最流行的聚类算法 K-Means 的工作原理开始谈。
聚类
聚类算法在数据科学中非常流行。基本上,它们的目的是在给定的数据集中识别相似的组,也称为聚类。聚类算法属于非监督学习领域,这意味着它们不需要标签或响应变量来训练。
这真是太棒了,因为标记数据非常稀缺!然而,它也有一些限制。主要的一个是,聚类算法为你提供聚类,但不提供每个聚类的含义。因此,必须有人,作为领域专家,分析每个聚类的属性来定义它们的含义。
有许多种聚类方法,例如层次聚类和划分聚类。在每种方法内部,你都会发现几个算法。然而,K-Means 可能是最流行的聚类算法,你很可能在考试中会遇到它。
当你在玩 K-Means 时,你必须要指定你想要创建的聚类数量。然后,你必须将数据点分配到每个聚类中,以便每个数据点只属于一个聚类。这正是聚类过程结束时你应该期待的结果!
你需要指定你想要创建的聚类数量,并将这个数字传递给 K-Means 算法。然后,算法将随机初始化每个聚类的中心点(这被称为中心点初始化)。
一旦你有了每个聚类的中心点,你所需要做的就是为每个数据点分配一个聚类。要做到这一点,你必须使用一个邻近度或距离度量!这本书将使用术语距离度量。
距离度量负责计算数据点和中心点之间的距离。根据距离度量,数据点将属于最近的聚类中心。
最流行的距离度量称为欧几里得距离,其背后的数学很简单;想象一下,你的数据集的点由两个维度组成,x和y。因此,你可以将点a和b考虑如下:
-
a(x=1, y=1)
-
b(x=2, y=5)
点 a 和 b 之间的欧几里得距离由以下公式给出,其中 x1 和 y1 是点 a 的值,而 x2 和 y2 是点 b 的值:
。该函数可以通过以下方程推广:
。一旦您完成这个过程,并为每个数据点分配了一个簇,您可以使用
方法,如 单链接、平均链接 和 完全链接。
由于这种中心点刷新,您将不得不持续检查每个数据点的最近簇,并迭代地刷新中心点,直到簇中心收敛且不需要重新分配簇,或者达到允许的最大迭代次数。
好的,以下是对构成 K-Means 方法的组件和步骤的总结:
-
中心点初始化、簇分配、中心点刷新,然后重复最后两个步骤,直到收敛
-
一种距离度量,用于将数据点分配到每个簇(在这种情况下,欧几里得距离)
-
一种重新计算簇中心点的链接方法(为了我们的演示,您将了解平均链接)
使用这些定义,您现在可以逐步了解以下真实示例,一步一步来(一些参考资料也供您参考)。
逐步计算 K-Means
在这个例子中,您将在一个非常小的数据集上模拟 K-Means,该数据集只有两列(x 和 y)和六个数据点(A、B、C、D、E 和 F),如 表 6.8 所定义。
| 点 | x | y |
|---|---|---|
| A | 1 | 1 |
| B | 2 | 2 |
| C | 5 | 5 |
| D | 5 | 6 |
| E | 1 | 5 |
| F | 2 | 6 |
| 簇 1 | 1 | 1 |
| 簇 2 | 2 | 2 |
| 簇 3 | 5 | 5 |
表 6.8 – K-Means 迭代输入数据
表 6.8 包含三个簇,其中心点如下:(1,1), (2,2), (5,5)。簇的数量(3)是事先定义的,每个簇的中心点是随机定义的。图 6**.13 显示了您现在所处的算法阶段。

图 6.13 – 完成第一次迭代前的 K-Means 结果
在这里,由于它们与簇中心重叠,您看不到点 A、B 和 C,但请放心——它们很快就会出现。接下来,您必须计算每个数据点到每个簇中心的距离,然后,您需要选择离每个点最近的簇。
| xc1 | yc1 | xc2 | yc2 | xc3 | yc3 | distance-c1 | distance-c2 | distance-c3 | 簇 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 2 | 5 | 5 | 0,0 | 1,4 | 5,7 | 簇 1 |
| 1 | 1 | 2 | 2 | 5 | 5 | 1,4 | 0,0 | 4,2 | 簇 2 |
| 1 | 1 | 2 | 2 | 5 | 5 | 5,7 | 4,2 | 0,0 | 簇 3 |
| 1 | 1 | 2 | 2 | 5 | 5 | 6,4 | 5,0 | 1,0 | 簇 3 |
| 1 | 1 | 2 | 2 | 5 | 5 | 4,0 | 3,2 | 4,0 | 聚类 2 |
| 1 | 1 | 2 | 2 | 5 | 5 | 5,1 | 4,0 | 3,2 | 聚类 3 |
| 图例 xc1 = 聚类 1 的 x 值 yc1 = 聚类 1 的 y 值 |
表 6.9 – 处理迭代 1
表 6.9 包含以下元素:
-
每一行代表一个数据点。
-
前六列代表每个聚类的质心轴(x 和 y)。
-
接下来的三列表示每个数据点到每个聚类质心的距离。
-
最后一列代表每个数据点最近的聚类。
观察数据点 A(第一行),你可以看到它被分配到聚类 1,因为数据点 A 到聚类 1 的距离是 0(你还记得它们是重叠的吗?)。同样的计算会应用于所有其他数据点,以定义每个数据点的聚类。
在你继续之前,你可能想看看聚类和数据点之间的欧几里得距离是如何计算的。为了演示目的,以下模拟将考虑数据点 A 到聚类 3 的距离(表 6.9 中的第一行,distance-c3 列,值为 5,7)。
首先,以下公式被用来计算欧几里得距离:
这里,你有以下内容:
-
x1 = 数据点 A 的 x 值 = 1
-
y1 = 数据点 A 的 y 值 = 1
-
x2 = 聚类 3 的 x 值 = 5
-
y2 = 聚类 3 的 y 值 = 5
图 6**.14 逐步应用公式。

图 6.14 – 逐步计算欧几里得距离
这真是太棒了,不是吗?你几乎完成了 K-Means 的第一次迭代。在第一次迭代的最后一步,你必须刷新聚类质心。记住:最初它们是随机定义的,但现在,你已经将一些数据点分配给每个聚类,这意味着你应该能够识别出聚类的中心点在哪里。
在本例中,将使用 链接 方法来刷新聚类质心。这是一个非常简单的步骤,结果在 表 6.10 中展示。
| 点 | x | y |
|---|---|---|
| A | 1 | 1 |
| B | 2 | 2 |
| C | 5 | 5 |
| D | 5 | 6 |
| E | 1 | 5 |
| F | 2 | 6 |
| 聚类 1 | 1 | 1 |
| 聚类 2 | 1,5 | 3,5 |
| 聚类 3 | 4 | 5,7 |
表 6.10 – 第 1 次迭代后的 K-Means 结果
表 6.10 显示了你正在处理的数据点(顺便说一句,它们永远不会改变),以及聚类 1、2 和 3 的质心。这些质心与 表 6.8 中最初显示的质心相当不同。这是因为它们使用了平均链接来刷新!该方法得到了每个聚类中所有 x 和 y 值的平均值。在下一个模拟中,看看如何将 (1.5, 3.5) 获得为聚类 2 的质心。
如果你查看 表 6.9,你会看到簇 2 只有两个数据点分配给它:B 和 E。这些是图中第二行和第五行。如果你取每个点的 x 轴的平均值,那么你将得到 (2 + 1) / 2 = 1.5 和 (2 + 5) / 2 = 3.5。
这样,你就完成了 K-Means 的第一次迭代,你可以在 图 6.15 中查看结果。

图 6.15 – 第一次迭代后的 K-Means 结果
现在,你可以看到几乎所有的数据点,除了数据点 A,因为它仍然与簇 1 的中心点重叠。继续,你必须重新执行以下步骤:
-
重新计算每个数据点与每个簇中心点之间的距离,并在必要时重新分配簇。
-
重新计算簇中心点。
你会多次执行这两个任务,直到簇中心点收敛并且它们不再改变,或者你达到了允许的最大迭代次数,这可以作为 K-Means 的超参数设置。为了演示目的,经过四次迭代,你的簇将看起来像 图 6.16。

图 6.16 – 第四次迭代后的 K-Means 结果
在第四次迭代中,所有簇的中心点看起来相当一致,你可以清楚地看到所有数据点都可以根据它们的邻近性进行分组。
重要提示
在这个例子中,你只为每个数据点设置了两个维度(维度 x 和 y)。在实际应用中,你可以看到更多的维度,这就是为什么聚类算法在以更自动化的方式识别数据中的组时扮演着非常重要的角色。
希望你能享受从零开始计算 K-Means 的过程!这些知识将对考试和你的数据科学家职业生涯有益。顺便说一句,正如多次建议的那样,数据科学家必须持怀疑态度和好奇心,所以你可能想知道为什么在这个例子中定义了三个簇而不是两个或四个。你也可能想知道如何衡量簇的质量。
你难道认为这个解释不会提供,对吧?
定义簇数量和测量簇质量
虽然 K-Means 是一种在数据中寻找模式的好算法,但它不会提供每个簇的含义,也不会提供你必须创建以最大化簇质量的簇数量。
在聚类中,簇质量意味着你希望创建具有高同质性的簇组,以及不同簇元素之间的高异质性。换句话说,同一簇的元素应该接近/相似,而不同簇的元素应该很好地分离。
计算簇的同质性的一个方法是通过使用一个称为平方误差和的度量,简称SSE。这个度量将计算每个数据点与其簇质心的平方差的和。例如,当所有数据点都位于簇质心所在的同一点时,SSE 将为 0。换句话说,你希望最小化 SSE。以下方程正式定义了 SSE:
现在你已经知道了如何检查簇的质量,理解如何为给定的数据集定义合适的簇数量就更容易了。你所要做的就是找到最小化 SSE 的最优簇数量。一个围绕该逻辑工作的非常流行的方法被称为肘部方法。
肘部方法建议多次执行聚类算法。在每次执行中,你将测试不同数量的簇,k。在每次执行后,你将计算与该k数量簇相关的 SSE。最后,你可以绘制这些结果,并选择 SSE 停止急剧下降的k数量。
重要提示
添加更多的簇将自然会降低 SSE。在肘部方法中,你希望找到这种变化变得平滑的点,这意味着新簇的添加不会带来太多的价值。
在前面的例子中,创建了三个簇。*图 6**.17 显示了支持这一决策的肘部分析。

图 6.17 – 肘部方法
你可以得出结论,添加超过三个或四个簇将给聚类过程增加不必要的复杂性。
当然,在定义簇的数量时,你应该始终考虑业务背景。例如,如果你正在创建客户细分模型,而你的公司已经为四个客户细分准备了商业团队和业务流程,那么设置四个簇而不是三个是没有害处的。
最后,你应该知道 AWS 已经将 K-Means 算法作为其内置算法列表的一部分实现了。换句话说,你不需要使用外部库或自己带来算法来在 AWS 上使用 K-Means。
结论
这真是一个了不起的成就:你刚刚掌握了聚类算法的基础,你现在应该能够推动你自己的项目和关于这个主题的研究!对于考试,记住聚类属于机器学习的无监督领域,因此不需要有标记的数据。
此外,确保你知道这个领域最流行的算法是如何工作的——那就是 K-Means。尽管聚类算法不提供每个组的含义,但它们在寻找数据中的模式方面非常强大,无论是为了建模特定问题还是仅仅为了探索数据。
接下来,你将继续学习无监督算法,并了解 AWS 如何构建了目前最强大的异常检测算法之一,该算法被称为RCF。
异常检测
在建模和数据探索性分析中寻找数据中的异常是一个非常常见的任务。有时,你可能只想在拟合回归模型之前删除数据中的异常,而有时,你可能想创建一个以识别异常为最终目标的模型——例如,在欺诈检测系统中。
再次强调,你可以使用许多不同的方法来寻找数据中的异常。只要有些创意,可能性是无限的。然而,有一个特定的算法可以解决这个问题,你应该在考试中务必了解:RCF。
RCF 是一种基于无监督决策树的算法,它使用训练数据的随机子样本创建了多个决策树(森林)。技术上,它随机化数据,然后根据树的数量创建样本。最后,这些样本被分配到每一棵树上。
这些树集被用来为数据点分配异常分数。为了计算特定数据点的异常分数,它被传递到森林中的每一棵树。当数据点穿过树时,记录从根节点到叶节点的路径长度,这是针对特定树的。然后,通过考虑森林中所有树的路径长度分布,确定该数据点的异常分数。
如果一个数据点在大多数树中遵循一条短路径(即它靠近根节点),则被视为一个常见点,并将具有较低的异常分数。
另一方面,如果一个数据点在许多树中遵循一条长路径(即它远离根节点),则被视为一个不常见点,并将具有较高的异常分数。
RCF 最重要的超参数是num_trees和num_samples_per_tree,分别代表森林中的树的数量和每棵树中的样本数量。
维度降低
AWS 在其内置算法列表中实现的一种无监督算法被称为主成分分析,简称 PCA。PCA 是一种用于减少数据集中变量/维度的数量的技术。
主成分分析(PCA)背后的主要思想是将数据点绘制到另一组坐标上,这组坐标被称为主成分(PCs),其目的是解释数据中的最大方差。根据定义,第一个成分将比第二个成分捕获更多的方差,然后第二个成分将比第三个成分捕获更多的方差,依此类推。
你可以设置你需要的 PCs 数量,只要它不超过你的数据集中的变量数量。图 6.18显示了这些 PCs 是如何绘制的:

图 6.18 – PCA 中的 PCs 寻找
如前所述,第一个 PC 将以这种方式绘制,以便它能够捕获数据中的大部分变差。这就是为什么它在图 6**.18中靠近大多数数据点的原因。
然后,第二台 PC 将垂直于第一台,因此它将成为解释数据中变差的第二个组成部分。如果您想创建更多组件(从而捕获更多变差),您只需遵循添加垂直组件的相同规则。特征向量和特征值是与 PCA 相关的线性代数概念,用于计算主成分。
因此,关于这里的降维有什么故事?如果还不清楚,这些 PC 可以用来替换您的原始变量。例如,假设您的数据集中有 10 个变量,您想将此数据集减少到三个最能代表其他变量的变量。解决这个问题的潜在方法就是应用 PCA 并提取前三个 PC!
这三个组件解释了您数据集的 100%吗?可能不是,但理想情况下,它们将解释大部分变差。添加更多 PC 将解释更多变差,但代价是增加额外的维度。
使用 AWS 内置的 PCA 算法
在 AWS 中,PCA 以两种不同的模式工作:
-
常规:适用于具有适度观察和特征的集合
-
随机化:适用于具有大量观察和特征的集合
不同之处在于,在随机模式下,它被用作近似算法。
当然,PCA 的主要超参数是您想要提取的组件数量,称为num_components。
IP 洞察
IP 洞察是一种无监督算法,用于模式识别。本质上,它学习 IPv4 地址的使用模式。
该算法的操作方法非常直观:它在实体和 IPv4 地址格式的成对事件上训练,以便它可以理解它所训练的每个实体的模式。
重要提示
例如,您可以理解“实体”为用户 ID 或账户号码。
然后,为了进行预测,它接收具有相同数据结构(实体,IPv4 地址)的成对事件,并返回针对该特定 IP 地址的异常分数,根据输入实体。
重要提示
IP 洞察返回的这种异常分数推断事件模式的异常程度。
您可能会遇到许多带有 IP 洞察的应用。例如,您可以在您的应用程序登录事件(这是您的实体)上训练一个 IP 洞察模型。您应该能够通过 API 端点公开此模型,以便实时进行预测。
然后,在您应用程序的认证过程中,您可以调用您的端点并传递尝试登录的 IP 地址。如果您得到了高分(这意味着这种登录模式看起来异常),在授权访问之前(即使密码是正确的),您可以请求更多信息。
这只是您可以考虑的 IP Insights 的许多应用之一。接下来,您将了解文本分析。
文本分析
现代应用使用自然语言处理(NLP)进行多种目的,例如文本翻译、文档分类、网络搜索、命名实体识别(NER)等。
AWS 为大多数 NLP 用例提供了一套算法。在接下来的几个小节中,您将了解这些内置的文本分析算法。
BlazingText 算法
BlazingText 执行两种不同的任务:文本分类,这是一种监督学习方法,扩展了fastText文本分类器,以及 Word2Vec,这是一种无监督学习算法。
BlazingText 对这些两种算法的实现进行了优化,以便在大数据集上运行。例如,您可以在几分钟内训练一个在数十亿单词之上的模型。
BlazingText 的这一可扩展性方面是由于以下原因实现的:
-
它能够使用多核 CPU 和单个 GPU 来加速文本分类。
-
它在玩 Word2Vec 算法时能够使用多核 CPU 或 GPU,以及定制的 CUDA 内核进行 GPU 加速。
Word2Vec 选项支持batch_skipgram模式,这使得 BlazingText 能够在多个 CPU 上执行分布式训练。
重要提示
BlazingText 执行的分布式训练使用小批量方法将一级 BLAS(基本线性代数子程序)操作转换为三级 BLAS操作。如果在考试中遇到这些术语,应知道它们与 BlazingText(Word2Vec 模式)相关。
仍然在 Word2Vec 模式下,BlazingText 支持skip-gram和连续词袋(CBOW)架构。
最后,请注意以下 BlazingText 的配置,因为它们很可能出现在您的考试中:
-
在 Word2Vec 模式下,只有训练通道可用。
-
BlazingText 期望一个单独的文本文件,其中包含空格分隔的标记。文件的每一行必须包含一个句子。这意味着在使用 BlazingText 之前,通常需要预处理您的数据集。
序列到序列算法
这是一个将输入序列转换为输出序列的监督算法。这个序列可以是文本句子,甚至是音频记录。
序列到序列最常见的用例是机器翻译、文本摘要和语音到文本。您认为任何是序列到序列问题的事情都可以通过这个算法来处理。
从技术上讲,AWS SageMaker 的 Seq2Seq 使用两种类型的神经网络来创建模型:一个带有注意力机制的RNN和一个卷积神经网络(CNN)。
潜在狄利克雷分配,简称LDA,用于主题建模。主题建模是一种文本分析技术,可以从文本数据语料库中提取一组主题。LDA 基于文本语料库中单词的概率分布来学习这些主题。
由于这是一个无监督算法,因此不需要设置目标变量。此外,必须事先指定主题的数量,并且你必须分析每个主题以找到其领域含义。
神经主题模型算法
就像 LDA 算法一样,神经主题模型(NTM)也旨在从数据语料库中提取主题。然而,LDA 和 NTM 之间的区别在于它们的学习逻辑。LDA 通过文档中单词的概率分布来学习这些主题,而 NTM 建立在神经网络之上。
NTM 网络架构有一个瓶颈层,它创建文档的嵌入表示。这个瓶颈层包含预测文档组成所需的所有必要信息,其系数可以被认为是主题。
有了这些,你已经完成了关于文本分析的这一部分。在下一部分,你将学习关于图像处理算法的内容。
图像处理
图像处理是机器学习中的一个非常热门的话题。其想法相当直观:创建可以分析图像并在其上做出推断的模型。通过推断,你可以理解为检测图像中的对象、对图像进行分类等等。
AWS 提供了一套内置算法,你可以使用这些算法来训练图像处理模型。在接下来的几节中,你将了解这些算法。
图像分类算法
如其名所示,图像分类算法用于使用监督学习对图像进行分类。换句话说,它需要在每个图像中有一个标签。它支持多标签分类。
它的工作方式很简单:在训练期间,它接收一个图像及其相关的标签。在推理期间,它接收一个图像并返回所有预测的标签。图像分类算法使用 CNN(ResNet)进行训练。它可以从头开始训练模型,或者利用迁移学习预先加载神经网络的前几层。
根据 AWS 的文档,支持.jpg和.png文件格式,但推荐格式是MXNet 的 RecordIO。
语义分割算法
语义分割算法提供了创建计算机视觉应用的像素级能力。它将图像的每个像素标记为类别,这对于自动驾驶和医学图像诊断等复杂应用是一个重要特性。
在其实现方面,语义分割算法使用MXNet Gluon 框架和Gluon CV 工具包。你可以选择以下任何算法来训练模型:
-
全卷积网络(FCN)
-
金字塔场景解析(PSP)
-
DeepLabV3
所有这些选项都作为编码器-解码器神经网络架构工作。网络的输出被称为分割掩码。
目标检测算法
就像图像分类算法一样,目标检测算法的主要目标也是不言而喻的:它在图像中检测和分类对象。它使用监督方法来训练深度神经网络。
在推理过程中,此算法返回识别出的对象以及关于预测的置信度分数。目标检测算法使用单次多框检测器(SSD)并支持两种类型的网络架构:视觉几何组(VGG)和残差网络(ResNet)。
摘要
这真是一次难忘的旅程!花点时间回顾一下你刚刚学到的内容。本章有四个主要主题:监督学习、无监督学习、文本分析和图像处理。你所学的所有内容都适合于机器学习的这些子领域。
你所研究的监督学习算法列表包括以下内容:
-
线性学习器
-
分解机
-
XGBoost
-
KNN
-
Object2Vec
-
DeepAR 预测
记住,你可以使用线性学习器、分解机、XGBoost 和 KNN 来完成多种目的,包括解决回归和分类问题。线性学习器可能是这四种算法中最简单的;分解机扩展了线性学习器,适用于稀疏数据集,XGBoost 使用基于决策树的集成方法,而 KNN 是一种基于索引的算法。
其他两种算法,Object2Vec 和 DeepAR,用于特定的目的。Object2Vec 用于创建数据的向量表示,而 DeepAR 用于创建预测模型。
你所研究的无监督学习算法列表包括以下内容:
-
K-Means
-
PCA
-
IP Insights
-
RCF
K-Means 是一个非常流行的算法,用于聚类。PCA 用于降维,IP Insights 用于模式识别,RCF 用于异常检测。
然后,你更详细地研究了回归模型和 K-Means。你这样做是因为,作为一名数据科学家,你应该至少掌握这两个非常流行的算法,这样你就可以自己深入研究其他算法。
然后,你继续学习本章的第二部分,其中你学习了文本分析和以下算法:
-
BlazingText
-
序列到序列
-
LDA
-
NTM
最后,你学习了图像处理,并查看以下内容:
-
图像分类算法
-
语义分割算法
-
目标检测算法
由于本章涉及的主题对于 AWS 认证机器学习专业考试非常重要,我们强烈建议您访问 AWS 网站并搜索机器学习算法。在那里,您将找到您刚刚学到的算法的最新信息。请确保在考试前完成此操作。
这就结束了这个快速复习和本章的内容。在下一章中,您将了解 AWS 提供的现有机制,您可以使用这些机制来优化和评估这些算法。
考试准备练习 – 章节复习问题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项有助于您通过认证考试的技能。这就是为什么在您的学习旅程早期就培养这些技能是关键。
章节复习问题旨在随着您学习并复习每个章节的内容,逐步提高您的应试技巧,同时检查您对章节中关键概念的理解。您将在每个章节的末尾找到这些内容。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线练习资源。
要打开本章的章节复习问题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH06。或者,您可以扫描以下二维码(图 6.19):

图 6.19 – 为登录用户打开章节复习问题的二维码
- 一旦登录,您将看到一个类似于图 6.20所示的页面:

图 6.20 – 第六章的章节复习问题
- 准备就绪后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不必担心时间限制。
尝试 1
第一次,目标至少达到40%。查看您答错的答案,并再次阅读章节中的相关部分以修复学习差距。
尝试 2
第二次,目标至少达到60%。查看您答错的答案,并再次阅读章节中的相关部分以修复任何剩余的学习差距。
尝试 3
第三次,目标至少达到75%。一旦得分达到 75%或更高,您就开始练习计时。
小贴士
您可能需要超过三次尝试才能达到 75%。没关系。只需复习章节中的相关部分,直到达到目标。
正在练习计时
目标:您的目标是保持得分不变,同时尽可能快速地回答这些问题。以下是如何进行下一次尝试的示例:
| 尝试 | 得分 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分 30 秒 |
| 尝试 6 | 78% | 18 分 34 秒 |
| 尝试 7 | 76% | 14 分 44 秒 |
表 6.11 – 在线平台上的样本时间练习练习
备注
上表中显示的时间限制只是示例。根据网站上的测验时间限制,每次尝试时自行设定你的时间限制。
每次新的尝试,你的分数应保持在 75% 以上,同时完成所需的时间“应减少”。重复尝试,直到你觉得自己能够自信地应对时间压力。
第七章:评估和优化模型
现在是时候学习如何评估和优化机器学习模型了。在建模过程中,甚至在模型完成之后,你可能想要了解你的模型表现如何。每种类型的模型都有自己的一套可以用来评估性能的指标,这就是你将在本章学习的内容。
除了模型评估之外,作为一名数据科学家,你可能还需要通过调整算法的超参数来提高模型性能。你将了解这个建模任务的某些细微差别。
本章将涵盖以下主题:
-
介绍模型评估
-
评估分类模型
-
评估回归模型
-
模型优化
好的,是时候摇滚起来啦!
介绍模型评估
有几种不同的场景,你可能想要评估模型性能。以下是一些例子:
-
你正在创建一个模型并测试不同的方法和/或算法。因此,你需要比较这些模型以选择最佳模型。
-
你刚刚完成了你的模型,你需要记录你的工作,这包括指定你在建模阶段得到的模型性能指标。
-
你的模型正在生产环境中运行,你需要跟踪其性能。如果你遇到模型漂移,那么你可能需要重新训练模型。
重要提示
“模型漂移”这个术语用来指代模型退化的问题。当你构建机器学习模型时,你必须使用数据来训练算法。这组数据被称为训练数据,它反映了特定时间点的业务规则。如果这些业务规则随时间变化,你的模型可能无法适应这些变化。这是因为它是基于另一个数据集进行训练的,该数据集反映了另一个业务场景。为了解决这个问题,你必须重新训练模型,以便它能够考虑新业务场景的规则。
模型评估通常在测试的上下文中进行。你之前已经学过保留验证和交叉验证。然而,这两种测试方法都有相同的要求:它们需要一个指标来评估性能。
这些指标是特定于问题域的。例如,回归模型、分类模型、聚类、自然语言处理等领域都有特定的指标。因此,在设计你的测试方法时,你必须考虑你正在构建哪种类型的模型,以便定义评估指标。
在接下来的几节中,你将了解评估模型时应该知道的最重要指标和概念。
评估分类模型
分类模型是你可能会遇到的最传统的模型类别之一,无论是在考试中还是在作为数据科学家的旅程中。在分类模型评估期间你可能想要生成的非常重要的一项工具被称为混淆矩阵。
混淆矩阵比较你的模型预测与每个评估类别的真实值。图 7.1显示了在二元分类问题中混淆矩阵的形状:

图 7.1 – 混淆矩阵
混淆矩阵有以下组成部分:
-
TP:这是真正例的数量。在这里,你需要计算被预测为真且确实为真的案例数量。例如,在一个欺诈检测系统中,这将是正确预测为欺诈的欺诈交易数量。
-
TN:这是真正例的数量。在这里,你需要计算被预测为假且确实为假的案例数量。例如,在一个欺诈检测系统中,这将是被正确预测为非欺诈的非欺诈交易数量。
-
FN:这是假负例的数量。在这里,你需要计算被预测为假但实际上是真的案例数量。例如,在一个欺诈检测系统中,这将是被错误预测为非欺诈的欺诈交易数量。
-
FP:这是假正例的数量。在这里,你需要计算被预测为真但实际上是假的案例数量。例如,在一个欺诈检测系统中,这将是被错误预测为欺诈的非欺诈交易数量。
在理想情况下,你的混淆矩阵将只有真正例和真正例,这意味着你的模型准确率为 100%。从实际角度来说,如果出现这种情况,你应该持怀疑态度而不是高兴,因为预期你的模型将包含一定程度的错误。如果你的模型不包含错误,你很可能是过度拟合问题,所以请小心。
一旦预期到假负例和假正例,你能做的最好的事情就是优先考虑其中之一。例如,你可以通过增加假正例的数量来减少假负例的数量,反之亦然。这被称为精确率与召回率的权衡。让我们接下来看看这些指标。
从混淆矩阵中提取指标
可以从混淆矩阵中提取的最简单指标被称为准确率。准确率由以下方程给出,如图 7.2所示:

图 7.2 – 准确率的公式
为了演示,图 7.3显示了包含数据的混淆矩阵。

图 7.3 – 填充了一些示例的混淆矩阵
根据图 7.3,准确度将是(100 + 90) / 210,等于 0.90。当使用准确度指标时,会出现一个常见问题,这与每个类别的平衡有关。高度不平衡的类别问题,如 99%的正例和 1%的负例,将影响准确度得分并使其无用。
例如,如果你的训练数据有 99%的正例(多数类),你的模型可能正确分类大多数正例,但在负例(少数类)的分类上表现不佳。准确度将非常高(由于正例分类的正确性),而不管少数类分类的结果如何。
重点是,在高度不平衡的问题上,你通常更感兴趣的是正确分类少数类,而不是多数类。这在大多数欺诈检测系统中都是如此,例如,少数类对应于欺诈案例。对于不平衡问题,你应该寻找其他类型的指标,你将在下一节中了解到。
从混淆矩阵中可以提取的另一个重要指标称为召回率,其公式如下,如图 7.4所示:

图 7.4 – 召回率公式
换句话说,召回率是真实正例数除以正例总数。召回率也称为灵敏度。
在图 7.3.3 中的数值,召回率由 100 / 112 给出,等于 0.89。另一方面,精确度由以下公式给出,如图 7.5所示:

图 7.5 – 精确度公式
换句话说,精确度是真实正例数除以预测正例总数。精确度也被称为阳性预测力。
在图 7.3中的数值,精确度由 100 / 108 给出,等于 0.93。一般来说,你可以通过降低召回率来提高精确度,反之亦然。还有一个模型评估的指标,你可以在这个精确度与召回率的权衡中玩转。它被称为精确度-召回率曲线。
精确度-召回率曲线通过使用不同的概率阈值来总结精确度与召回率的权衡。例如,默认阈值为 0.5,其中任何高于 0.5 的预测将被认为是真实的;否则,它是假的。你可以根据需要更改默认阈值,以便你可以优先考虑召回率或精确度。图 7.6显示了精确度-召回率曲线的一个示例:

图 7.6 – 精确度-召回率曲线
正如你在图 7.6中看到的那样,提高精确率会减少召回量,反之亦然。图 7.6显示了梯度提升模型(由橙色线表示)与无技能模型(由蓝色虚线表示)在每个阈值下的精确率/召回率。一个完美的模型将曲线近似到点(1,1),在图表的右上角形成一个平方角。
你还可以在混淆矩阵之上使用另一种视觉分析,称为接收者操作特征(ROC)曲线。ROC 曲线总结了根据不同阈值,真正例率和假正例率之间的权衡,就像精确率-召回率曲线一样。
你已经了解了真正例率,或称为灵敏度,这与你刚刚在精确率-召回率曲线中学到的是相同的。ROC 曲线的另一个维度是假正例率,它是假正例数除以假正例数加上真正例数的数量。
在文献中,你可能会发现假正例率被称为倒数特异性,表示为1 – 特异性。特异性给出的是真正例数除以真正例数加上假正例数的数量。此外,假正例率或倒数特异性是相同的。图 7.7显示了 ROC 曲线的样子:

图 7.7 – ROC 曲线
一个完美的模型将曲线近似到点(0,1),在图表的左上角形成一个平方角。橙色线代表梯度提升分类器的真正例率和假正例率之间的权衡。虚线蓝色线代表一个无技能模型,无法正确预测类别。
总结来说,你可以使用 ROC 曲线来评估相对平衡的数据集,而使用精确率-召回率曲线来评估中等至不平衡的数据集。
总结精确率和召回率
有时候,你可能想使用一个总结精确率和召回率的指标,而不是优先考虑其中一个。有两个非常流行的指标可以用来总结精确率和召回率:F1 分数和曲线下面积(AUC)。
F1 分数,也称为F-measure,计算精确率和召回率的调和平均值。AUC 总结了精确率-召回率曲线下的近似面积。
这就结束了本节关于分类指标的讨论。现在让我们来看看回归模型的评估指标。
评估回归模型
回归模型与分类模型有很大不同,因为模型的输出是一个连续的数字。因此,围绕回归模型的指标旨在监控实际值和预测值之间的差异。
检查预测值(yhat)与其实际值(y)之间差异的最简单方法是进行简单的减法运算,其中误差将等于yhat – y的绝对值。这个指标被称为平均绝对误差(MAE)。
由于你通常必须评估每个预测的误差,i,你必须取误差的平均值。图 7.8展示了如何正式定义此误差:

图 7.8 – 每个预测误差的公式
有时候,你可能想要对较大的误差进行惩罚,而不是较小的误差。为了实现这一点,你可以使用另一个指标,称为平均平方误差(MSE)。MSE 将平方每个误差并返回平均值。
通过平方误差,MSE 将对较大的误差进行惩罚。图 7.9展示了如何正式定义 MSE:

图 7.9 – MSE 的公式
MSE 存在一个潜在的解读问题。由于它必须计算平方误差,因此从商业角度解读最终结果可能很困难。均方根误差(RMSE)通过取 MSE 的平方根来解决这个问题。图 7.10展示了 RMSE 的方程:

图 7.10 – RMSE 的公式
RMSE 是回归模型中最常用的指标之一,因为它可以惩罚较大的误差,同时仍然易于解读。
探索其他回归指标
除了你刚刚学到的那些之外,还有很多适合回归问题的指标。你在这里不会学习到它们中的大多数,但你会了解到一些可能对你很重要的额外指标。
这些指标之一被称为平均绝对百分比误差(MAPE)。正如其名所示,MAPE 将计算每个预测的绝对百分比误差,然后取平均值。图 7.11展示了如何计算此指标:

图 7.11 – MAPE 的公式
MAPE 在预测模型中得到广泛应用,因为它非常简单易懂,并且可以很好地提供预测值(从百分比的角度)与实际值之间的距离(或接近程度)的感觉。
你现在已经完成了关于回归指标的这一部分。接下来,你将学习关于模型优化的内容。
模型优化
正如你所知,为了衡量你的模型性能并记录你的工作,理解评估指标非常重要。同样,当你想要优化当前模型时,评估指标在定义你想要挑战的基线性能中也起着非常重要的作用。
模型优化的过程包括为特定数据分布找到机器学习算法的最佳配置(也称为超参数)。你不想找到过度拟合训练数据的超参数,就像你不想找到欠拟合训练数据的超参数一样。
你在第一章《机器学习基础》中学习了过拟合和欠拟合。在同一章中,你也学习了如何避免这两种建模问题。
在本节中,你将了解一些你可以用来为特定算法和数据集找到最佳配置的技术。你可以将这些模型优化技术与其他方法(如交叉验证)结合起来,以找到最佳的超参数集,避免拟合问题。
重要提示
总是记住,你不想优化你的算法以适应底层的训练数据,而是要适应训练数据背后的数据分布,这样你的模型才能在训练数据和生产数据(在训练过程中从未暴露给模型的那些数据)上工作。一个只在训练数据上工作的机器学习模型是无用的。这就是为什么将模型调整技术(如你接下来将要学习的)与采样技术(如交叉验证)结合起来,在创建一个好的模型时至关重要。
网格搜索
网格搜索可能是模型优化中最受欢迎的方法。它包括测试不同的算法组合并选择最佳的一个。在这里,有两个重要的点你需要注意:
-
如何定义模型的最佳配置
-
应该测试多少配置
最佳模型是根据评估指标定义的。换句话说,你必须首先定义你将使用哪个指标来评估模型的性能。其次,你必须定义你将如何评估模型。通常,交叉验证用于在多个从未用于训练的数据集上评估模型。
在组合/配置的数量方面,这是使用网格搜索时最具挑战性的部分。算法的每个超参数可能有多个或有时是无限的可能值。如果你考虑到一个算法通常会有多个超参数,这将成为一个二次成本函数,其中要测试的唯一组合数量给出为超参数 a 的值数 * 超参数 b 的值数 * 超参数 i 的值数。表 7.1展示了你可以如何为决策树模型设置潜在的网格搜索配置:
| 标准 | 最大深度 | 最小样本叶 |
|---|---|---|
| Gini, Entropy | 2, 5 =, 10 | 10, 20, 30 |
表 7.1 – 网格搜索配置
在表 7.1中,有三个超参数:标准差、最大深度和最小叶子节点样本数。每个超参数都有一个测试值的列表。这意味着在网格搜索过程结束时,你将测试 18 个模型(2 * 3 * 3),其中只有最好的一个将被选中。
正如你可能注意到的,所有这三个超参数的不同组合都将被测试。例如,考虑以下内容:
-
标准差 = Gini,最大深度 = 2,最小叶子节点样本数 = 10
-
标准差 = Gini,最大深度 = 5,最小叶子节点样本数 = 10
-
标准差 = Gini,最大深度 = 10,最小叶子节点样本数 = 10
你可能还有其他问题,例如以下内容:
-
考虑到特定的算法可能有多个超参数,我应该调整哪些?
-
考虑到特定的超参数可能接受无限值,我应该测试哪些值?
这些是很好的问题,网格搜索并不能直接给出答案。相反,这更接近于一个经验过程,你需要测试足够多的内容以达到你的目标性能。
重要提示
当然,网格搜索不能保证你会达到你的目标性能。这取决于算法和训练数据。
虽然通常的做法是使用线性空间或对数空间来定义测试值,这样你可以手动设置想要测试的超参数的界限和测试值的数量。然后,中间值将通过线性或对数函数生成。
如你所想,网格搜索可能需要很长时间才能运行。已经提出了许多替代方法来解决这个问题。随机搜索就是其中之一,其中测试值的列表是从搜索空间中随机选择的。
另一种在业界迅速得到广泛采用的方法被称为贝叶斯优化。算法优化,如梯度下降,试图找到所谓的全局最小值,通过计算成本函数的导数来实现。全局最小值是找到算法配置与最低相关成本的位置。
当计算导数不是一种选择时,贝叶斯优化是有用的。因此,你可以使用贝叶斯定理,一种概率方法,通过最少的步骤来找到全局最小值。
在实际应用中,贝叶斯优化将从整个搜索空间开始测试,以找到最有希望的一组最优超参数。然后,它将在全局最小值可能存在的位置进行更具体的测试。
摘要
在本章中,你学习了模型评估的主要指标。你从分类问题的指标开始,然后转向回归问题的指标。
在分类指标方面,你已经介绍了众所周知的混淆矩阵,这可能是对分类模型进行模型评估最重要的工具。
你学习了真阳性、真阴性、假阳性和假阴性。然后,你学习了如何将这些组件组合起来提取其他指标,例如准确率、精确率、召回率、F1 分数和 AUC。
然后,你进一步学习了 ROC 曲线和精确率-召回率曲线。你了解到可以使用 ROC 曲线来评估相当平衡的数据集,而对于中等到不平衡的数据集,则可以使用精确率-召回率曲线。
顺便说一句,当你处理不平衡数据集时,请记住使用准确率可能不是一个好主意。
在回归指标方面,你了解到最流行且最可能在AWS 机器学习专业考试中出现的指标是 MAE、MSE、RMSE 和 MAPE。在参加考试之前,确保你了解它们的基本知识。
最后,你学习了超参数优化的方法,例如网格搜索和贝叶斯优化。在下一章中,你将了解 AWS 人工智能/机器学习应用服务。但在那之前,花点时间练习这些关于模型评估和模型优化的问题。
考试准备练习 – 复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的关键技能。这就是为什么在学习的早期阶段就培养这些技能至关重要。
复习题旨在随着你学习并复习每一章的内容,逐步提高你的应试技巧,同时复习章节中的关键概念。你可以在每一章的末尾找到这些练习。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线练习资源。
要打开本章的复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH07。或者,你可以扫描以下二维码(图 7.12):

图 7.12 – 为登录用户打开第七章复习题的二维码
- 登录后,你将看到一个类似于图 7.13所示的页面:

图 7.13 – 第七章复习题
- 准备就绪后,开始以下练习,多次尝试测验。
考试准备练习
对于前三次尝试,不必担心时间限制。
尝试 1
第一次,目标至少达到40%。查看你答错的答案,并再次阅读章节中的相关部分,以修复你的学习差距。
尝试 2
第二次,目标至少达到60%。查看你答错的答案,并再次阅读章节中的相关部分,以修复任何剩余的学习差距。
尝试 3
第三次,目标至少达到75%。一旦你的得分达到 75%或更高,你就可以开始练习时间管理了。
小贴士
你可能需要超过三次尝试才能达到 75%。这是可以的。只需复习章节中的相关部分,直到你达到目标。
工作在时间管理上
目标:你的目标是保持分数不变,同时尽可能快地回答这些问题。以下是你下一次尝试应该看起来像的样子:
| 尝试 | 得分 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分钟 30 秒 |
| 尝试 6 | 78% | 18 分钟 34 秒 |
| 尝试 7 | 76% | 14 分钟 44 秒 |
表 7.2 – 在线平台上的样本时间练习练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,为每次尝试设定自己的时间限制。
每次新的尝试,你的得分应该保持在75%以上,而完成所需的时间应该“减少”。重复尽可能多的尝试,直到你对自己应对时间压力有信心。
第八章:AWS 应用服务用于 AI/ML
在本章中,你将了解 AWS AI 服务,用于构建聊天机器人、高级文本分析、文档分析、转录等。本章的设计方式使得你可以通过集成 AWS AI 服务来解决不同的用例,并了解它们的工作原理。AWS 每天都在增长,并且他们定期添加新的 AI 服务。
在本章中,你将通过编程或从控制台处理不同的用例。这将帮助你了解不同的 API 以及如何使用它们。你将使用 S3 进行存储,并使用 AWS Lambda 执行任何代码。本章中的示例使用 Python 编写,但你也可以使用其他支持的语言,例如 Java、Node.js、.NET、PowerShell、Ruby 等。
你将涵盖以下主题:
-
使用 Amazon Rekognition 分析图像和视频
-
使用 Amazon Polly 进行文本到语音转换
-
使用 Amazon Transcribe 进行语音转文本
-
使用 Amazon Comprehend 实施自然语言处理
-
使用 Amazon Translate 翻译文档
-
使用 Amazon Textract 从文档中提取文本
-
在 Amazon Lex 上创建聊天机器人
-
使用 Amazon Forecast 进行时间序列预测
技术要求
本章所需的所有内容只是一个 AWS 账户。
你可以从 GitHub 下载本章的代码示例,网址为 github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08。
使用 Amazon Rekognition 分析图像和视频
如果你需要为你的应用程序添加强大的视觉分析,那么Amazon Rekognition是你要选择的服务。Rekognition Image让你轻松构建强大的应用程序来搜索、验证和组织数百万张图像。它让你从存储或实时流视频中提取基于运动的内容,并帮助你分析它们。Rekognition Video 还允许你索引诸如对象、活动、场景、名人、面部等元数据,使视频搜索变得容易。Rekognition Image 使用深度神经网络模型来检测和标记你图像中的众多对象和场景。它帮助你捕获图像中的文本,有点像光学字符识别 (OCR)。一个完美的例子是印有引语的 T 恤。如果你要拍一张照片并让 Amazon Rekognition 从中提取文本,它就能告诉你文本的内容。你也可以使用 Amazon Rekognition 进行名人识别。不是名人的人不会使用名人识别 API 来处理他们的面部;相反,他们将使用面部比较 API。
官方文档可在 aws.amazon.com/rekognition/faqs/ 查找,其中说明了以下内容:
“使用 Rekognition Image,您只需为分析的图像和存储的面部元数据付费。如果您的训练在任何时候失败,您将不会收取计算资源费用。”
Amazon Rekognition 的以下是一些常见用途:
-
图像和视频分析
-
可搜索的图像库
-
基于面部用户验证
-
情感分析
-
图像中的文本
-
面部识别
-
图像审查
-
视频存档的搜索索引
-
在视频中轻松过滤明显的和暗示的内容
-
明显裸露的例子——性行为、图形裸露、成人玩具等等
-
暗示内容的例子——部分裸露、泳装或内衣等等
探索 Amazon Rekognition 的益处
这里是使用 Amazon Rekognition 的一些好处:
-
AWS 管理其运行的底层基础设施。简而言之,只需使用 API 进行图像分析。您只需专注于构建和管理您的深度学习管道。
无论是否了解图像处理,您只需使用 Amazon Rekognition 提供的 API,就可以进行图像和视频分析,这些 API 可用于多个平台上的任何应用程序或服务。
-
标签 API 的响应将通过 DetectLabels API 识别图像中的真实世界实体。这些标签包括城市、镇、桌子、家庭、花园、动物、宠物、食物、饮料、电子产品、花卉等等。实体根据其 置信度分数 进行分类,该分数表示给定预测正确的概率——分数越高,越好。同样,您可以使用 DetectText API 从图像中提取文本。Amazon Rekognition 可能会根据单词之间的间隔检测多行。句点不代表行的结束。
-
Amazon Rekognition 可以与 AWS Kinesis Video Stream、AWS S3 和 AWS Lambda 集成,以实现无缝且经济的图像和视频分析。使用 AWS IAM 服务,Amazon Rekognition API 调用可以轻松地得到保护和控制。
-
低成本:您只需为分析的图像和视频付费。
-
通过 AWS CloudTrail,可以捕获 Amazon Rekognition 的所有 API 调用作为事件。它捕获来自控制台、CLI 或代码对 API 的调用,这进一步使用户能够根据 CloudTrail 事件创建 Amazon SNS 通知。
-
您可以为特定的 API 调用创建 VPC 端点策略,以在您的 VPC 和 Amazon Rekognition 之间建立私有连接。这有助于您利用增强的安全性。根据 AWS 共享责任模型,AWS 负责基础设施和软件的安全性,而您必须负责云中内容的安全性。
亲身体验 Amazon Rekognition
在本节中,您将学习如何将 AWS Lambda 与 Amazon Rekognition 集成,以检测我们图像(上传至github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Rekognition%20Demo/images)中的标签,并在 CloudWatch 控制台中打印检测到的对象。您将在代码中使用 Amazon Rekognition 的detect_labels API。
您将首先为 Lambda 创建一个 IAM 角色:
-
导航到 IAM 控制台页面。
-
从左侧菜单中选择角色。
-
选择创建角色。
-
从选择一个用例部分选择Lambda。
-
添加以下托管策略:
-
AmazonS3ReadOnlyAccess -
AmazonRekognitionFullAccess -
CloudWatchLogsFullAccess
-
-
将角色命名为
rekognition-lambda-role:![图 8.1 – 创建角色的对话框]()
图 8.1 – 创建角色的对话框
接下来,您将创建一个 Lambda 函数。
-
导航到 AWS Lambda 控制台页面。
-
选择创建函数。
-
创建一个函数:
-
选择
lambda-rekognition。 -
从
rekognition-lambda-role中选择Python 3.6:
-

图 8.2 – 创建 Lambda 函数
-
在
lambda_function.py中输入以下代码:from __future__ import print_functionimport boto3def lambda_handler(event, context):print("========lambda_handler started=======")# read the bucket name (key) from the eventname_of_the_bucket=event['Records'][0]['s3']['bucket']['name']# read the object from the eventname_of_the_photo=event['Records'][0]['s3']['object']['key']detect_labels(name_of_the_photo,name_of_the_bucket)print("Labels detected Successfully")def detect_labels(photo, bucket):client=boto3.client('rekognition')response=client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}})print('Detected labels for ' + photo)print('==============================')for label in response['Labels']:print ("Label: " + label['Name'])print ("Confidence: " +str(label['Confidence']))print ("Instances:")for instance in label['Instances']:print (" Bounding box")print ("Top:"+str(instance['BoundingBox']['Top']))print ("Left: \"+str(instance['BoundingBox']['Left']))print ("Width: \"+str(instance['BoundingBox']['Width']))print ("Height: \"+str(instance['BoundingBox']['Height']))print ("Confidence:"+str(instance['Confidence']))print()print ("Parents:")for parent in label['Parents']:print (" " + parent['Name'])print ("----------")print('==============================')return response现在,您将为 Lambda 函数创建一个触发器。
-
导航到 AWS S3 控制台页面。创建一个存储桶,例如,
rekognition-test-baba,如图图 8**.3所示:

图 8.3 – AWS S3 控制台页面
-
点击
images。点击保存。 -
点击我们存储桶的属性选项卡。
-
滚动到该存储桶的事件。
-
在
rekognition_event内部 -
所有对象创建事件 -
images/ -
Lambda 函数
lambda-rekognition:

图 8.4 – S3 存储桶事件窗口
接下来,您将把从共享 GitHub 仓库中的图像上传到 S3 存储桶的images文件夹。
- 一旦上传,您就可以检查 Lambda 控制台中的监控选项卡来监控事件,如图图 8**.5所示:

图 8.5 – CloudWatch 在 Lambda 控制台中监控事件
- 导航到
CloudWatch > CloudWatch 日志 > 日志组 > /aws/lambda/lambda-rekognition。从 AWS 控制台上列出的所有流中选择最新的流,并在日志中向下滚动以查看您的输出。
在本节中,你学习了如何实现 Amazon Rekognition 人工智能服务以检测图像中的对象并为每个对象获取置信度分数。你将在接下来的章节中看到 Amazon Rekognition 的更多用例,其中你将检测图像中的文本。在下一节中,你将了解 Amazon 的文本到语音服务并实现它。
使用 Amazon Polly 进行文本到语音转换
Amazon Polly 的一切都是将文本转换为语音,它是通过使用预训练的深度学习模型来实现的。这是一个完全托管的服务,因此你不需要做任何事情。你提供纯文本作为合成输入或在 语音合成 标记语言 (SSML) 格式下,以便返回音频流。它还提供了不同的语言和声音供你选择,包括男性和女性选项。Amazon Polly 的输出音频可以保存为 MP3 格式,以便在应用程序(网页或移动)中进一步使用,或者可以是一个 JSON 输出,用于书面语音。
例如,如果你要将文本“Baba 去了图书馆”输入到 Amazon Polly 中,输出语音标记对象将如下所示:
{"time":370,"type":"word","start":5,"end":9,"value":"went"}
单词 "went" 在音频流开始后的 370 毫秒处开始,从给定输入文本的字节 5 开始,到字节 9 结束。
它还以 ogg_vorbis 和 pcm 格式返回输出。当使用 pcm 时,返回的输出内容是 audio/pcm,以有符号 16 位、1 通道(单声道)、小端格式。
Amazon Polly 的常见用途包括以下内容:
-
可以用作阅读网络内容的辅助工具。
-
可以与 Amazon Rekognition 集成,帮助视障人士阅读标志。你可以点击带有文本的标志图片并将其提供给 Amazon Rekognition 以提取文本。输出文本可以用作 Polly 的输入,它将返回语音输出。
-
可以用于公共广播系统,管理员团队只需传递要宣布的文本,Amazon Polly 就会施展魔法。
-
通过将 Amazon Polly 与
音频/视频接收器(AVR) 系统结合使用。 -
智能设备,如智能电视、智能手表和 物联网 (IoT) 设备,可以使用它进行音频输出。
-
叙述生成。
-
当与 Amazon Lex 结合使用时,可以开发应用程序的完整语音用户界面。
现在,让我们探索 Amazon Polly 的优势。
探索 Amazon Polly 的优势
使用 Amazon Polly 的好处包括以下内容:
-
此服务完全托管,无需任何管理成本来维护或管理资源。
-
它提供即时语音校正和增强功能。
-
你可以使用 Amazon Polly 的 HTTP API 开发自己的访问层。由于有大量的语言支持,如 Python、Ruby、Go、C++、Java 和 Node.js,因此开发变得非常容易。
-
对于某些神经网络语音,可以使用新闻主播风格进行语音合成,使其听起来像电视或广播电台的广播员。
-
Amazon Polly 还允许您修改特定单词的发音或使用新单词。
接下来,您将亲身体验 Amazon Polly。
亲身体验 Amazon Polly
在本节中,您将构建一个管道,其中可以集成 AWS Lambda 与 Amazon Polly。该管道读取文本文件并生成 MP3 文件,将其保存到同一存储桶中的另一个文件夹。您将在 CloudWatch 日志中监控任务的进度。
您将首先为 Lambda 创建一个 IAM 角色。让我们开始吧:
-
导航到 IAM 控制台页面。
-
从左侧菜单中选择 角色。
-
选择 创建角色。
-
选择 Lambda 作为受信任实体。
-
添加以下托管策略:
-
AmazonS3FullAccess -
AmazonPollyFullAccess -
CloudWatchFullAccess
-
-
将角色保存为
polly-lambda-role。接下来,您将创建一个 Lambda 函数:
-
导航到
Lambda > 函数 >创建函数。-
将函数命名为
polly-lambda -
将运行时设置为
python 3.6。 -
使用现有角色;即
polly-lambda-role。
-
-
将代码粘贴到
github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Rekognition%20Demo/lambda_code并在 Lambda 函数中检查其在 CloudWatch 控制台中的进度。您将使用 Amazon Polly 的start_speech_synthesis_taskAPI 来执行此代码;它是一个异步合成任务。 -
滚动到
59秒,如图 图 8**.6 所示,然后点击 保存:
重要提示
默认值为 3 秒。由于这是一个异步操作,任何重试尝试都会创建更多文件。

图 8.6 – 编辑基本设置窗口
现在,您将创建一个存储桶以触发事件。
-
导航到 AWS S3 控制台并创建一个名为
polly-test-baba的存储桶。 -
创建一个名为
input-text的文件夹(在这个例子中,您将只上传.txt文件)。 -
导航到
属性 > 事件 > 添加通知。填写所需字段,如图所示,然后点击polly_event -
All objectcreate events -
input-text/ -
.txt -
Lambda Function -
polly-lambda -
接下来,您将上传一个文件以触发事件,并在 CloudWatchUpload 中检查其进度,在这种情况下,一个名为
test_file.txt的文件位于input-text中,如图8.7所示。您可以从本书的 GitHub 存储库中下载示例文件,网址为github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Polly%20Demo/text_file:

图 8.7 – 上传文本文件以进行进一步处理后的 S3 存储桶
-
这将触发 Lambda 函数。您可以通过访问
CloudWatch> CloudWatch Logs> 日志组> /aws/lambda/polly-lambda来监控您的日志。 -
点击最新的流;日志将如下所示:
File Content: Hello Everyone, Welcome to Dublin. Howare you doing today?{'ResponseMetadata': {'RequestId': '74ca4afd-5844-47d8-9664-3660a26965e4', 'HTTPStatusCode': 200,'HTTPHeaders': {'x-amzn-requestid': '74ca4afd-5844-47d8-9664-3660a26965e4', 'content-type':'application/json', 'content-length': '471', 'date':'Thu, 24 Sep 2020 18:50:57 GMT'}, 'RetryAttempts': 0},'SynthesisTask': {'Engine': 'standard', 'TaskId':'57548c6b-d21a-4885-962f-450952569dc7', 'TaskStatus':'scheduled', 'OutputUri': 'https://s3.us-east-1.amazonaws.com/polly-test-baba/output-audio/.57548c6b-d21a-4885-962f-450952569dc7.mp3','CreationTime': datetime.datetime(2020, 9, 24, 18, 50,57, 769000, tzinfo=tzlocal()), 'RequestCharacters':59, 'OutputFormat': 'mp3', 'TextType': 'text','VoiceId': 'Aditi', 'LanguageCode': 'en-GB'}}日志样本如图8.8所示:

图 8.8 – CloudWatch 控制台中的日志
- 它将以 MP3 格式创建输出,如图8.9所示。下载并收听它:

图 8.9 – 在 S3 存储桶中创建的输出文件
重要注意事项
对于您的移动应用或 Web 应用来说,最具可扩展性和成本效益的方式是生成 AWS 预签名 URL 以供 S3 存储桶使用,并将其提供给您的用户。这些 S3 Put 事件异步调用下游 AI 工作流程以生成结果,并向最终用户发送响应。通过这种方式,可以同时为许多用户提供服务,并且可能会提高性能和吞吐量。
在本节中,您学习了如何实现文本到语音。在下一节中,您将学习关于 Amazon Transcribe,这是一种语音到文本的 AI 服务。
使用 Amazon Transcribe 进行语音到文本
在上一节中,您学习了关于文本到语音的内容。在本节中,您将学习关于语音到文本及其提供的服务:Amazon Transcribe。它是一个自动语音识别服务,使用预训练的深度学习模型,这意味着您不需要在 PB 级数据上进行训练以生成模型;亚马逊为我们完成这项工作。您只需使用可用的 API 来转录音频文件或视频文件;它还支持多种不同的语言和自定义词汇。准确性是关键,并且通过自定义词汇,您可以根据所需的领域或行业进行增强:

图 8.10 – Amazon Transcribe 输入和输出的框图
Amazon Transcribe 的一些常见用途包括以下内容:
-
实时音频流和转录
-
转录预录制的音频文件
-
通过结合 AWS Elasticsearch 和 Amazon Transcribe 启用从媒体文件中进行文本搜索
-
对录音音频文件进行情感分析以帮助语音帮助台(接触中心分析)
-
频道识别分离
接下来,你将探索 Amazon Transcribe 的好处。
探索 Amazon Transcribe 的好处
让我们看看使用 Amazon Transcribe 的一些好处:
-
VocabularyFilterName和VocabularyFilterMethod,这些是由StratTranscriptionJob操作提供的。例如,在金融机构中,这可以用来编辑呼叫者的详细信息。 -
语言识别:它可以自动识别音频文件中最常用的语言并生成转录文本。如果你有多个音频文件,这项服务将帮助你按语言对它们进行分类。
-
流式转录:你可以将记录的音频文件或实时音频流发送到 Amazon Transcribe,并实时输出文本流。
-
自定义词汇或定制转录:你可以根据你的特定需求使用自定义词汇表来生成准确的转录文本。
-
时间戳生成:如果你想为视频创建或添加字幕,那么 Amazon Transcribe 可以从音频中返回每个单词或短语的时戳。
-
成本效益:作为一个托管服务,没有基础设施成本。
现在,让我们亲自动手使用 Amazon Transcribe。
亲自动手使用 Amazon Transcribe
在本节中,你将构建一个管道,其中你可以将 AWS Lambda 与 Amazon Transcribe 集成,以读取存储在 S3 桶中文件夹中的音频文件,然后将输出 JSON 文件存储在另一个 S3 桶中。你还将通过 CloudWatch 日志监控任务的进度。你将使用 start_transcription_job 异步函数来启动我们的工作,并通过 get_transcription_job 持续监控工作,直到其状态变为 COMPLETED。让我们开始吧:
-
首先,为 Lambda 函数创建一个名为
transcribe-demo-role的 IAM 角色,以确保它可以读取和写入 S3,使用 Amazon Transcribe,并在 CloudWatch 日志中打印输出。将以下策略添加到 IAM 角色中:-
AmazonS3FullAccess -
CloudWatchFullAccess -
AmazonTranscribeFullAccess
-
-
现在,你将使用现有的 IAM 角色
transcribe-demo-role创建一个名为transcribe-lambda的 Lambda 函数,并将其保存。请确保将
start_transcription_job中的默认超时时间更改为更高的值,以使用get_transcription_jobAPI 启动任务并监控它。 -
这应该会给我们以下输出:

图 8.11 – 我们创建的 Lambda 函数的基本设置部分
-
接下来,你将创建一个名为
transcribe-demo-101的 S3 存储桶和一个名为input的文件夹。通过访问audio-event创建一个事件 -
所有对象创建事件 -
input/ -
Lambda 函数 -
transcribe-lambda -
将
.mp4格式的音频文件上传到input文件夹。这将触发 Lambda 函数。根据代码,输出将以 JSON 格式存储在 S3 存储桶中,然后你可以用它来读取文件内容。 -
导航到
CloudWatch > CloudWatch Logs > Log groups > aws/lambda/transcribe-lambda。从列表中选择最新的流。它看起来如下:

图 8.12 – 在 CloudWatch 控制台中指定日志组中的日志记录
- 输出以 JSON 格式保存到 S3 存储桶中,如代码中提到的作业名称(你可以使用 S3 的
getObjectAPI 下载和读取它):

图 8.13 – S3 存储桶中的输出 JSON 文件
重要提示
不要过度配置函数的超时设置是一个最佳实践。始终了解你的代码性能,并相应地设置函数超时。过度配置函数超时会导致 Lambda 函数运行时间更长,造成意外的成本。如果你在 Lambda 函数中使用异步 API 调用,那么在成功时将它们写入 SNS 主题,并从那里触发另一个 Lambda 函数是个好主意。如果需要人工干预,建议使用 AWS Step Functions。
在本节中,你学习了并应用了 Amazon Transcribe 将语音转换为文本。在下一节中,你将了解你可以使用的最强大的 AWS AI 服务之一,以从我们的文本数据中获得最大洞察力。
使用 Amazon Comprehend 实现自然语言处理
此服务帮助你从非结构化文本中提取洞察力。非结构化文本信息呈指数增长。以下是一些数据源示例:
-
客户参与度:呼叫中心、问题分类、客户调查和产品评论
-
业务流程:客户/供应商电子邮件、产品支持消息和运营支持反馈
-
记录和研究:白皮书和医疗记录
-
新闻和社交媒体:社交媒体分析、品牌趋势和关联事件
现在,问题是,你能用这些数据做什么?你如何分析它并从中提取任何价值?答案是亚马逊理解,它用于从非结构化数据中获取洞察。
亚马逊理解的一些常见用途包括以下内容:
-
信息管理系统
-
有组织的主题上的更精确的搜索系统
-
用户情感分析
-
支持票分类
-
从文档中检测语言并将其翻译成英语使用亚马逊翻译
-
创建一个系统来标记非结构化临床数据,以协助研究和分析目的
-
从公司会议或电视新闻的保存音频文件中提取主题
接下来,你将探索亚马逊理解的益处。
探索亚马逊理解的益处
使用 Comprehend 的某些优势可以在以下图像中看到:

图 8.14 – 显示亚马逊理解功能的框图
让我们更详细地看看这些:
-
它检测文本的语言并提取关键短语。亚马逊理解也可用于情感分析和主题建模。
-
亚马逊理解医疗可用于提取医疗信息。
-
由于这是一个完全管理的服务,你只需为使用付费;你不需要为基础设施付费。你不需要训练、开发和部署自己的模型。
-
主题建模服务通过提取最多 100 个主题来工作。主题是一个关键词桶,这样你就可以看到实际文档语料库中的内容。
-
它是准确的、持续训练的,并且易于使用。
接下来,你将亲身体验亚马逊理解。
亲身体验亚马逊理解
在本节中,你将构建一个管道,其中你可以将 AWS Lambda 与亚马逊识别和亚马逊理解集成。然后,你将读取存储在 S3 存储桶中的图像文件,并检测从图像中提取的文本的语言。你还将使用 CloudWatch 打印输出。以下是我们用例的图示:

图 8.15 – 所需用例的架构图
让我们首先创建一个 IAM 角色:
-
导航到 IAM 控制台页面。
-
从左侧菜单中选择角色。
-
选择创建角色。
-
选择Lambda作为受信任实体。
-
添加以下管理
策略:-
AmazonS3ReadOnlyAccess -
AmazonRekognitionFullAccess -
ComprehendFullAccess -
CloudWatchFullAccess
-
-
将角色保存为
language-detection-from-image-role。 -
现在,让我们创建 Lambda 函数。导航到
Lambda > 函数 >创建函数。 -
将函数命名为
language-detection-from-image。 -
将运行时设置为
Python 3.6。 -
使用我们现有的角色;即,
language-detection-from-image-role。 -
从
github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Transcribe%20Demo/lambda_function下载代码,将其粘贴到函数中,然后从 Amazon Rekognition 点击detect_textAPI 以从图像中检测文本,并从 Amazon Comprehend 点击batch_detect_dominant_languageAPI 以检测文本的语言。 -
现在,前往你的 AWS S3 控制台,创建一个名为language-detection-image的存储桶。
-
创建一个名为
input-image的文件夹(在这个例子中,你将只上传.jpg文件)。 -
导航到
属性 > 事件 > 添加通知。 -
在
image-upload-event中填写所需的字段。 -
所有对象创建事件 -
input-image/ -
.jpg -
Lambda 函数 -
language-detection-from-image -
导航到
Amazon S3 > language-detection-image > input-image。将文件夹中的sign-image.jpg图像上传。 (此文件可在本书的 GitHub 存储库中找到,地址为github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Comprehend%20Demo/input_image)。 -
此文件上传将触发 Lambda 函数。你可以从
CloudWatch > CloudWatch Logs > 日志组 > /aws/lambda/language-detection-from-image监控日志。 -
点击流并选择最新的一个。检测到的语言将在日志中打印出来,如图图 8.16所示:

图 8.16 – 用于验证输出的 CloudWatch 日志
重要提示
建议你在生产环境中使用批量操作,例如BatchDetectSentiment或BatchDetectDominantLanguage。这是因为单个 API 操作可能会引起 API 级别的限制。更多详情请参阅docs.aws.amazon.com/comprehend/latest/dg/functionality.html。
在本节中,你学习了如何使用 Amazon Comprehend 检测文本的语言。文本通过 Amazon Rekognition 提取到我们的 Lambda 函数中。在下一节中,你将学习如何通过 Amazon Translate 将相同的文本翻译成英文。
使用 Amazon Translate 翻译文档
大多数时候,人们更喜欢用他们自己的语言进行沟通,即使在数字平台上。Amazon Translate 是一种文本翻译服务。您可以在各种语言中提供文档或文本字符串,并得到不同语言的翻译。它使用预训练的深度学习技术,因此您不必担心模型,也不必担心它们的管理。您可以发出 API 请求并获取结果。
Amazon Translate 的一些常见用途包括以下内容:
-
如果有组织范围内的需求需要准备不同语言文档,那么 Translate 是将一种语言转换为多种语言的解决方案。
-
在线聊天应用可以实时翻译,以提供更好的客户体验。
-
更快、更经济地将网站内容本地化到更多语言。
-
一旦翻译成不同语言,就可以对它们应用情感分析。
-
为新闻发布网站提供非英语语言支持。
接下来,您将探索 Amazon Translate 的好处。
探索 Amazon Translate 的好处
使用 Amazon Translate 的一些好处包括以下内容:
-
它使用神经机器翻译,模仿人脑的工作方式。
-
您不需要维护翻译操作的资源或基础设施。
-
产生高质量的结果并保持其一致性。
-
您可以自定义品牌名称和型号名称。其他独特术语也可以通过自定义术语功能进行翻译。
-
可以通过 API 轻松集成到应用程序中。
-
当您需要 Amazon Translate 执行更多任务时,它会自动扩展。
接下来,您将亲身体验 Amazon Translate。
亲身体验 Amazon Translate
在本节中,您将通过将 AWS Lambda 与 Amazon Rekognition、Amazon Comprehend 和 Amazon Translate 集成来构建一个产品,以读取存储在 S3 存储桶中的图像文件。然后,您将检测从图像中提取的文本的语言,以便将其翻译成英语。您还将使用 CloudWatch 打印翻译后的输出。以下是我们用例的示意图:

图 8.17 – 所需用例的架构图
让我们从创建一个 IAM 角色开始:
-
导航到 IAM 控制台页面。
-
从左侧菜单中选择Roles。
-
选择创建角色。
-
选择Lambda作为受信任实体。
-
添加以下管理策略:
-
AmazonS3ReadOnlyAccess -
AmazonRekognitionFullAccess -
ComprehendFullAccess -
CloudWatchFullAccess -
TranslateFullAccess
-
-
将角色保存为
language-translation-from-image。 -
下一个直接步骤是创建一个 Lambda 函数。导航到
Lambda > Functions >Create Function。 -
将函数命名为
language-detection-from-image。 -
设置运行时为
Python 3.6。 -
使用现有的角色;即
language-detection-from-image-role。 -
将可用的代码粘贴到
github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/blob/main/Chapter08/Amazon%20Translate%20Demo/lambda_function/lambda_function.py并点击translate_textAPI 来翻译输入文本。 -
下一步是创建一个名为
language-translation-from-image的存储桶。创建一个名为
image的文件夹。然后,导航到属性 > 事件 > 添加通知。 -
填写此处所示所需字段,然后点击保存(请确保你选择
.jpg作为后缀;否则,它将触发任何对象创建过程的 Lambda 函数):-
所有对象创建事件 -
image/ -
.jpg -
Lambda 函数 -
language-translation-from-image
-
-
导航到
Amazon S3 > language-detection-image > input-image。将sign-image.jpg图像上传到文件夹。此文件可在本书的 GitHub 仓库中找到:github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Translate%20Demo/input_image。 -
上传此图像将触发 Lambda 函数。你可以通过转到
CloudWatch > CloudWatch 日志 > 日志组 > /aws/lambda/language-translation-from-image来监控日志。 -
点击流并选择最新的一个。它看起来如下所示:

图 8.18 – 用于验证输出的 CloudWatch 日志
翻译如下:
Translation of the text from the Image :
{'PREVENCION DEL COVID-19': 'PREVENTION OF COVID-19',
'LAVATE LAS MANOS EVITA EL CONTACTO NO TE TOQUES oJOs,
EVITA': 'WASHE HANDS AVOID CONTACT DO NOT TOUCH EYES',
'60 SEGUNDOS CON CONTAGIADOS NARIZ O BOCA
AGLOMERACIONES': '60 SECONDS WITH CONTAGIOUS NOSE OR
MOUTH AGGLOMERATIONS', 'NO COMPARTAS NO VIAJES A MENOS
SI TE PONES ENFERMO': "DON'T SHARE NOT TRAVEL UNLESS
YOU GET SICK", 'CUBIERTOS NI COMIDA QUE SEA NECESARIO
BUSCA AYUDA MEDICA': 'CUTLERY OR FOOD NEEDED SEEK
MEDICAL HELP'}
重要提示
对于生产用例,如果你有依赖服务或服务链,建议使用 AWS Lambda 与 AWS Step Functions。
不建议使用相同的 S3 桶来存储输入和输出对象。在同一个桶中创建输出对象可能会触发递归 Lambda 调用。如果你使用的是同一个桶,那么建议你使用前缀和后缀来触发事件。同样,建议使用前缀来存储输出对象。
在本节中,你学习了如何组合多个服务并将它们的输出链式连接以实现特定的用例结果。你学习了如何集成 Amazon Rekognition 以检测图像中的文本。然后,你可以使用 Amazon Comprehend 来检测语言。然后,你使用相同的输入并在 Amazon Translate 的帮助下将其翻译成英语。翻译后的输出随后打印在 CloudWatch 日志中进行验证。在下一节中,你将了解 Amazon Textract,它可以用于从文档中提取文本。
使用 Amazon Textract 从文档中提取文本
手动从文档中提取信息既慢又贵,且容易出错。传统的光学字符识别软件需要大量定制,并且仍然会给出错误输出。为了避免此类手动过程和错误,您应该使用Amazon Textract。通常,您将文档转换为图像以检测图像中文本的边界框。然后,您应用字符识别来读取文本。Textract 会为您完成所有这些工作,并为您提取文本、表格、表单和其他数据,而无需付出太多努力。如果您从 Amazon Textract 获得低置信度结果,那么 Amazon A2I 是最佳解决方案。
Textract 减少了从数百万扫描的文档页中提取文本的手动工作量。一旦信息被捕获,就可以对文本采取行动,例如将其存储在不同的数据存储中、分析情感或搜索关键词。以下图示显示了 Amazon Textract 的工作原理:

图 8.19 – Amazon Textract 的框图表示及其输出存储方式
Amazon Textract 的常见用途包括以下内容:
-
记录处理工作流程以提取表格或表单
-
使用 Amazon Elasticsearch 从文档中创建搜索索引
-
在工作流程中删除个人身份信息;Textract 自动识别数据类型和表单标签
接下来,您将探索 Amazon Textract 的优势。
探索 Amazon Textract 的优势
使用 Textract 的几个原因:
-
零基础设施成本
-
完全托管服务(减少开发和管理工作量)
-
帮助您提取结构化和非结构化数据
-
可以分析手写评论
-
Amazon Textract 的性能优于使用扁平词袋的 OCR 应用程序
-
接下来,您将通过实践掌握 Amazon Textract。
通过实践掌握 Amazon Textract
在本节中,您将使用 Amazon Textract API 从我们的 S3 存储桶中读取图像文件,并在 Cloudwatch 上打印表单详情。这些信息可以以您希望的格式存储在 S3 中以供进一步使用,也可以作为键值对存储在 DynamoDB 中。让我们开始吧:
-
首先,创建一个名为
textract-use-case-role的 IAM 角色,并应用以下策略。这将允许 Lambda 函数执行,以便它可以读取 S3、使用 Amazon Textract 并在 CloudWatch 日志中打印输出:-
CloudWatchFullAccess -
AmazonTextractFullAccess -
AmazonS3ReadOnlyAccess
-
-
让我们创建一个名为
textract-document-analysis的 S3 存储桶,并上传receipt.png图像文件。这将用于包含将要提取的表单详情。图像文件可在github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter08/Amazon%20Textract%20Demo/input_doc找到:

图 8.20 – 一个包含上传到输入文件夹的图像文件(.png)的 S3 存储桶
- 下一步是创建一个名为
read-scanned-doc的 Lambda 函数,如图 8.21 所示,使用现有的执行角色textract-use-case-role:

图 8.21 – AWS Lambda 创建函数对话框
-
函数创建完成后,粘贴以下代码并部署。滚动到 Amazon Textract 的
analyze_documentAPI,通过 API 的FeatureTypes参数获取Table and Form详细信息:import boto3import timefrom trp import Documenttextract_client=boto3.client('textract')def lambda_handler(event, context):print("- - - Amazon Textract Demo - - -")# read the bucket name from the eventname_of_the_bucket=event['Records'][0]['s3']['bucket'] ['name']# read the object from the eventname_of_the_doc=event['Records'][0]['s3']['object']['key']print(name_of_the_bucket)print(name_of_the_doc)response =textract_client.analyze_document(Document={'S3Object':{'Bucket': name_of_the_bucket,'Name':name_of_the_doc}},FeatureTypes=["TABLES","FORMS"])print(str(response))doc=Document(response)for page in doc.pages:# Print tablesfor table in page.tables:for r, row in enumerate(table.rows):for c, cell in enumerate(row.cells):print("Table[{}][{}] ={}".format(r, c, cell.text))for page in doc.pages:# Print fieldsprint("Fields:")for field in page.form.fields:print("Key: {}, Value:{}".format(field.key, field.value))与前面的示例不同,您将创建一个测试配置来运行我们的代码。
-
点击测试按钮左边的下拉菜单。
-
选择配置测试事件并选择创建新****测试事件。
-
从事件****模板下拉菜单中选择Amazon S3 Put。
-
在 JSON 体中,根据我们的存储桶名称和键更改高亮显示的值,如图所示:

图 8.22 – 测试 Lambda 函数的事件模板
-
在
TextractDemo中。 -
点击保存。
-
选择您的测试配置(
TextractDemo)并点击测试:

图 8.23 – 在运行测试前选择测试配置
-
这将触发 Lambda 函数。您可以通过
CloudWatch > CloudWatch Logs > Log groups > /aws/lambda/read-scanned-doc监控日志。 -
点击流并选择最新的一个。它看起来如下;键值对可在图 8.24 中看到:

图 8.24 – 验证输出的 CloudWatch 日志
重要提示
通过 Lambda 异步调用下游 AI 工作流的最可扩展和最具成本效益的方式是生成 AWS 预签名 URL,并将其提供给您的移动或 Web 应用程序用户。这种方法可以同时为许多用户提供服务,并可能提高性能和吞吐量。
考虑为你的 AWS AI 服务和 S3 存储桶使用相同的区域可能会提高性能并减少网络延迟。AWS VPC 端点可以在不使用公共互联网的情况下利用增强的安全性。你可以将 AWS AI 结果存储在 AWS S3 存储桶中,并对其他数据进行加密以获得更好的安全性。
在本节中,你学习了如何从扫描的文档中提取文本并打印出表单数据。与其他章节不同,你通过创建包含事件模板的测试配置来使用 Lambda 函数的测试功能。在下一节中,你将了解如何为组织创建聊天机器人以及如何使用它。
在 Amazon Lex 上创建聊天机器人
Alexa 中大多数可用的功能都是由Amazon Lex驱动的。你可以轻松地使用 Amazon Lex 构建聊天机器人。它在幕后使用自然语言理解和自动语音识别。Amazon Lex 机器人可以从控制台或通过 API 创建。其基本要求将在下面的图表中展示。
Amazon Lex 的一些常见用途包括以下内容:
-
既能听又能接收文本输入的应用
-
聊天机器人
-
提供更好的客户和销售体验的对话式 AI 产品
-
通过 AWS Lambda 函数提供帮助的定制业务机器人
-
为呼叫中心提供的语音助手,可以与用户交谈、安排会议或请求账户详情
-
通过与 Amazon Cognito 集成,可以控制一些方面,如用户管理、身份验证和跨所有设备的同步
接下来,你将探索 Amazon Lex 的优势。
探索 Amazon Lex 的优势
使用 Lex 的一些原因包括以下内容:
-
聊天机器人可以直接从 AWS 管理控制台构建和测试。这些聊天机器人可以通过其丰富的格式化功能轻松集成到 Facebook Messenger、Slack 和 Twilio SMS。
-
可以将对话日志存储在 Amazon CloudWatch 中进行进一步分析。你可以使用它们来监控你的机器人并从中获得见解,以改善用户体验。
-
Amazon Lex 可以集成到其他 AWS 服务中,例如 Amazon Cognito、AWS Lambda、Amazon DynamoDB、Amazon CloudWatch 和 AWS Mobile Hub,以利用 AWS 平台上的应用安全、监控、用户身份验证、业务逻辑、存储和移动应用开发。
-
Amazon Lex 聊天机器人也可以集成到你的自定义 Web 应用程序中。你只需构建一个聊天机器人小部件并将其集成到你的用户界面中。
接下来,你将亲自动手操作 Amazon Lex。
通过 Amazon Lex 进行实践操作
让我们开始吧:
-
点击开始并选择自定义机器人。
-
填写以下详细信息并点击创建:

图 8.25 – Amazon Lex 的创建对话框
-
点击创建意图。将出现一个对话框。选择创建意图。
-
将新的意图命名为
MovieIntent并点击 添加。 -
转到
movie_type -
插槽类型:
AMAZON.Genre -
提示:
你喜欢哪部电影? -
点击
movie_type是我的变量:

图 8.26 – 样例语句部分
- 滚动到 响应 部分以添加消息:

图 8.27 – Amazon Lex 的响应部分
- 滚动到 保存意图 并点击 构建。在成功构建提示后,将显示以下成功消息:

图 8.28 – Amazon Lex 的响应部分
- 现在,你可以测试你的机器人,如图 图 8**.29 所示:

图 8.29 – 测试机器人对话
在下一节中,你将了解 Amazon Forecast 并学习如何将其用于不同的用例。
Amazon Forecast
Amazon Forecast 是一项强大的服务,它使你能够在不需要深度机器学习专业知识的情况下构建高度准确的时间序列预测模型。无论你是预测销售、库存需求还是任何时间相关的指标,Amazon Forecast 都简化了这一过程,使其对更广泛的受众变得可访问。
Amazon Forecast 设计用于解决各种预测挑战,包括:
-
需求预测:根据历史数据预测产品或服务的未来需求,帮助优化库存和供应链管理。
-
财务规划:预测财务指标,如收入和支出,有助于预算和财务决策。
-
资源规划:根据预测的需求模式有效地规划资源,如员工排班。
-
流量和用户参与度:预测网站或应用程序的流量,增强资源分配和用户体验。
接下来,你将探索 Amazon Lex 的好处。
探索 Amazon Forecast 的好处
使用 Amazon Forecast 的原因如下:
-
易用性:Amazon Forecast 抽象了构建准确预测模型的复杂性。只需几点击,你就可以创建、训练和部署模型,无需深度机器学习专业知识。
-
自动机器学习:Amazon Forecast 采用先进的机器学习技术,自动选择算法和超参数调整,以提供最佳模型。
-
预测回测:通过回测增强预测的可靠性。Amazon Forecast 允许你通过将预测与历史数据比较来评估你模型的准确性。这一迭代过程有助于微调你的模型,调整超参数和算法以实现最佳的预测性能。
-
可扩展性:Amazon Forecast 与你的数据无缝扩展,确保即使在大数据集上也能进行准确的预测。
-
与 AWS 集成:利用与其他 AWS 服务(如 Amazon S3、AWS Lambda 和 Amazon CloudWatch)集成的力量,创建端到端的预测解决方案。轻松将 Amazon Forecast 集成到现有的应用程序和工作流程中,确保预测体验的无缝性。
-
准确性和精确度:Amazon Forecast 利用先进的预测算法提供准确和精确的预测,最小化预测中的错误。
-
经济高效:仅为您使用的部分付费。按需付费的定价模式确保了成本效益,特别是对于有不同预测需求的企业。
-
定制化:根据您的特定业务需求定制预测模型,适应各种预测场景。
接下来,你将亲自动手使用 Amazon Lex。
使用 Amazon Forecast 的销售预测模型
让我们通过一个使用 Amazon Forecast 构建销售预测模型的实际例子来深入了解。在这个例子中,你将根据历史数据预测未来的销售。
设置您的数据集:准备一个包含历史销售数据的数据集,确保它包括相关的日期和时间戳以及相应的销售数字。
创建数据集组:使用 Amazon Forecast 控制台或 API 创建数据集组,将相关的数据集分组用于预测。
导入您的数据:将您的历史销售数据集上传到 Amazon Forecast,让服务从提供的数据中学习模式。
训练您的模型:使用 Forecast 控制台或 API 启动模型训练。Amazon Forecast 将自动选择合适的算法并优化超参数。
生成预测:一旦模型训练完成,根据您历史数据中识别出的模式生成未来的销售预测。
通过利用高级功能和实施优化策略,您可以提升您的 Amazon Forecast 体验。服务的灵活性和适应性允许您根据您业务的特定需求定制预测解决方案。例如,您可以通过集成外部变量来提高预测的精确度。Amazon Forecast 允许您包括可能影响您预测的时间序列的其他信息,例如促销活动、节假日或经济指标。通过考虑这些外部因素,您的模型可以适应不断变化的情况并提供更细微的预测。
摘要
在本章中,你了解了一些 AWS 人工智能服务,这些服务可以用来解决各种问题。你使用了 Amazon Rekognition 服务,它可以检测对象和面部(包括名人面部),还可以从图像中提取文本。对于文本到语音,你使用了 Amazon Polly,而对于语音到文本,你使用了 Amazon Transcribe。在本章的末尾,你在 Amazon Lex 中构建了一个聊天机器人,并学习了 Amazon Forecast 的使用方法和好处。
对于图像中的语言检测和翻译,您使用了 Amazon Rekognition、Amazon Comprehend 和 Amazon Translate。您学习了如何将它们组合成一个 Lambda 函数来解决我们的问题。
对于认证考试,您不需要记住本章中使用的所有 API。可能会有关于您学到的最佳实践或解决特定问题的服务名称的问题。始终练习使用这些 AWS AI 服务是很好的,因为它将增强您的架构技能。
在下一章中,您将学习数据准备和转换,这是机器学习最重要的方面。
考试准备练习 – 复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项有助于您通过认证考试的技能。这就是为什么在您的学习旅程早期就培养这些技能是关键。
复习题旨在通过学习并复习每个章节来逐步提高您的考试技巧,同时同时检查您对章节中关键概念的理解。您将在每个章节的末尾找到这些内容。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线练习资源。
要打开本章的复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH08.或者,您可以扫描以下二维码(图 8.30):

图 8.30 – 为登录用户打开第八章复习题的二维码
- 一旦登录,您将看到一个类似于图 8.31所示的页面:

图 8.31 – 第八章的复习题
- 准备就绪后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不要担心时间限制。
第一次尝试
第一次尝试,目标至少达到40%。查看您答错的答案,并再次阅读章节中的相关部分,以修复您的学习差距。
第二次尝试
第二次尝试,目标至少达到60%。查看您答错的答案,并再次阅读章节中的相关部分,以修复任何剩余的学习差距。
第三次尝试
第三次尝试,目标至少达到75%。一旦得分达到 75%或更高,您就开始关注您的计时。
小贴士
您可能需要超过三次尝试才能达到 75%。没关系。只需复习章节中的相关部分,直到达到目标。
工作在计时上
目标:您的目标是保持分数不变,同时尽可能快地回答这些问题。以下是如何进行下一次尝试的示例:
| 尝试 | 分数 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分 30 秒 |
| 尝试 6 | 78% | 18 分 34 秒 |
| 尝试 7 | 76% | 14 分 44 秒 |
表 8.1 – 在线平台上的样本时间练习练习
备注
上表中显示的时间限制只是示例。根据网站上的测验时间限制,每次尝试时为自己设定时间限制。
每次新的尝试,你的分数应保持在 75% 以上,而完成所需的时间“应减少”。重复尝试,直到你觉得自己能够自信地应对时间压力。
第九章:Amazon SageMaker 模型构建
在上一章中,你学习了多种模型优化和评估技术。你还学习了各种存储数据、处理数据以及将不同的统计方法应用于数据的方法。那么,你现在如何构建这个管道呢?好吧,你可以在处理后的数据上读取数据、处理数据并构建 机器学习 (ML) 模型。但是,如果我的第一个 ML 模型表现不佳怎么办?我能微调我的模型吗?答案是 是的;你可以使用 Amazon SageMaker 做几乎任何事情。在本章中,你将使用 Amazon SageMaker 逐步了解以下主题:
-
理解 Amazon SageMaker 的不同实例
-
在 Amazon SageMaker 的 Jupyter Notebook 中清理和准备数据
-
在 Amazon SageMaker 中进行模型训练
-
使用 SageMaker 内置的 ML 算法
-
在 SageMaker 中编写自定义训练和推理代码
技术要求
你可以从 GitHub 下载本章示例中使用的数据,链接为 github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition/tree/main/Chapter09。
在 Amazon SageMaker 中创建笔记本
如果你正在使用机器学习,那么你需要执行诸如存储数据、处理数据、为模型训练准备数据、模型训练以及将模型部署用于推理等操作。这些操作很复杂,每个阶段都需要一台机器来执行任务。使用 Amazon SageMaker,执行这些任务时生活变得更加简单。
什么是 Amazon SageMaker?
SageMaker 提供训练实例,用于使用数据训练模型,并提供端点实例,用于使用模型进行推理。它还提供在 Jupyter Notebook 上运行的笔记本实例,用于清理和理解数据。如果你对你的清理过程满意,那么你应该将清理后的数据存储在 S3 中,作为训练准备的一部分。你可以启动训练实例来消耗这些训练数据并生成一个机器学习模型。该机器学习模型可以存储在 S3 中,端点实例可以消耗该模型为最终用户提供结果。
如果你用框图来表示,它将看起来类似于 图 9**.1:

图 9.1 – Amazon SageMaker 实例不同层的示意图
现在,你将查看 Amazon SageMaker 控制台,并更好地了解它。一旦你登录到你的 AWS 账户并进入 Amazon SageMaker,你将看到类似于 图 9**.2 的内容:

图 9.2 – 快速浏览 SageMaker 控制台
菜单左侧有三个不同的部分,分别标记为笔记本、训练和推理,在图 9**.2中已展开,以便您可以深入了解它们。
笔记本有三个不同的选项可供使用:
-
笔记本实例:这有助于您创建、打开、启动和停止笔记本实例。这些实例负责运行 Jupyter 笔记本。它们允许您根据用例的工作负载选择实例类型。最佳实践是使用笔记本实例来编排处理大型数据集的数据管道。例如,从笔记本实例调用 AWS Glue 进行 ETL 服务或 Amazon EMR 运行 Spark 应用程序。如果您被要求在 AWS 外部创建安全的笔记本实例,那么您需要关注端点安全、网络安全、启动机器、管理实例上的存储以及管理实例上运行的 Jupyter Notebook 应用程序。用户不需要使用 SageMaker 管理任何这些内容。
-
pip install或conda install。然而,一旦笔记本实例终止,自定义设置将会丢失。为了避免这种情况,您可以通过通过/home/ec2-user/anaconda3/envs/提供的脚本来自定义笔记本实例,并根据需要自定义特定环境。 -
Git 仓库:AWS CodeCommit、GitHub 或任何其他 Git 服务器都可以与笔记本实例关联,以持久化您的笔记本。如果提供访问权限,则其他开发者可以使用相同的笔记本进行协作,并以源代码控制的方式保存代码。Git 仓库可以通过此选项单独添加,或者可以在创建笔记本实例时关联。
如您在图 9**.2中看到的那样,训练提供了算法、训练作业和超参数调整作业。让我们了解它们的用法:
-
算法:这是决定在清洗后的数据上运行算法的第一步。您可以选择自定义算法或根据用例创建自定义算法。否则,您可以在清洗后的数据上运行 SageMaker 算法。
-
训练作业:您可以通过 API 调用从笔记本实例创建训练作业。您可以设置实例数量,输入数据源详细信息,执行检查点配置,以及输出数据配置。Amazon SageMaker 管理训练实例,并将模型工件作为输出存储在指定的位置。同时,也可以实现增量训练(即定期训练模型以获得更好的结果)和管理预留实例训练(即降低成本)。
-
超参数调整作业:通常,在训练过程之前,算法的超参数被设置好。在训练过程中,你让算法找出这些参数的最佳值。通过超参数调整,你可以获得具有最佳超参数值的最佳模型。这可以通过控制台或通过 API 调用来完成。同样,也可以从笔记本实例中执行。
推理有许多提供的服务,并且每天都在发展:
-
编译作业:如果你的模型使用 Keras、MXNet、ONNX、PyTorch、TFLite、TensorFlow 或 XGBoost 等机器学习框架进行训练,并且你的模型工件存储在 S3 存储桶中,那么你可以选择目标设备或目标平台。目标设备选项用于指定你将部署模型的位置,例如 AWS SageMaker ML 实例或 AWS IoT Greengrass 设备。目标平台选项用于决定你希望模型运行的操作系统、架构和加速器。你还可以将编译模块存储在你的 S3 存储桶中,以供将来使用。这实际上有助于你在跨平台模型部署中。
-
模型包:这些用于创建可部署的 SageMaker 模型。你可以创建自己的算法,使用模型包 API 打包它,并将其发布到 AWS Marketplace。
-
模型:模型是通过模型工件创建的。它们类似于带有变量的数学方程式;也就是说,你输入变量的值,得到一个输出。这些模型存储在 S3 中,并将由端点用于推理。
-
使用
VariantWeightAPI 使端点能够以 80% 的请求使用旧模型,以 20% 的请求使用新模型。这是数据变化迅速且模型需要定期训练和调整的最常见生产场景。另一个可能的用例是使用实时数据测试模型结果,然后可以将一定比例的请求路由到新模型,并监控结果以确定模型在实时未见数据上的准确性。 -
端点:这些用于创建一个模型暴露的 URL,可以请求模型返回结果。
-
InputFilter、JoinSource和OutputFilterAPI 可以用来关联输入记录与输出结果。
你已经对亚马逊 SageMaker 有了一个概述。现在,在下一节中,将你的知识付诸实践。
重要提示
亚马逊 SageMaker 控制台不断变化。在你阅读这本书的时候,控制台可能看起来会有所不同。
训练数据位置和格式
当你开始设置 AWS SageMaker 训练作业的旅程时,了解多样的数据存储和读取选项至关重要。为了确保无缝的训练体验,深入了解支持选项及其好处。
首先你将查看支持的数据****存储选项:
-
Amazon Simple Storage Service (Amazon S3):
-
概述:Amazon SageMaker 为存储训练数据集提供强大的支持,在 Amazon S3 上,提供可靠性和可伸缩性。
-
使用示例:您可以使用 Amazon S3 前缀、清单文件或增强清单文件配置您的数据集。
-
-
Amazon Elastic File System (Amazon EFS):
-
概述:SageMaker 将其支持扩展到 Amazon EFS,便于访问数据集的文件系统。
-
使用示例:存储在 Amazon EFS 中的数据必须在启动训练作业之前存在。
-
-
Amazon FSx for Lustre:
-
概述:通过将 FSx for Lustre 文件系统挂载到训练实例上,实现高吞吐量和低延迟的文件检索。
-
使用示例:FSx for Lustre 可以无缝扩展,为您的训练数据提供高性能选项。
-
这里是 数据访问的 输入模式:
-
文件模式:
-
概述:默认输入模式,在训练开始前 SageMaker 将整个数据集下载到 Docker 容器中。
-
使用示例:与 SageMaker 本地模式兼容,并支持分布式训练的分区。
-
-
快速文件模式:
-
概述:结合文件系统访问和管道模式的效率,快速文件模式在开始时识别数据文件,但延迟下载直到必要。
-
使用示例:简化训练启动时间,尤其是在处理大数据集时特别有益。
-
-
管道模式:
-
概述:直接从 Amazon S3 数据源流式传输数据,提供更快的启动时间和更好的吞吐量。
-
使用示例:历史上使用过,但大部分已被更易于使用的快速文件模式所取代。
-
最后,看看 专门的 存储类别:
-
Amazon S3 Express One Zone:
-
概述:高性能的单可用区存储类别,优化计算性能和成本。
-
使用示例:支持文件模式、快速文件模式和管道模式用于 SageMaker 模型训练。
-
-
Amazon EFS 和 Amazon FSx for Lustre:
-
概述:SageMaker 支持 Amazon EFS 和 Amazon FSx for Lustre,为选择合适的训练数据存储解决方案提供灵活性。
-
使用示例:将文件系统挂载到训练实例上,确保在训练期间无缝访问。
-
理解 AWS SageMaker 训练作业的数据存储和读取选项的细微差别,使您能够根据特定要求调整您的设置。在接下来的章节中,您将探索 AWS SageMaker 的更多方面,以加深对机器学习工作流程的理解和熟练度。让我们在下一节中将我们的知识付诸实践。
通过 Amazon SageMaker 笔记本实例进行实践操作
在本节中的第一步是创建一个 Jupyter Notebook,这需要一个笔记本实例。你可以通过以下方式创建笔记本实例:
-
登录您的 AWS 账户。
-
导航到
服务 >Amazon SageMaker。 -
在左侧导航面板中,点击 笔记本实例,然后点击 创建笔记本实例 按钮。
-
提供一个
notebookinstance并保留ml.t2.medium设置。在 IAM 角色 的 创建新角色 中。您将被要求指定存储桶名称。为了本例的目的,它被选为任何存储桶。 -
在成功创建角色后,您应该会看到类似于 图 9.3 的内容:

图 9.3 – Amazon SageMaker 角色创建
-
将其他所有设置保留为默认值,然后点击 创建笔记本实例 按钮。
-
一旦实例处于
InService状态,选择实例。点击 操作 下拉菜单并选择 打开 Jupyter。这将打开您的 Jupyter Notebook。 -
现在,您已经准备好在新建的实例上运行我们的 Jupyter Notebook。您将执行 探索性数据分析 (EDA) 并绘制不同类型的图表以可视化数据。一旦您熟悉了 Jupyter Notebook,您将构建一些模型来预测波士顿的房价。您将应用之前章节中学到的算法,并将它们进行比较以找到最佳模型,该模型根据我们的数据提供最佳预测。让我们开始吧。
-
在 Jupyter Notebook 中,点击 新建 并选择 终端。在命令提示符中运行以下命令以将代码下载到实例:
sh-4.2$ cd ~/SageMaker/sh-4.2$ git clone https://github.com/PacktPublishing/AWS-Certified-Machine-Learning-Specialty-MLS-C01-Certification-Guide-Second-Edition.git -
一旦 Git 仓库被克隆到 SageMaker 笔记本实例,请在命令提示符中输入
exit以退出。现在,您的代码已准备好执行。 -
导航到 Jupyter Notebook 的文件部分中的
Chapter-9,如图 图 9.4 所示:

图 9.4 – Jupyter Notebook
- 点击
1.Boston-House-Price-SageMaker-Notebook-Instance-Example.ipynb中的第一个笔记本。它将提示您选择笔记本的内核。请选择conda_python3,如图 图 9.5 所示:

图 9.5 – Jupyter Notebook 内核选择
-
从笔记本中导航到
内核 > 重新启动并清除输出。点击播放图标依次运行单元格。请确保您已运行每个单独的单元格并检查每个执行/运行的输出。 -
您可以通过添加单元格和删除单元格来实验,以熟悉 Jupyter Notebook 操作。在一篇段落中,有一个 bash 命令允许您从笔记本中安装
xgboost库。 -
最后一个单元格解释了您如何比较不同建模技术的不同分数,以数学方式得出结论。图 9.6 清楚地显示了预测波士顿房价的最佳模型是 XGBoost:

图 9.6 – 模型比较
- 一旦您完成此笔记本的执行,请随时关闭内核并从 SageMaker 控制台停止您的笔记本实例。这是一种减少成本的最佳实践。
在下一个实践操作部分,您将熟悉 Amazon SageMaker 的训练和推理实例。您还将使用 Amazon SageMaker API 使此过程更简单。您将使用与之前示例中相同的笔记本实例。
通过 Amazon SageMaker 的训练和推理实例进行实践操作
在本节中,您将了解如何训练模型并将模型托管以生成其预测结果。让我们通过使用之前示例中的笔记本实例来深入了解:
-
在
console.aws.amazon.com/sagemaker/home?region=us-east-1#/notebook-instances登录您的 AWS 账户。 -
点击
notebookinstance。一旦状态移动到InService,在新标签页中打开它,如图 9.7 所示:

图 9.7 – InService 实例
-
从 Jupyter Notebook 主页导航到名为SageMaker Examples的标签页。
-
选择
k_nearest_neighbors_covtype.ipynb笔记本。点击使用并创建一个副本。 -
当您运行以下代码块,如图 9.8 所示时,您还可以在 SageMaker 主页的
训练 > 训练作业中检查训练作业:

图 9.8 – SageMaker fit API 调用
- 训练作业看起来与图 9.9相似。它在后端启动一个 ECS 容器,并使用之前示例中创建的 IAM 执行角色来运行此请求的训练作业:

图 9.9 – 训练作业
-
如果您进入并检查 CloudWatch 中的日志,它会为您提供有关容器及其执行步骤的更多详细信息。作为一名机器学习工程师,检查您算法的 CloudWatch 指标是值得的。
-
现在,如果您在笔记本中运行以下段落,如图 9.10 所示,那么它将创建一个端点配置和一个部署了之前训练作业中的模型的端点。
-
我已将实例类型更改为降低成本。这是将托管您的模型的服务器或机器。请明智地选择您的实例。您将在下一节中了解如何选择实例类型。我还已更改
endpoint_name,以便它可以轻松识别:

图 9.10 – 使用端点详细信息创建预测对象
-
导航到
推理 > 端点。这将显示由上一段执行结果创建的端点。此端点有一个配置,可以通过推理 > 端点配置进行导航和跟踪。 -
如果您在笔记本中查看推理部分,您会注意到它使用测试数据来预测结果。它使用 SageMaker API 的预测器对象进行预测。预测器对象包含端点详情、模型名称和实例类型。
-
对端点的 API 调用发生在推理部分,并通过创建笔记本实例时使用的 IAM 角色进行身份验证。相同的 API 调用可以通过 CloudWatch 调用指标进行追踪。
-
最后,在笔记本中运行
delete_endpoint方法将删除端点。要删除端点配置,请转到Inference > Endpoint Configurations并选择屏幕上的配置。点击Actions > Delete >Delete。 -
现在,请随意关闭内核并从 SageMaker 控制台停止您的笔记本实例。这是一种减少成本的最佳实践。
在本节中,您学习了如何使用笔记本实例、训练实例、推理端点和端点配置来清理我们的数据,训练模型,并从中生成预测结果。在下一节中,您将学习关于模型调优的内容。
模型调优
在第七章“评估和优化模型”中,您学习了关于模型调优的许多重要概念。现在,让我们从实际的角度来探讨这个话题。
为了在 SageMaker 上调整模型,您必须调用create_hyper_parameter_tuning_job并传递以下主要参数:
-
HyperParameterTuningJobName:这是调优作业的名称。跟踪代表您的调优作业启动的训练作业非常有用。 -
HyperParameterTuningJobConfig:在这里,您可以配置您的调优选项。例如,您想调整哪些参数,它们的值范围,优化的类型(例如随机搜索或贝叶斯搜索),您想要启动的最大训练作业数量,等等。 -
TrainingJobDefinition:在这里,您可以配置您的训练作业。例如,数据通道、输出位置、资源配置、评估指标和停止条件。
在 SageMaker 中,您想要用来评估模型并选择最佳模型的主要指标被称为目标指标。
在以下示例中,您正在为基于决策树的算法配置HyperParameterTuningJobConfig。您想检查max_depth超参数的最佳配置,该参数负责控制树的深度。
在IntegerParameterRanges中,您必须指定以下内容:
-
超参数名称
-
您想要测试的最小值
-
您想要测试的最大值
重要提示
每种超参数必须适合参数范围部分中的一个,例如分类、连续或整数参数。
在ResourceLimits中,您指定了训练作业的数量以及您想要运行的并行作业数量。请记住,调优过程的目标是执行许多具有不同超参数设置的训练作业,以便从中选择最佳的一个用于最终模型。这就是为什么您必须指定这些训练作业执行规则的原因。
然后,您在Strategy中设置我们的搜索策略,最后在HyperParameterTuningJobObjective中设置目标函数:
tuning_job_config = {
"ParameterRanges": {
"CategoricalParameterRanges": [],
"ContinuousParameterRanges": [],
"IntegerParameterRanges": [
{
"MaxValue": "10",
"MinValue": "1",
"Name": "max_depth"
}
]
},
"ResourceLimits": {
"MaxNumberOfTrainingJobs": 10,
"MaxParallelTrainingJobs": 2
},
"Strategy": "Bayesian",
"HyperParameterTuningJobObjective": {
"MetricName": "validation:auc",
"Type": "Maximize"
}
}
您需要设置的第二个重要配置是TrainingJobDefinition。在这里,您必须指定将要执行的所有训练作业的详细信息。其中最重要的设置之一是TrainingImage设置,它指的是将启动以执行训练过程的容器。这个容器,正如预期的那样,必须实现您的训练算法。
在这里,您提供了一个内置算法的示例,即 eXtreme Gradient Boosting,以便您可以按以下方式设置训练镜像:
training_image = sagemaker.image_uris.retrieve('xgboost', region, '1.0-1')
然后,您可以继续设置您的训练定义:
training_job_definition = {
"AlgorithmSpecification": {
"TrainingImage": training_image,
"TrainingInputMode": "File"
},
接下来,您必须指定数据输入配置,这通常被称为数据通道。在下面的代码部分,您正在设置两个数据通道——训练和验证:
"InputDataConfig": [
{
"ChannelName": "train",
"CompressionType": "None",
"ContentType": "csv",
"DataSource": {
"S3DataSource": {
"S3DataDistributionType": "FullyReplicated",
"S3DataType": "S3Prefix",
"S3Uri": s3_input_train
}
}
},
{
"ChannelName": "validation",
"CompressionType": "None",
"ContentType": "csv",
"DataSource": {
"S3DataSource": {
"S3DataDistributionType": "FullyReplicated",
"S3DataType": "S3Prefix",
"S3Uri": s3_input_validation
}
}
}
],
您还需要指定结果将存储的位置:
"OutputDataConfig": {
"S3OutputPath": "s3://{}/{}/output".format(bucket,prefix)
},
最后,您设置资源配置、角色、静态参数和停止条件。在下面的代码部分,您想要使用两个类型为ml.c4.2xlarge的实例,每个实例具有 10 GB 的存储空间:
"ResourceConfig": {
"InstanceCount": 2,
"InstanceType": "ml.c4.2xlarge",
"VolumeSizeInGB": 10
},
"RoleArn": <<your_role_name>>,
"StaticHyperParameters": {
"eval_metric": "auc",
"num_round": "100",
"objective": "binary:logistic",
"rate_drop": "0.3",
"tweedie_variance_power": "1.4"
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 43200
}
}
重要提示
请注意,您在这个配置文件中使用了其他变量,bucket和prefix,分别应该替换为您的存储桶名称和前缀键(如果需要),您还引用了s3_input_train和s3_input_validation,这两个变量指向 S3 中的训练和验证数据集。
一旦您设置了配置,您就可以启动调优过程:
smclient.create_hyper_parameter_tuning_job(
HyperParameterTuningJobName = "my-tuning-example",
HyperParameterTuningJobConfig = tuning_job_config,
TrainingJobDefinition = training_job_definition
)
接下来,让我们了解一下如何跟踪此过程的执行。
跟踪训练作业和选择最佳模型
一旦您开始调优过程,您可能还想检查两个额外的步骤:跟踪调优过程和选择获胜模型(即具有最佳超参数集的那个)。
为了找到您的训练作业,您应该前往 SageMaker 控制台并导航到超参数训练作业。然后,您将找到包括您自己的执行调优作业列表:

图 9.11 – 查找您的调优作业
如果您通过点击其名称下方的链接访问您的调优作业,您将找到一个包含有关调优过程最相关信息概要的页面。在训练作业标签页上,您将看到所有已执行的训练作业:

图 9.12 – 调优过程中的训练作业摘要
最后,如果你点击 最佳训练作业 选项卡,你将找到适合你模型的最佳超参数集,包括一个方便的按钮,用于根据刚刚找到的最佳超参数创建新模型:

图 9.13 – 寻找最佳的超参数集
如你所见,SageMaker 非常直观,一旦你了解了模型优化的主要概念,使用 SageMaker 应该会更容易。现在,你理解了如何根据我们的特定需求使用 SageMaker。在下一节中,你将探索如何为各种用例选择实例类型以及笔记本的安全性。
在 Amazon SageMaker 中选择实例类型
SageMaker 使用按使用付费的模式。对此没有最低费用。
当你考虑 SageMaker 上的实例时,一切始于一个 EC2 实例。这个实例负责你所有的处理。这是一个托管 EC2 实例。这些实例不会出现在 EC2 控制台中,也无法通过 SSH 访问。这个实例类型的名称以 ml 开头。
SageMaker 提供以下家族的实例:
-
t 系列家族:这是一个可突发 CPU 家族。使用这个家族,你得到 CPU 和内存的平衡比率。这意味着如果你有一个长时间运行的训练作业,那么随着时间的推移,你会因为消耗 CPU 信用额度而失去性能。如果你有非常小的作业,那么它们是成本效益的。例如,如果你想启动一个笔记本实例来运行训练作业,那么这个家族是最合适且成本效益最高的。
-
m 系列家族:在前一个家族中,你看到由于它们的可突发性,CPU 信用额度消耗得更快。如果你有一个需要恒定吞吐量的长时间运行的 ML 任务,那么这个系列就是正确的选择。它具有与 t 系列家族相似的 CPU 和内存比率。
-
r 系列家族:这是一个内存优化的家族。你何时需要这个? 好吧,想象一个用例,你需要在内存中加载数据并对数据进行数据工程。在这种情况下,你需要更多的内存,并且你的工作将是内存优化的。
-
c 系列家族:c 系列实例是计算优化的。这是需要更高计算能力和较少内存来存储数据的工作的要求。例如,如果你参考以下表格,c5.2x large 有 8 个 vCPU 和 16 GiB 内存,这使得它具有较少内存的计算优化。例如,如果一个用例需要在较少的记录上进行测试,并且它很擅长计算,那么这个实例家族是获取一些来自巨大 DataFrame 的样本记录并测试你的算法的最佳选择。
-
p 家族:这是一个支持加速计算作业(如训练和推理)的 GPU 家族。值得注意的是,p-家族实例非常适合处理大型、分布式训练作业,这减少了训练所需的时间,因此成本效益更高。p3/p3dn GPU 计算实例每秒可以达到高达 1 petaFLOP 的计算能力,配备高达 256 GB 的 GPU 内存和 100 Gbps(千兆位)的联网速度,使用 8x NVIDIA v100 GPU。它们高度优化用于训练,并且不用于推理。
-
g 家族:对于成本效益高、规模小的训练作业,g-家族 GPU 实例是理想的。G4 对于 GPU 实例的推理成本最低。它使用 T4 NVIDIA GPU。G4 GPU 计算实例可以达到 520 TeraFLOPs 的计算时间,配备 8x NVIDIA T4 GPU。这个实例家族最适合简单的网络。
在以下表格中,您可以看到每个家族的 2x 大型实例类型的 CPU 和内存比率的视觉比较:
| t3.2x 大型 | m5.2x 大型 | r5.2x 大型 | c5.2x 大型 | p3.2x 大型 | g4dn.2x 大型 |
|---|---|---|---|---|---|
| 8 个 vCPU,32 GiB | 8 个 vCPU,32 GiB | 8 个 vCPU,64 GiB | 8 个 vCPU,16 GiB | 8 个 vCPU,61 GiB | 8 个 vCPU,32 GiB |
表 9.1 – 显示不同实例类型 CPU 和内存比率的表格
重要提示
为了容易记住,您可以想象 t 代表微型,m 代表中型,c 代表计算,p 和 g 代表 GPU。与 CPU 相关的家族实例类型是 t、m、r 和 c。与 GPU 相关的家族实例类型是 p 和 g。
选择训练作业的正确实例类型
没有确定所需实例类型的经验法则。它根据数据的大小、网络的复杂性、所涉及的 ML 算法以及时间、成本等其他因素而变化。提出正确的问题将使您节省金钱并使您的项目具有成本效益。
如果决定因素是实例大小,那么将问题分类为 CPU 或 GPU 问题就是正确的步骤。一旦这样做,那么考虑它是否可以是多 GPU 或多 CPU,回答关于分布式训练的问题,就很好了。这也解决了您的实例数量因素。如果它计算密集,那么检查内存需求也是明智的。
下一个决定因素是实例家族。这里正确的问题是,“所选实例是否优化了时间和成本?”在前一步中,您已经确定问题是否可以通过 CPU 或 GPU 解决得最好,这缩小了选择过程。现在,让我们了解推理作业。
选择推理作业的正确实例类型
在生产中,机器学习的成本和复杂性的主要部分是推理。通常,推理在实时运行的单个输入上执行。推理作业通常计算/内存密集度较低。由于它们一直运行并服务于最终用户请求或集成到更广泛的应用中,因此它们必须高度可用。
您可以根据给定的工作负载选择您迄今为止了解的任何实例类型。除此之外,AWS 还有Inf1和弹性推理类型的实例用于推理。弹性推理允许您将 GPU 实例的一部分附加到任何 CPU 实例上。
让我们看看一个应用程序与推理作业集成的示例。在这种情况下,应用程序的 CPU 和内存需求与推理作业的 CPU 和内存需求不同。对于此类用例,您需要选择正确的实例类型和大小。在这种情况下,将您的应用程序舰队和推理舰队分开是很好的。这可能需要一些管理。如果此类管理对您的需求来说是个问题,那么请选择弹性推理,其中应用程序和推理作业可以放置在一起。这意味着您可以在同一舰队上托管多个模型,并且您可以在内存中将所有这些不同的模型加载到不同的加速器上,并发请求可以提供服务。
在决定生产环境中的实例类型和家族之前,始终建议您在较低的环境中运行一些示例。对于生产环境,您需要管理您为 Amazon SageMaker 托管模型设置的扩展性配置。您将在下一节中了解这一点。
管理扩展性配置
要为您的模型启动自动扩展,您可以通过 SageMaker 控制台、AWS 命令行界面(AWS CLI)或通过应用程序自动扩展 API使用AWS SDK。对于倾向于 CLI 或 API 的用户,该过程涉及将模型注册为可扩展的目标,定义规模化策略,然后应用它。如果您选择 SageMaker 控制台,只需在导航面板中转到推理下的端点,找到您的模型端点名称,并选择它以及变体名称以激活自动扩展。
现在让我们深入了解规模化策略的复杂性。
规模化策略概述
自动扩展由规模化策略驱动,这些策略决定了如何根据不同的工作负载添加或删除实例。您有两个选项可供选择:目标跟踪和步长规模化策略。
目标跟踪规模化策略:我们的建议是利用目标跟踪规模化策略。在这里,您选择一个 CloudWatch 指标并设置一个目标值。自动扩展负责创建和管理 CloudWatch 警报,调整实例数量以保持指标接近指定的目标值。例如,一个以 InvocationsPerInstance 指标为目标值 70 的规模化策略确保该指标在该值附近波动。
步扩展策略:步扩展用于高级配置,允许你在特定条件下指定实例部署。然而,为了简单和完全自动化,目标跟踪扩展更受欢迎。请注意,步扩展仅通过 AWS CLI 或应用程序自动扩展 API 管理。
创建目标跟踪扩展策略涉及指定指标,例如每实例的平均调用次数,以及目标值,例如每分钟每实例 70 次调用。你可以根据预定义或自定义指标创建目标跟踪扩展策略。可选地还可以配置冷却时间,以防止容量快速波动。
根据时间表进行扩展
调度操作允许在特定时间进行扩展活动,无论是作为一次性事件还是按重复的时间表进行。这些操作可以与你的扩展策略协同工作,允许根据不断变化的工作负载做出动态决策。调度扩展仅通过 AWS CLI 或应用程序自动扩展 API 管理。
最小和最大扩展限制
在制定扩展策略之前,设置最小和最大扩展限制至关重要。最小值至少设置为 1,表示实例的最小数量,而最大值表示上限。SageMaker 自动扩展遵循这些限制,并在流量为零时自动缩放到指定的最小实例。
你有三个选项来指定这些限制:
-
使用控制台更新最小实例计数和最大实例计数的设置。
-
使用 AWS CLI,包括与 register-scalable-target 命令一起使用的 --min-capacity 和 --max-capacity 选项。
-
调用 RegisterScalableTarget API,指定 MinCapacity 和 MaxCapacity 参数。
冷却时间
冷却时间对于防止缩放或扩展活动中的过度扩展至关重要。它减慢后续的扩展操作,直到该周期结束,从而保护免受容量快速波动的影响。你可以在扩展策略中配置冷却时间。
如果未指定,默认的冷却时间为 300 秒,适用于缩放和扩展。根据你的模型流量特征调整此值;如果频繁出现峰值或多个扩展策略,请考虑增加,如果需要快速添加实例,则减少。
当你开始优化模型的可伸缩性时,请记住这些配置以确保无缝且成本效益的体验。在下一节中,你将深入了解并理解保护我们的 Amazon SageMaker 笔记本的不同方法。
保护 SageMaker 笔记本
如果你正在阅读本章的这一部分,那么你已经学习了如何使用笔记本实例,应该选择哪种类型的训练实例,以及如何配置和使用端点。现在,让我们学习如何保护这些实例。以下方面有助于保护实例:
-
加密:当你谈论通过加密来保护某物时,你是在谈论保护数据。但这意味着什么?这意味着使用加密保护静态数据,使用加密保护传输中的数据,并通过 TLS 1.2 加密使用 KMS 来实现更好的角色分离和互联网流量隐私。可以使用 AWS 管理的 KMS 密钥启动带有加密卷的 SageMaker 实例。这有助于你默认保护 Jupyter Notebook 服务器。
-
当你调用
CreateNotebookInstance或UpdateNotebookInstance时,RootAccess字段将设置为Disabled。数据科学家将能够访问他们的用户空间并安装 Python 包。然而,他们无法以 sudo 权限登录 root 用户并对操作系统进行更改。 -
IAM 角色:在启动笔记本实例期间,创建一个 IAM 角色用于执行或使用现有的角色进行执行是必要的。这是用来启动与角色关联的实例配置文件的服务管理 EC2 实例。此角色将根据附加到该角色的策略限制 API 调用。
-
VPC 连接:当你启动 SageMaker 笔记本实例时,默认情况下,它将在 SageMaker 服务账户内创建,该账户拥有服务管理的 VPC,并且默认情况下将通过互联网网关访问互联网,该网关由服务管理。如果你只处理 AWS 相关的服务,那么建议你在你的 VPC 内的私有子网中启动 SageMaker 笔记本实例,并使用一个定制良好的安全组。你可以通过连接到该 VPC 的 VPC 端点从笔记本实例调用或使用 AWS 服务。最佳实践是通过端点策略来控制它们,以实现更好的 API 控制。这强制限制了数据从你的 VPC 和安全环境外流出。为了捕获所有网络流量,你可以开启 VPC 流量日志,这些日志可以通过 CloudWatch 进行监控和跟踪。
-
当你调用
CreateTrainingJob、CreateHyperParameterTuningJob或CreateModel时,将EnableNetworkIsolation参数设置为True。网络隔离可以与 VPC 一起使用,这确保了容器不能进行任何出站网络调用。 -
将私有网络连接到你的 VPC:你可以在你的 VPC 的私有子网中启动你的 SageMaker 笔记本实例。这可以通过与私有网络通信来访问你的私有网络中的数据,这可以通过使用 Amazon VPN 或 AWS Direct Connect 将你的私有网络连接到你的 VPC 来实现。
在本节中,你学习了多种方法来确保我们的 SageMaker 笔记本的安全性。在下一节中,你将了解 SageMaker Debugger。
SageMaker Debugger
在本节中,你将了解 Amazon SageMaker Debugger,揭示监控、分析和调试 ML 模型训练的复杂性:
-
监控和性能分析:SageMaker Debugger 能够捕捉模型指标,并在训练过程中实时监控系统资源,无需额外编写代码。它不仅为训练过程提供了一个窗口,还赋予了即时问题修正的能力,加速了训练过程并提升了模型质量。
-
自动检测和分析:真正的节省时间工具,Debugger 能够自动识别并通知您常见的训练错误,例如梯度值过大或过小。告别那些需要数日排查问题的日子;Debugger 将时间缩短到仅仅数小时。
-
性能分析能力:通过 Debugger 进入性能分析的领域,它细致地监控系统资源利用率指标,并允许您对训练作业进行性能分析。这涉及到从您的机器学习框架收集详细指标,识别资源使用中的异常,并迅速定位瓶颈。
-
内置分析和操作:Debugger 引入了内置的分析规则,不断地检查发出的训练数据,包括输入、输出和转换(张量)。但这还不是全部——用户可以自由地创建自定义规则,分析特定条件,甚至可以指定由规则事件触发的操作,例如停止训练或发送通知。
-
与 SageMaker Studio 集成:您可以在 SageMaker Studio 中无缝地可视化 Debugger 的结果,享受展示 CPU 利用率、GPU 活动、网络使用情况等图表的热图。还有一个热图,提供了系统资源利用的视觉时间线。
-
性能分析输出:深入了解性能分析结果,这是一份详尽的系统资源使用报告,涵盖了 GPU、CPU、网络、内存和 I/O。它是您了解训练作业内部运作的一站式商店。
-
调试洞察和优化:除了检测之外,Debugger 还进化成为一个顾问,识别训练作业中的问题,提供洞察,并提出优化建议。无论是调整批量大小还是改变分布式训练策略,Debugger 都会引导您达到最佳性能。
-
与 CloudWatch 集成:通过与 CloudWatch 的集成,Debugger 让您保持同步。配置特定条件的警报,确保您始终能够领先于潜在的问题。
-
可下载的报告:不要错过任何细节——下载 HTML 报告,总结 Debugger 的洞察力和性能分析结果,以便进行彻底的离线分析。
简而言之,Amazon SageMaker Debugger 作为一个全面的工具包出现,让您能够优雅地监控、分析和调试您的机器学习模型。它不仅仅是一个工具;它是您在模型优化旅程中的盟友。在下一节中,您将了解 SageMaker AutoPilot/AutoML 的使用方法。
SageMaker Autopilot
机器学习模型开发在历史上一直是一项艰巨的任务,需要相当的专业知识和时间。Amazon SageMaker Autopilot 的出现成为了一个颠覆性的变革,简化了这个复杂的过程,并将其转变为一种流畅的体验。
Amazon SageMaker Autopilot 提供了一系列丰富的功能,以简化机器学习模型的开发:
-
自动模型构建:SageMaker Autopilot 通过承担责任并自动化整个流程,简化了构建机器学习模型的复杂性。用户只需简单提供表格数据集并指定预测的目标列即可。
-
数据处理和增强:Autopilot 无缝处理数据预处理任务,填补缺失数据,提供数据集列的统计洞察,并从非数值列中提取有价值的信息。这保证了输入数据为模型训练进行了精细调整。
-
问题类型检测:Autopilot 通过根据提供数据的特征自动检测问题类型——无论是分类还是回归——来展示其智能。
-
算法探索和优化:用户可以探索众多高性能算法,Autopilot 高效地训练和优化数百个模型,以找到与用户需求最匹配的一个。整个过程是自动化的,减轻了用户的工作负担。
-
实际案例:想象一家零售公司试图预测客户购买行为。使用 SageMaker Autopilot,公司输入历史购买数据,指定目标变量(例如,客户是否进行购买),然后 Autopilot 接管,自主探索和优化各种机器学习模型。这便于部署预测模型,无需深厚的机器学习专业知识。在另一种情况下,一家评估信用风险的金融机构可以利用 SageMaker Autopilot。通过提供包含客户信息和信用历史的数据集,并指定目标变量(信用度),该机构可以利用 Autopilot 自动构建、训练和优化模型,以进行精确的信用风险预测。
-
模型理解和部署:SageMaker Autopilot 不仅自动化了模型创建,而且高度重视可解释性。用户可以了解生成的模型是如何进行预测的。Amazon SageMaker Studio Notebook 作为访问、改进和重新创建模型的平台,确保了模型的持续改进。
Amazon SageMaker Autopilot 标志着机器学习领域的转变,使其对更广泛的受众变得可访问。通过自动化模型开发的繁重工作,Autopilot 使用户能够专注于业务问题的战略层面,使他们从机器学习的复杂性中解放出来。随着组织采用机器学习进行决策,SageMaker Autopilot 作为一种革命性工具出现,无需广泛的数据科学专业知识即可释放人工智能的力量。在下一节中,您将深入了解模型监控。
SageMaker 模型监控器
在机器学习不断发展的领域中,确保模型在现实世界生产环境中的可靠性和鲁棒性至关重要。在本节中,您将深入了解 Amazon SageMaker 模型监控器的深远意义、实际应用和强大功能——这是一个专门针对解决实时生产环境中模型漂移挑战的组件。
-
模型监控的本质:随着机器学习模型进入现实世界的部署,由于数据分布的变化或用户行为的改变,其有效性的持续下降——这被称为模型漂移,构成了一个重大威胁。持续的监控成为主动识别和纠正这些偏差的关键,保护机器学习预测的准确性和可靠性,从而确保业务成果。
-
自动守护者:Amazon SageMaker 模型监控器在机器学习领域成为一盏指路明灯,为生产中机器模型的持续监控提供了一种自动化的解决方案。从检测数据漂移到确保模型质量,它提供了一套全面的工具,以应对现实世界数据不断变化的性质带来的挑战。
-
自动化分析:模型监控器接管模型分析工作,定期根据预定义或用户提供的规则自动检查部署的模型。这减轻了用户构建自定义工具的负担。
-
统计规则:通过内置的统计规则,模型监控器覆盖了潜在问题的整个范围,包括数据分布中的异常值、完整性和漂移。这些规则使系统能够定位异常和偏离预期模型行为的情况。
-
CloudWatch 集成:无缝集成到 Amazon CloudWatch,当规则违反发生时,模型监控器会发出指标。用户可以根据这些指标设置警报,确保及时通知并允许及时干预。
-
数据漂移监控:在识别数据分布变化方面表现出色,模型监控器提供了关于输入数据随时间演变的见解。无论是单位的变化还是突然涌入的空值,模型监控器始终保持警惕。
-
模型质量监控:除了数据漂移之外,系统还会监控模型本身的性能。模型准确性的下降会触发警报,通知用户可能影响模型预测能力的潜在问题。
Amazon SageMaker 模型监控器为部署和监控模型提供了一个无缝的端到端流程。从模型部署和数据捕获到基准测试和持续监控,整个过程确保了在时间上维护模型稳定性的全面方法。
在机器学习的广阔领域中,Amazon SageMaker 模型监控器作为一个指导力量,满足了在生产中对模型持续监控的迫切需求。其自动分析、与 CloudWatch 的集成以及对数据和模型质量漂移的关注,使其成为依赖机器学习进行关键决策的组织不可或缺的工具。随着企业越来越依赖机器学习模型的稳定性和准确性,SageMaker 模型监控器屹立不倒,为机器学习领域的不断变化挑战提供了强大的解决方案。在下一节中,你将了解如何通过训练编译器使我们的 SageMaker 训练过程更快。
SageMaker 训练编译器
如果你已经到达这一部分,你即将深入探索SageMaker 训练编译器(SMTC)的世界,这是一个颠覆性的工具,旨在通过优化复杂的训练脚本来加速你在 SageMaker 上训练机器学习模型。想象一下:更快的训练,更快的模型开发,以及实验的大门敞开。这就是 SMTC 的主要目标——提高训练速度,为你的模型开发之旅带来敏捷性。以下是使用 SMTC 的主要优势:
-
扩展挑战:踏上训练大规模模型的旅程,尤其是那些具有数十亿参数的模型,常常感觉像是在未知的工程领域导航。然而,SMTC 通过优化整个训练过程,克服了扩展带来的挑战。
-
核心效率:SMTC 接管了 GPU 内存的使用,引领了一个更大的批大小不仅成为可能,而且成为现实的领域。这种优化转化为加速的训练时间,对于任何寻求效率提升的数据科学家来说都是一大福音。
-
成本节约:时间就是金钱,在机器学习的领域也是如此。通过加速训练作业,SMTC 不仅加快了你的模型,而且有可能降低你的成本。如何?嗯,你是根据训练时间付费的,而更快的训练意味着时钟上的时间更少。
-
吞吐量提升:该工具已经证明了吞吐量的提升,在不牺牲模型准确性的情况下实现了更快的训练。
下面是一些使用 SMTC 在 LLMs 场景/用例中的效率、成本节约、自动扩展的例子,以及 NLP 问题的批大小优化:
-
大型语言模型 (LLMs):SMTC 对于训练包括 BERT、DistilBERT、RoBERTa 和 GPT-2 在内的大型语言模型特别有益。这些模型涉及庞大的参数大小,使得训练的扩展成为一个非平凡的任务。
-
批量大小优化:SMTC 允许用户尝试更大的批量大小,这对于在自然语言处理 (NLP) 或计算机视觉等任务中实现效率提升特别有用。
SageMaker 训练编译器不仅仅是一个黑盒;它是一位细致的工匠正在工作。它将您的深度学习模型从其高级语言表示转换为硬件优化的指令。这包括图级别优化、数据流级别优化和后端优化,最终产生一个与硬件资源优雅共舞的优化模型。结果?得益于编译的魔力,训练速度更快。在下一节中,您将了解 Amazon SageMaker 数据清洗器——SageMaker Studio Classic 中的一个重要组件。
SageMaker 数据清洗器
在本节中,您将揭示数据清洗器的意义和好处,剖析其在导入、准备、转换、特征化和分析数据方面的端到端解决方案角色:
-
轻松导入数据:数据清洗器简化了从各种来源导入数据的过程,例如 Amazon 简单存储服务 (S3)、Amazon Athena、Amazon Redshift、Snowflake 和 Databricks。无论您的数据位于云端还是特定数据库中,数据清洗器都能无缝连接到源并导入数据,为全面的数据处理奠定基础。
-
构建数据流:想象一下您可以轻松设计数据流,规划一系列机器学习数据准备步骤的场景。这正是数据清洗器大放异彩的地方。通过结合来自不同来源的数据集并指定所需的转换,您塑造了一个准备就绪的数据准备工作流程,可以集成到您的机器学习管道中。
-
精确转换数据:使用数据清洗器以优雅的方式清洗和转换您的数据集。您可以使用标准转换,例如字符串、向量和数值数据格式化,以及更深入的文本和日期/时间嵌入等特征工程的专业转换。
-
获取洞察并确保数据质量:数据完整性至关重要,数据清洗器通过其数据洞察与质量报告功能承认这一点。这允许您自动验证数据质量,识别异常,并确保您的数据集在成为机器学习努力的基石之前达到最高标准。
-
深入分析变得简单:使用 Data Wrangler 内置的可视化工具,在任何时刻深入挖掘你的数据集的复杂性。从散点图到直方图,你可以轻松分析特征。还可以利用目标泄漏分析、快速建模等数据分析工具来理解特征相关性并做出明智的决策。
-
无缝导出以进行进一步实验:数据准备并不随着 Data Wrangler 而结束——它扩展到工作流程的下一阶段。将精心制作的数据准备工作流程导出到各种目的地。无论是 Amazon S3 存储桶、SageMaker 模型构建管道用于自动化部署、SageMaker 特征存储用于集中存储,还是定制的 Python 脚本用于定制工作流程——Data Wrangler 确保你的数据位于你需要的地方。
Amazon SageMaker Data Wrangler 不仅仅是一个工具;它是简化并增强你的数据处理流程的强大工具。能够无缝集成到你的 ML 工作流程中,精确地转换数据,以及在进一步利用方面的灵活性,使 Data Wrangler 成为 SageMaker 生态系统的基石。在下一节中,你将了解 SageMaker 特征存储——一个用于存储、检索和无缝共享 ML 特征的有序存储库。
SageMaker 特征存储
想象一下你正在构建一个推荐系统。在没有特征存储的情况下,你将穿越一个手动特征工程、分散的特征存储和持续关注一致性的景观。
在机器学习管道中,由于特征工程分散的特性,涉及多个团队和工具,因此特征管理具有挑战性。当不同团队处理特征存储的不同方面时,协作问题就会出现,导致不一致性和版本控制问题。特征随时间演变的动态特性使得变更跟踪和确保可重复性变得更加复杂。SageMaker 特征存储通过提供一个集中式特征存储库来解决这些挑战,从而实现 ML 管道中特征的无缝共享、版本控制和一致访问,从而简化协作、增强可重复性和促进数据一致性。
现在,用户数据,包括年龄、位置、浏览历史和项目数据,如类别和价格,在特征存储中拥有一个统一的家。训练和推理变得愉快,因为这些特征的轻松访问和共享促进了效率和不屈的一致性。
要了解 SageMaker 特征存储的领域,让我们熟悉一些关键术语:
-
特征存储:在本质上,特征存储是 ML 特征的存储和管理层。它是唯一的真相来源,负责处理特征的存储、检索、删除、跟踪、共享、发现和访问控制。
-
在线 存储:这是低延迟和高可用性的领域,允许实时查找记录。在线存储通过 GetRecord API 确保快速访问最新的记录。
-
离线 存储:当亚秒级延迟读取不是优先事项时,离线存储将历史数据存储在您的 Amazon S3 桶中。它是您存储和提供用于探索、模型训练和批量推理的特征的首选。
-
特征 组:Feature Store 的基石,特征组包含用于 ML 模型训练或预测的必要数据和元数据。它逻辑上分组用于描述记录的特征。
-
特征:作为 ML 模型训练或预测输入的属性。在 Feature Store API 中,特征是记录的属性。
-
特征 定义:包括一个名称和数据类型(整数、字符串或分数),特征定义是特征组的一个组成部分。
-
记录:与单个记录标识符相关联的特征值的集合。记录标识符和事件时间值唯一标识特征组中的记录。
-
记录 标识符 名称:特征组中的每个记录都通过记录标识符名称进行定义和标识。它必须引用特征组特征定义中定义的一个特征的名称。
-
事件 时间:记录事件发生的时间用时间戳标记,这对于区分记录至关重要。在线存储包含对应最新事件时间的记录,而离线存储包含所有历史记录。
-
导入:向特征组添加新记录的过程,通常通过 PutRecord API 实现。
让我们结合本章迄今为止介绍的工具,通过一个财务交易欺诈检测的示例来导航。表 9.2显示了财务交易的合成数据集:
| TransactionID | Amount | Merchant | CardType | IsFraud |
|---|---|---|---|---|
| 1 | 500.25 | Amazon | Visa | 0 |
| 2 | 120.50 | Walmart | Mastercard | 1 |
| 3 | 89.99 | Apple | Amex | 0 |
| 4 | 300.75 | Amazon | Visa | 0 |
| 5 | 45.00 | Netflix | Mastercard | 1 |
表 9.2 – 财务交易示例数据集
您现在将看到 SageMaker Feature Store、SageMaker Training Compiler、SageMaker Debugger 和 SageMaker Model Monitor 在上述数据集上的应用。
-
Amount、Merchant、CardType -
将数据导入 Feature Store:使用 SageMaker Feature Store API 将数据集导入 Feature Store:
# Example code for ingesting data into Feature Storefrom sagemaker.feature_store.feature_group import FeatureGroupfeature_group_name = "financial-transaction-feature-group"feature_group = FeatureGroup(name=feature_group_name, sagemaker_session=sagemaker_session)feature_group.load_feature_definitions(data_frame=df)feature_group.create()feature_group.ingest(data_frame=df, max_workers=3, wait=True) -
# 使用 SageMaker Training Compiler 定义训练作业的示例代码from sagemaker.compiler import compile_modelcompiled_model = compile_model(target_instance_family='ml.m5.large',target_platform_os='LINUX',sources=['train.py'],dependencies=['requirements.txt'],framework='pytorch',framework_version='1.8.0',role='arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole-20201231T000001',entry_point='train.py',instance_type='ml.m5.large',) -
# 在训练脚本中集成 SageMaker Debugger 的示例代码from smdebug import SaveConfigfrom smdebug.pytorch import Hook# Create an instance of your modelmodel = FraudDetectionModel(input_size, hidden_size, output_size)hook = Hook.create_from_json_file()hook.register_hook(model)# Your training script here...# Train the model train_model(model, train_loader, criterion, optimizer, num_epochs=5) -
模型部署和推理:您可以使用 SageMaker 部署您的训练模型,利用存储在 Feature Store 中的丰富特征库。SageMaker Model Monitor 的实时监控确保模型在推理动态世界中的健康状态。
-
# 使用 SageMaker Model Monitor 捕获基线统计的示例代码from sagemaker.model_monitor import DefaultModelMonitorfrom sagemaker.model_monitor.dataset_format import DatasetFormatmonitor = DefaultModelMonitor(role=role,instance_count=1,instance_type='ml.m5.large',volume_size_in_gb=20,max_runtime_in_seconds=3600,)baseline_data_uri = 's3://path/to/baseline_data'monitor.suggest_baseline(baseline_dataset=baseline_data_uri,dataset_format=DatasetFormat.csv(header=True),output_s3_uri='s3://path/to/baseline_output',)
在下一节中,您将了解 Amazon SageMaker Edge Manager,这是 AWS 提供的一项服务,旨在简化机器学习模型在边缘设备上的部署和管理。
SageMaker Edge Manager
SageMaker Edge Manager 设计用于解决机器学习开发者在边缘设备上运行模型时面临的挑战。SageMaker Edge Manager 可以执行的一些关键功能如下所示:
-
模型编译:利用 Amazon SageMaker Neo 编译适用于各种目标设备和操作环境的模型,包括 Linux、Windows、Android、iOS 和 macOS。
-
模型部署:使用 AWS 密钥对每个模型进行签名,将其与其运行时打包,并包含部署到特定设备所需的所有凭证。
-
模型服务器概念:引入模型服务器概念,以在边缘设备上高效运行多个模型,优化硬件资源利用率。
-
持续监控:提供持续监控模型健康状况的工具,允许开发者收集指标、样本输入/输出数据,并将这些数据安全地发送到云端。
-
模型漂移检测:允许检测由于现实世界数据漂移导致模型质量随时间下降,使开发者能够采取纠正措施。
-
与 SageMaker Ground Truth 集成:与 SageMaker Ground Truth 集成以进行数据标注和重新训练,确保模型保持准确和有效。
现在,让我们通过使用 SageMaker Edge Manager 了解一些现实世界的挑战及其解决方案:
-
高资源需求:
-
挑战:机器学习模型,尤其是深度学习模型,可能具有很高的资源需求。
-
解决方案:SageMaker Edge Manager 使用 SageMaker Neo 编译模型,使它们更高效,并允许它们在某些目标硬件上运行速度快达 25 倍。
-
-
运行多个模型:
-
挑战:许多机器学习应用需要同时运行多个模型。
-
解决方案:引入模型服务器概念,使边缘设备上多个模型的串行或并行执行变得高效。
-
-
生产中的模型质量下降:
-
挑战:现实世界数据随时间漂移,导致模型质量下降。
-
解决方案:SageMaker Edge Manager 支持持续监控,允许开发者使用指标和漂移检测工具检测并解决模型质量下降问题。
-
以下是一些展示 SageMaker Edge Manager 不同应用的示例:
-
自动驾驶汽车中的实时预测:自动驾驶汽车的边缘设备需要提供用于导航和障碍物避让的实时预测。SageMaker Edge Manager 优化了这些设备的模型,确保低延迟预测。
-
隐私保护个人设备:智能手机和智能摄像头等个人设备可以使用 SageMaker Edge Manager 在设备上存储数据,从而保护用户隐私并减少大量数据传输到云的需求。
-
工业物联网中的持续监控:在机器上安装传感器的工业物联网部署可以从 SageMaker Edge Manager 提供的持续监控中受益。这有助于在动态环境中识别和解决模型质量下降问题。
总结来说,Amazon SageMaker Edge Manager 通过简化边缘设备上机器学习模型的部署和管理,解决资源限制问题,实现高效模型执行,并确保持续监控以维持模型准确性。在下一节中,您将了解 Amazon SageMaker 提供的无代码解决方案。
SageMaker Canvas
在本节中,您将了解 SageMaker Canvas 的核心,阐述其功能和它对那些希望将机器学习融入决策过程的组织的重要性。
Amazon SageMaker Canvas 是 AWS 提供的基于云的服务,通过可视化界面简化了机器学习过程,包括构建、训练和部署机器学习模型,而无需编写代码。作为 Amazon SageMaker 套件的一部分,它通过民主化机器学习来满足多样化的受众需求:
-
无代码模型构建:SageMaker Canvas 消除了采用机器学习时遇到的传统障碍,使用户能够在无需代码的情况下构建模型。这一特性对于寻求利用机器学习的强大功能进行预测分析,但缺乏编码专业知识的企业专业人士来说至关重要。
案例研究:一位没有任何机器学习知识的营销专业人士可以利用 SageMaker Canvas 预测客户流失。直观的界面引导他们完成流程,使预测分析对更广泛的受众变得可访问。
-
灵活的用户界面:SageMaker Canvas 的用户友好界面适应了不同水平的用户。它使用户能够创建针对各种用例的预测,从库存规划到情感分析,使其成为跨不同行业的企业的多功能工具。
案例研究:一位供应链经理可以利用 SageMaker Canvas 基于历史数据、季节性和市场趋势预测最佳库存水平,简化规划流程并最小化缺货情况。
-
内置数据准备功能:SageMaker Canvas 配备了内置的数据准备功能和运算符,便于导入和分析不同的云和本地数据源。这一特性简化了特征之间关系的探索和可视化,使得创建新特征变得无缝。
案例研究:数据分析师可以使用 SageMaker Canvas 从各种来源导入和分析客户数据。这使得他们能够识别影响购买决策的关键因素,并创建预测模型以增强目标营销策略。
-
协作和模型共享:SageMaker Canvas 通过允许用户在不同工具和团队之间共享、审查和更新机器学习模型来促进协作。这一协作方面确保了从机器学习中得出的知识和见解在组织内部得到有效传播。
案例研究:数据科学团队使用 SageMaker Canvas 与业务分析师合作开发欺诈检测模型。该模型可以无缝共享,允许根据不断变化的数据模式进行实时更新和改进。
Amazon SageMaker Canvas 作为催化剂,将机器学习从一项专业技能转变为更广泛受众可用的工具。其功能包括无需代码的模型构建、灵活的用户界面和协作能力,突显了其在简化机器学习生命周期中的重要性。随着组织努力利用数据驱动的洞察力,SageMaker Canvas 处于前沿,使他们能够创新、做出明智的决策,并在日益激烈的竞争环境中蓬勃发展。
你现在已经到达了这个部分的结尾和本章的结尾。接下来,让我们总结一下你所学到的内容。
摘要
在本章中,你学习了如何使用 SageMaker 创建笔记本实例和训练实例。随着你的学习,你学习了如何使用 SageMaker 进行超参数调整作业。由于你在 AWS 中的资产安全是你工作的一个基本部分,你也学习了各种确保 SageMaker 实例安全的方法。
AWS 产品每天都在演变,以帮助你解决 IT 问题。记住所有产品名称并不容易。唯一的学习方式是通过实践。当你解决问题或构建产品时,关注你产品的不同技术领域。这些领域可以是作业调度、日志记录、跟踪、监控指标、自动扩展等等。
计算时间、存储和网络是基础。建议你为这些服务中的每一个都练习一些示例。参考 AWS 文档以解决任何疑问也是一个有用的选择。始终重要的是以经济高效的方式设计你的解决方案,在使用这些服务时探索成本优化与构建解决方案本身一样重要。祝大家一切顺利!
考试准备练习 - 章节复习题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的关键技能。这就是为什么在学习的早期阶段就培养这些技能至关重要。
章节复习题旨在随着你学习并复习每一章的内容,逐步提高你的应试技巧,同时复习章节中的关键概念。你可以在每个章节的末尾找到这些复习题。
如何访问这些资源
要了解如何访问这些资源,请参阅名为第十一章的章节,访问在线 练习资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH09。或者,你可以扫描以下二维码(图 9.14):

图 9.14 – 为登录用户打开章节复习题的二维码
- 一旦你登录,你会看到一个类似于图 9.15的页面。15*:

图 9.15 – 第九章的章节复习题
- 准备就绪后,开始以下练习,多次尝试测验。
考试准备练习
对于前三次尝试,不要担心时间限制。
尝试 1 次
第一次,目标至少达到40%。查看你答错的答案,并再次阅读章节中的相关部分,以填补你的学习差距。
尝试 2 次
第二次,目标至少达到60%。查看你答错的答案,并再次阅读章节中的相关部分,以填补任何剩余的学习差距。
尝试 3 次
第三次,目标至少达到75%。一旦你的分数达到 75%或更高,你就可以开始练习时间管理。
小贴士
你可能需要超过三次尝试才能达到 75%。这没关系。只需复习章节中的相关部分,直到你达到目标。
在练习时间
目标:你的目标是保持分数不变,同时尽可能快地回答这些问题。以下是你下一次尝试应该看起来像的例子:
| 尝试 | 分数 | 用时 |
|---|---|---|
| 尝试 5 次 | 77% | 21 分钟 30 秒 |
| 尝试 6 次 | 78% | 18 分钟 34 秒 |
| 尝试 7 次 | 76% | 14 分钟 44 秒 |
表 9.3 – 在线平台上的样本时间练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,为每次尝试设定自己的时间限制。
每次新的尝试,你的分数应该保持在75%以上,而完成所需的时间应该“减少”。重复尝试,直到你对自己应对时间压力有信心。
第十章:模型部署
在上一章中,你探索了 Amazon SageMaker 的各个方面,包括不同的实例、在 Jupyter Notebook 中的数据准备、使用内置算法进行模型训练以及为训练和推理编写自定义代码。现在,你的重点转向使用 AWS 服务提供的多种模型部署选择。
如果你正在 AWS 上导航模型部署的领域,了解选项至关重要。一个突出的服务是 Amazon SageMaker – 一个全面管理的解决方案,它简化了整个机器学习(ML)生命周期,尤其是在部署模型方面。有几个因素会影响模型部署的选项。随着你进入本章,你将学习使用 SageMaker 部署模型的不同选项。
影响模型部署选项的因素
这里是决定模型部署选项的关键因素:
-
可扩展性要求
- 高流量:想象你正在开发一个为热门电子商务平台提供推荐的系统,该平台在一天中预计会有波动的流量。如果应用程序预计会有高流量和变化的负载,具有自动扩展功能的 Amazon SageMaker 或 AWS Lambda 等服务可能更受欢迎。这对于在高峰时段保持性能至关重要。
-
实时推理与批量推理
-
实时推理:考虑一个金融机构的欺诈检测系统,其中立即的决定对于交易批准或拒绝至关重要。对于这种实时预测,Amazon SageMaker 和 AWS Lambda 等服务是合适的。对于欺诈检测,这些服务提供低延迟响应,使能够快速对交易的合法性做出决定。在这种情况下,实时交易通过 SageMaker 的推理端点触发立即预测。
-
批量推理:在医疗环境中,你可能需要定期处理大量患者数据以更新疾病诊断的预测模型。这是一个批量处理用例,可以使用 SageMaker 以及 Amazon S3 等服务组合。你可以高效地处理大数据集,定期更新模型,并确保预测与最新信息保持一致,这对于保持医疗预测的准确性至关重要。
-
-
基础设施管理复杂性
- 托管部署与自定义部署:假设你正在开发一个用于分析卫星图像的计算机视觉应用程序,需要专门的配置和依赖项。在需要自定义配置的情况下,选择使用 EC2 实例进行自定义部署可以提供对基础设施的更多控制。SageMaker 的托管服务对于你优先考虑管理便捷性且不希望深入了解复杂的基础设施细节的场景是理想的。
-
成本考虑
- 按使用付费:考虑一个天气预报应用程序,其计算需求根据天气事件而变化。在负载波动的情况下,AWS Lambda 的按使用付费模型具有优势。你只需为消耗的计算时间付费,这使得与具有固定成本的替代方案相比,对于具有间歇性、不可预测的使用模式的程序来说更加经济高效。
SageMaker 部署选项
Amazon SageMaker 提供了多种部署选项,以有效地部署机器学习模型。在本节中,你将探索使用 SageMaker 部署模型的不同方法,提供具有场景和示例的技术解决方案。
实时端点部署
在此场景中,你有一个训练好的图像分类模型,并且想将其部署以提供对传入图像的实时预测。
解决方案
创建一个 SageMaker 模型并将其部署到实时端点。
步骤
-
使用 SageMaker 训练作业训练你的模型。
-
从训练好的模型工件中创建一个 SageMaker 模型。
-
将模型部署到实时端点。
示例代码片段
from sagemaker import get_execution_role
from sagemaker.model import Model
from sagemaker.predictor import RealTimePredictor
role = get_execution_role()
model_artifact='s3://your-s3-bucket/path/to/model.tar.gz'
model = Model(model_data=model_artifact, role=role)
predictor = model.deploy(instance_type='ml.m4.xlarge', endpoint_name='image-classification-endpoint')
批量转换作业
在此场景中,你有一个大型数据集,并且想使用训练好的模型对整个数据集进行批量推理。
解决方案
使用 SageMaker 批量转换批量处理整个数据集。
步骤
-
创建一个 SageMaker 转换器。
-
开始批量转换作业。
示例代码片段
from sagemaker.transformer import Transformer
transformer = Transformer(model_name='your-model-name',
instance_count=1,
instance_type='ml.m4.xlarge',
strategy='SingleRecord',
assemble_with='Line',
output_path='s3://your-s3-bucket/output')
transformer.transform('s3://your-s3-bucket/input/data.csv', content_type='text/csv')
transformer.wait()
多模型端点部署
在此场景中,你有多个版本的模型,并且想将它们部署到单个端点上以进行 A/B 测试或逐步推出。
解决方案
使用 SageMaker 多模型端点在一个端点上部署和管理多个模型。
步骤
-
创建并训练多个模型。
-
创建一个 SageMaker 多模型。
-
将多模型部署到端点。
示例代码片段
from sagemaker.multimodel import MultiModel
multi_model = MultiModel(model_data_prefix='s3://your-s3-bucket/multi-models')
predictor = multi_model.deploy(instance_type='ml.m4.xlarge', endpoint_name='multi-model-endpoint')
端点自动扩展
在此场景中,你的应用程序经历着不同的工作负载,并且想根据流量自动调整实例数量。
解决方案
为 SageMaker 端点启用自动扩展。
步骤
-
配置 SageMaker 端点以使用自动扩展。
-
根据预期的负载设置最小和最大实例数量。
示例代码片段
from sagemaker.predictor import Predictor
predictor = Predictor(endpoint_name='your-endpoint-name', sagemaker_session=sagemaker_session)
predictor.predict('input_data')
使用 AWS Lambda 和 SageMaker 的无服务器 API
在此场景中,你想要使用 AWS Lambda 创建一个无服务器 API 以与你的 SageMaker 模型交互。
解决方案
使用 AWS Lambda 调用 SageMaker 端点。
步骤
-
创建一个 AWS Lambda 函数。
-
将 Lambda 函数与 SageMaker 端点集成。
示例代码片段
import boto3
import json
def lambda_handler(event, context):
# Perform preprocessing on input data
input_data = event['input_data']
# Call SageMaker endpoint
# ...
return {
'statusCode': 200,
'body': json.dumps('Inference successful!')
}
在部署 ML 模型领域,Amazon SageMaker 成为一个稳健的选择。其托管环境、可扩展功能和与其他 AWS 服务的无缝集成使其成为企业在各种部署场景中高效和可靠的解决方案。无论你是否预计会有高流量或需要一个无烦恼的部署体验,SageMaker 都是你在模型部署卓越之旅中的盟友。在下一节中,你将了解如何使用 Lambda 函数创建管道。
使用 Lambda 函数创建替代管道
实际上,SageMaker 是一个很棒的平台,你可以用它来创建训练和推理管道。然而,你总是可以与不同的服务合作,找到类似的解决方案。你接下来将要了解的服务之一被称为Lambda 函数。
AWS Lambda 是一种无服务器计算服务,你可以将其作为一个服务运行函数。换句话说,你可以专注于编写你的函数。然后,你只需要告诉 AWS 如何运行它(即环境和资源配置),所有必要的资源都将被配置以运行你的代码,并在完成后取消配置。
在第三章“AWS 数据迁移和处理服务”中,你了解了 Lambda 函数如何与许多不同的服务集成,例如 Kinesis 和 AWS Batch。实际上,AWS 在将 Lambda 与 140 多个服务(且列表持续增加)集成方面做得非常好。这意味着当你与特定的 AWS 服务一起工作时,你会记得它很可能会与 Lambda 集成。
重要的是要记住这一点,因为 Lambda 函数可以真正扩展你的可能性,以创建可扩展和集成的架构。例如,你可以在文件上传到 S3 时触发一个 Lambda 函数,以便在将其加载到 Redshift 之前预处理你的数据。或者,你可以在每个端点执行时创建一个触发 Lambda 函数的 API。再次强调,这个强大的服务可能性是无限的。
还有一个有用的信息是,你可以用不同的编程语言编写你的函数,例如 Node.js、Python、Go、Java 等。你的函数不一定必须由另一个 AWS 服务触发——也就是说,你可以手动触发它,例如在你的 Web 或移动应用程序中。
当涉及到部署时,你可以将你的函数作为 ZIP 文件或容器镜像上传。虽然这并不是自动化部署过程的理想选择,但直接在 AWS Lambda 控制台中编码也是可能的。
与任何其他服务一样,这项服务也有一些缺点,你应该知道:
-
为你的函数分配内存:这从 128 MB 到 10,240 MB 不等(AWS 最近将此限制从 3 GB 增加到 10 GB,如前所述)
-
函数超时:这是最多 900 秒(15 分钟)
-
函数层:这是最多五层
-
突发并发性:这取决于 AWS 区域,从 500 到 3000 不等
-
部署包大小:这是解压后的 250 MB,包括层
-
容器镜像代码包大小:这是 10 GB
-
/tmp 目录中的可用空间:这是 512 MB
在选择 Lambda 函数之前,请确保这些限制适合你的用例。通过将 Lambda 函数引入 SageMaker 的替代管道范围,你可以利用 Lambda 的一个潜在用途,即创建模型的推理管道。
如你所知,SageMaker 有一个非常方便的.deploy()方法,可以为模型推理创建端点。这样,你可以调用它来传递输入数据以接收预测结果。在这里,你可以通过使用 API 网关和 Lambda 函数来创建这个推理端点。
如果你不需要推理端点,只想进行预测并将结果存储在某个地方(批量方式),那么你只需要一个 Lambda 函数,它能够获取输入数据,实例化模型对象,进行预测,并将结果存储在适当的位置。当然,它通过考虑你之前讨论的所有限制来实现这一点。
好的,现在你已经对 Lambda 和某些用例有了良好的背景知识,你可以查看你在考试中应该注意的最重要配置。
创建和配置 Lambda 函数
首先,你应该知道你可以通过不同的方式创建 Lambda 函数,例如通过 AWS CLI(Lambda API 参考)、AWS Lambda 控制台,甚至是部署框架(例如,serverless framework)。
无服务器框架通常是提供商和编程语言无关的。换句话说,它们通常允许你从一系列云提供商和编程语言中选择你想要部署无服务器基础设施的地方。
重要提示
无服务器架构的概念并不仅限于 AWS。实际上,许多云服务提供商提供与 AWS Lambda 函数类似的其他服务。这就是为什么构建了这些无服务器框架——为了帮助开发者和工程师将他们的服务部署到他们想要的地方,包括 AWS。这可能在你的考试中不太可能出现,但这是你应该知道的事情,以便你了解作为数据科学家或数据工程师解决挑战的不同方式。
由于你想要通过 AWS 认证机器学习专业考试,在这里,你将遍历 AWS Lambda 控制台。这样,你可以更熟悉其界面和最重要的配置选项。
当你导航到 Lambda 控制台并请求一个新的 Lambda 函数时,AWS 会为你提供一些起始选项:
-
从头开始创建作者:这是如果你想要从头创建你的函数
-
使用蓝图:如果您想从示例代码和针对常见用例的配置预设创建函数
-
容器镜像:如果您想选择容器镜像来部署您的函数
-
浏览无服务器应用程序存储库:如果您想从 AWS 无服务器应用程序存储库部署示例 Lambda 应用程序
从零开始,下一步是设置您的 Lambda 配置。AWS 将这些配置分为基本和高级设置。在基本配置中,您将设置函数名称、运行时环境和权限。图 10.1显示了这些配置:

图 10.1 – 从 AWS Lambda 控制台创建新的 Lambda 函数
在这里,您有一个在考试期间非常重要且应记住的配置——执行角色。您的 Lambda 函数可能需要访问其他 AWS 资源的权限,例如 S3、Redshift 等。执行角色授予 Lambda 函数所需的权限,以便它可以根据需要访问资源。
您必须记住,您的 VPC 和安全组配置也会影响 Lambda 函数的运行方式。例如,如果您想创建一个需要互联网访问来下载内容的函数,那么您必须在该具有互联网访问的 VPC 中部署此函数。同样的逻辑也适用于其他资源,例如访问关系型数据库、Kinesis 和 Redshift。
此外,为了正确配置 Lambda 函数,您至少需要编写其代码、设置执行角色,并确保 VPC 和安全组配置符合您的需求。接下来,您将了解其他配置。
完成配置并部署 Lambda 函数
一旦您在 AWS 控制台中创建了 Lambda 函数,您可以在部署函数之前设置额外的配置。其中之一就是事件触发器。如前所述,您的 Lambda 函数可以从各种服务或手动触发。
重要提示
一个非常常见的触发器示例是Amazon EventBridge。这是一个 AWS 服务,您可以在其中安排函数的执行。
根据您选择的触发事件,您的函数将能够访问不同的事件元数据。例如,如果您的函数由 S3 上的PUT事件触发(例如,有人将文件上传到特定的 S3 存储桶),那么您的函数将接收到与此事件相关的元数据——例如,存储桶名称和对象键。其他类型的触发器将提供不同类型的事件元数据!
您可以通过属于函数入口点签名的 event 参数访问该元数据。不够清楚?现在您将了解函数代码应该如何声明,如下所示:
def lambda_handler(event, context):
TODO
在这里,lambda_handler 是代表您函数入口点的函数。当它被触发时,此方法将被调用,并且它将通过 event 参数接收与事件触发相关的事件元数据。这就是您如何访问与触发您函数的底层事件相关的信息!event 参数是一个类似 JSON 的对象。
如果您想测试您的函数但不想直接从底层事件触发它,这没问题;您可以使用 测试事件。它们通过准备一个将被传递给您的函数的 JSON 对象来模拟底层事件。
图 10.2 展示了一个非常直观的例子。假设您创建了一个在用户将文件上传到 S3 时被触发的函数,现在,您想测试您的函数。您可以选择上传一个文件到 S3(这会强制触发)或创建一个测试事件。
通过创建一个测试事件,您可以准备一个模拟 S3-put 事件的 JSON 对象,然后将此对象传递给您的函数:

图 10.2 – 从 Lambda 控制台创建测试事件
您还可以设置另一种类型的配置,即 环境变量,这些变量将在您的函数中可用。图 10.3 展示了如何在 Lambda 函数中添加环境变量:

图 10.3 – 向 Lambda 函数添加环境变量
您可以随时返回这些基本设置,根据需要做出调整。图 10.4 展示了基本设置部分您将找到的内容:

图 10.4 – 修改 Lambda 函数的基本设置
在监控方面,默认情况下,Lambda 函数会生成一个 Lambda 函数监控 部分,并点击 CloudWatch 中的 查看日志。
在 CloudWatch 中,每个 Lambda 函数都将有一个 日志组,在该日志组内部,有许多 日志流。日志流存储相关函数的执行日志。换句话说,日志流是一系列共享相同来源的日志,在这种情况下,来源是您的 Lambda 函数。日志组是一组共享相同保留、监控和访问控制设置的日志流。
您现在已接近本节的结尾,但不是关于 Lambda 函数这一主题的结尾。如前所述,这项 AWS 服务有很多用例,并与许多其他服务集成。在下一节中,您将了解另一个 AWS 服务,它将帮助编排 Lambda 函数的执行。这被称为 AWS 步骤函数。
使用步骤函数
Step Functions 是一个 AWS 服务,允许你创建工作流来编排 Lambda 函数的执行。这样你就可以将它们连接在一个称为步骤的事件序列中。这些步骤被分组在一个状态机中。
Step Functions 集成了重试功能,这样你就可以配置你的管道只在特定步骤成功后继续执行。设置这些重试配置的方式是通过创建一个重试策略。
重要提示
就像 AWS 的多数服务一样,AWS Step Functions 也与其他服务集成,而不仅仅是 AWS Lambda。
创建状态机相对简单。你所要做的就是导航到 AWS Step Functions 控制台,然后创建一个新的状态机。在创建状态机页面,你可以指定是否要从头创建你的状态机或从模板创建,或者你只是想运行一个示例项目。
AWS 将帮助你创建这个状态机,所以即使你选择从头开始创建,你也会找到各种任务的代码片段,例如 AWS Lambda 调用、SNS 主题发布和运行 Athena 查询。
为了演示的目的,你现在将创建一个非常简单但仍然有用的示例,说明如何使用 Step Functions 来执行具有激活 retry 选项的 Lambda 函数:
{
"Comment": "A very handy example of how to call a lamnbda function with retry option",
"StartAt": "Invoke Lambda function",
"States": {
"Invoke Lambda function": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:your-function-identification",
"Payload": {
"Input": {
"env": "STAGE"
}
}
},
"Retry": [
{
"ErrorEquals": ["States.ALL"],
"IntervalSeconds": 60,
"MaxAttempts": 5,
"BackoffRate": 2.0
}
],
"Next": "Example"
},
"Example": {
"Type": "Pass",
"Result": "Just to show you how to configure other steps",
"End": true
}
}
}
在前面的例子中,你创建了一个包含两个步骤的状态机:
-
调用 Lambda 函数:这将启动你底层 Lambda 的执行
-
执行 示例:这是一个简单的传递任务,仅用于展示如何在管道中连接第二个步骤
在第一步中,你也设置了一个重试策略,如果出现任何失败,它将尝试重新执行此任务。你设置了再次尝试的间隔(以秒为单位)以及显示尝试次数。图 10**.5 显示了状态机:

图 10.5 – 状态机
在下一节中,你将探索各种自动扩展场景和不同的处理方式。
使用 SageMaker 部署和 AWS 自动扩展扩展应用程序
自动扩展是部署机器学习模型到生产环境中的关键方面,确保应用程序能够高效地处理不同的工作负载。Amazon SageMaker 与 AWS 自动扩展相结合,提供了一个强大的解决方案,可以根据需求自动调整资源。在本节中,你将探索自动扩展至关重要的不同场景以及如何实现它,使用 SageMaker 模型部署选项和 AWS 自动扩展。
场景 1 – 波动的推理工作负载
在零售应用程序中,提出产品推荐请求的用户数量在一天中可能会有所变化,在特定的小时内会有高峰负载。
自动扩展解决方案
为 SageMaker 实时端点实现自动扩展,根据推理请求率动态调整实例数量。
步骤
-
配置 SageMaker 端点以使用自动扩展。
-
根据预期的负载变化设置最小和最大实例数量。
示例代码片段
from sagemaker import get_execution_role
from sagemaker.model import Model
role = get_execution_role()
model_artifact='s3://your-s3-bucket/path/to/model.tar.gz'
model = Model(model_data=model_artifact, role=role)
predictor = model.deploy(instance_type='ml.m4.xlarge', endpoint_name='real-time-endpoint', endpoint_auto_scaling=True)
场景 2 – 大数据集的批量处理
定期对大型数据集进行批量推理,如果不进行动态管理,可能会导致资源限制。
自动扩展解决方案
利用 AWS 批量转换与 SageMaker,并在批量处理期间配置自动扩展以实现高效的资源利用。
步骤
-
设置 AWS 批量转换作业。
-
为底层基础设施启用自动扩展以处理不同的批量大小。
示例代码片段
from sagemaker.transformer import Transformer
transformer = Transformer(model_name='your-model-name',
instance_count=1,
instance_type='ml.m4.xlarge',
strategy='SingleRecord',
assemble_with='Line',
output_path='s3://your-s3-bucket/output',
max_concurrent_transforms=4) # Set max_concurrent_transforms for autoscaling
场景 3 – 具有动态流量的多模型端点
多个模型部署在单个端点上以进行 A/B 测试,模型之间的流量分布是动态的。
自动扩展解决方案
利用自动扩展功能,通过 SageMaker 多模型端点处理不同模型版本间的不同流量负载。
步骤
-
创建并部署多个模型到 SageMaker 多模型端点。
-
启用自动扩展功能,根据流量分布调整实例数量。
示例代码片段
from sagemaker.multimodel import MultiModel
multi_model = MultiModel(model_data_prefix='s3://your-s3-bucket/multi-models')
predictor = multi_model.deploy(instance_type='ml.m4.xlarge', endpoint_name='multi-model-endpoint', endpoint_auto_scaling=True)
场景 4 – 使用漂移检测的持续模型监控
您监控模型以检测概念漂移或数据质量问题,并在模型性能下降时自动调整资源。
自动扩展解决方案
将 SageMaker 模型监控与 AWS CloudWatch 警报集成,以便在检测到漂移或退化时触发自动扩展。
步骤
-
设置 CloudWatch 警报以监控模型质量指标。
-
配置自动扩展策略,在特定警报阈值被突破时触发。
使用 SageMaker 模型部署选项和 AWS 自动扩展进行应用程序扩展,为处理不同工作负载和确保最佳资源利用提供了灵活且高效的解决方案。通过了解需要自动扩展的不同场景并遵循概述的步骤,您可以无缝地将自动扩展集成到您的机器学习部署策略中,增强应用程序的可扩展性和可靠性。在下一节中,您将了解和探索保护 AWS SageMaker 应用的不同方法。
保护 SageMaker 应用
随着机器学习应用成为业务运营的组成部分,保护 AWS SageMaker 应用至关重要,以确保敏感数据的安全,维护法规遵从性,并防止未授权访问。在本节中,您将首先深入了解保护 SageMaker 应用的原因,然后探讨不同的策略来实现安全性:
-
保护 SageMaker 应用的原因
-
数据保护:在敏感数据(如客户信息或财务记录)上训练的机器学习模型,如果没有得到充分保护,将面临重大的安全风险。保护 SageMaker 确保在整个机器学习生命周期中数据保密性和完整性得到维护。
-
合规要求:医疗保健和金融等行业受到严格的数据保护法规的约束。确保 SageMaker 的安全性有助于组织遵守如健康保险可携带性和责任法案(HIPAA)或通用数据保护条例(GDPR)等标准,避免法律后果和声誉损害。
-
防止未授权访问:SageMaker 实例和端点应仅对授权人员开放。未授权访问可能导致数据泄露或滥用机器学习能力。强大的身份验证机制对于防止此类安全漏洞至关重要。
-
模型知识产权保护:机器学习模型代表知识产权。确保 SageMaker 的安全性可以保证开发出的模型、算法和方法保持机密性,并防止知识产权被盗或逆向工程。
-
-
from sagemaker import get_execution_rolefrom sagemaker import Sessionrole = get_execution_role()sagemaker_session = Session()vpc_config = {'SecurityGroupIds': ['sg-xxxxx'], 'Subnets': ['subnet-xxxxx']}predictor = model.deploy(instance_type='ml.m4.xlarge', endpoint_name='secured-endpoint', vpc_config_override=vpc_config) -
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "sagemaker:CreateModel","Resource": "arn:aws:sagemaker:region:account-id:model/model-name"},{"Effect": "Deny","Action": "sagemaker:CreateModel","Resource": "*"}]} -
from sagemaker import get_execution_rolefrom sagemaker import Sessionrole = get_execution_role()sagemaker_session = Session()predictor = model.deploy(instance_type='ml.m4.xlarge', endpoint_name='encrypted-endpoint', encrypt_parameters=True) -
from sagemaker.model_monitor import ModelQualityMonitorfrom sagemaker.model_monitor import EndpointInputfrom sagemaker import get_execution_rolerole = get_execution_role()monitor = ModelQualityMonitor(role=role,instance_count=1,instance_type='ml.m4.xlarge',volume_size_in_gb=20,max_runtime_in_seconds=1800)
保护 AWS SageMaker 应用程序不仅是一种最佳实践,在数据驱动决策的时代,它是一项至关重要的强制措施。通过实施强大的安全措施,如利用 VPC 端点、IAM 角色、加密和持续监控,组织可以加强其 SageMaker 应用程序对潜在威胁的防御,并确保其机器学习工作流程的完整性。随着 SageMaker 继续赋予企业机器学习能力,采取主动的安全方法对于持续成功变得不可或缺。你现在已经到达了这个部分的结尾和本章的结尾。接下来,看看你所学内容的总结。
摘要
在本章中,你深入探讨了使用 Amazon SageMaker 部署机器学习模型,研究了影响部署选项的因素。你分析了现实世界场景,并尝试了针对各种用例的动手解决方案和代码片段。你强调了 SageMaker 部署与 AWS Auto Scaling 的至关重要的集成,根据工作负载的变化动态调整资源。你专注于保护 SageMaker 应用程序,提出了如 VPC 端点、IAM 角色和加密实践等实用策略。参考 AWS 文档以澄清任何疑问也是最佳选择。始终重要的是以经济高效的方式设计解决方案,因此探索以经济高效的方式使用这些服务同样重要,如同构建解决方案一样。
考试准备练习 - 章节复习问题
除了对关键概念有扎实的理解外,能够在时间压力下快速思考是一项帮助你通过认证考试的关键技能。这就是为什么在学习的早期阶段就培养这些技能至关重要。
章节复习题旨在随着您学习并复习每一章的内容,逐步提高您的应试技巧,同时检查您对章节中关键概念的理解。您可以在每一章的末尾找到这些复习题。
如何访问这些资源
要了解如何访问这些资源,请转到名为第十一章的章节,访问在线练习资源。
要打开本章的章节复习题,请执行以下步骤:
-
点击链接 –
packt.link/MLSC01E2_CH10。或者,您可以扫描以下二维码(图 10.6):

图 10.6 – 为登录用户打开章节复习题的二维码
- 登录后,您将看到一个类似于图 10.7所示的页面:

图 10.7 – 第十章的章节复习题
- 准备好后,开始以下练习,多次重新尝试测验。
考试准备练习
对于前三次尝试,不必担心时间限制。
尝试 1
第一次尝试,目标至少达到40%。查看您答错的答案,并再次阅读章节中相关的部分,以填补您的学习差距。
尝试 2
第二次尝试,目标至少达到60%。查看您答错的答案,并再次阅读章节中相关的部分,以填补任何剩余的学习差距。
尝试 3
第三次尝试,目标至少达到75%。一旦得分达到 75%或更高,您就开始练习计时。
小贴士
您可能需要超过三次尝试才能达到 75%。这没关系。只需复习章节中的相关部分,直到达到目标。
正在练习计时
目标:您的目标是保持分数不变,同时尽可能快速地回答这些问题。以下是如何进行下一次尝试的示例:
| 尝试 | 分数 | 用时 |
|---|---|---|
| 尝试 5 | 77% | 21 分钟 30 秒 |
| 尝试 6 | 78% | 18 分钟 34 秒 |
| 尝试 7 | 76% | 14 分钟 44 秒 |
表 10.1 – 在线平台上的样本时间练习
注意
上表中显示的时间限制只是示例。根据网站上的测验时间限制,为每次尝试设定自己的时间限制。
每次新的尝试,您的分数应保持在75%以上,而完成所需的时间“应减少”。重复尝试,直到您对时间压力有信心为止。
第十一章:访问在线实践资源
您的 AWS Certified Machine Learning - Specialty (MLS-C01) 认证指南 第二版附带了免费的在线实践资源。使用这些资源,通过在配套网站上尝试练习题来进一步提高您的考试准备。该网站用户友好,可以通过移动设备、桌面和平板电脑访问。它还包括交互式计时器,以提供类似考试体验。
如何访问这些资源
根据您的购买来源,以下是您如何开始访问这些资源的方法。
从 Packt Store (packtpub.com) 购买
如果您是从 Packt Store (packtpub.com) 购买了电子书或印刷版,请前往 packt.link/mlsc01practice。在那里,使用您创建或用于购买书籍的相同 Packt 账户登录。
Packt+ 订阅
如果您是 Packt+ 订阅者,您可以前往相同的链接 (packt.link/mlsc01practice),使用您的 Packt ID 登录,并开始使用这些资源。只要您的订阅处于活动状态,您就可以访问它们。
如果您在访问免费资源时遇到任何问题,请联系我们 customercare@packt.com。
从 Amazon 和其他来源购买
如果您是从上述提到的其他来源(如 Amazon)购买的,您需要先通过输入本节提供的唯一注册代码来解锁资源。解锁过程不到 10 分钟,可以在任何设备上完成,并且只需进行一次。按照以下五个简单步骤完成此过程:
第 1 步
打开链接 packt.link/mlsc01unlock 或扫描以下 二维码 (图 11.1):

图 11.1 – 解锁此书免费在线内容的二维码
任意一个链接都会引导您到如下页面,如图 11.2* 所示:

图 11.2 – 在线实践资源的解锁页面
第 2 步
如果您已经有 Packt 账户,请选择选项 是的,我有一个现有的 Packt 账户。如果没有,请选择选项 没有 Packt 账户。
如果您没有 Packt 账户,您将在下一页被提示创建一个新账户。这是免费的,并且创建只需要一分钟。
选择其中一个选项后,点击 继续。
第 3 步
在您创建账户或登录现有账户后,您将被引导到如下页面,如图 11.3* 所示。
记下您的唯一解锁代码:
MJM8028
在标记为“输入唯一代码”的文本框中输入或复制此代码:

图 11.3 – 输入您的唯一注册代码以解锁资源
故障排除技巧
在创建账户后,如果您的连接断开或您意外关闭了页面,您可以重新打开 图 11.2 中显示的页面,并选择 是的,我有一个现有账户。然后,使用您在关闭页面之前创建的账户登录。您将被重定向到 图 11.3 中显示的屏幕。
步骤 4
注意
您可以选择订阅有关功能更新和我们的其他认证书籍优惠的电子邮件。我们不会发送垃圾邮件,并且您可以在任何时候轻松退订。
点击 请求访问。
步骤 5
如果您输入的代码正确,您将看到一个按钮,上面写着 打开实践资源,如图 图 11.4 所示:

图 11.4 – 解锁成功后出现的页面
点击 打开实践资源 链接以开始使用您的免费在线内容。您将被重定向到 图 11.5 中显示的仪表盘:

图 11.5 – MLS-C01 实践资源仪表盘页面
收藏此链接
现在您已经解锁了资源,您可以通过访问 packt.link/mlsc01practice 或扫描 图 11.6 中提供的以下二维码来随时返回它们:

图 11.6 – 收藏实践资源网站二维码
故障排除技巧
如果您在解锁时遇到问题,您可以采取以下三个措施:
-
仔细检查您的唯一代码。我们书籍中的所有唯一代码都是区分大小写的,并且您的代码需要与 步骤 3 中显示的完全一致。
-
如果这还不行,请使用页面右上角的位置的
报告问题按钮。 -
如果您根本无法打开解锁页面,请写信给 customercare@packt.com 并提及书籍名称。
实践资源 – 快速浏览
本书将为您提供通过考试所需的所有知识。虽然学习关键概念很重要,但如果您将书中所学应用到实践中并练习,您通过考试的机会将大大提高。这就是在线实践资源的作用所在。通过互动模拟考试、闪卡和考试技巧,您可以在路上练习书中所学的一切。以下是您将获得的内容快速浏览。
清新、简单的认证实践体验
您将获得一个干净、简单的用户界面,它适用于所有现代设备,包括您的手机和平板电脑。只要您有正常的工作互联网连接,所有功能都适用于所有设备。从 仪表盘 (图 11.7),您只需点击一下即可访问本书附带的所有实践资源。如果您想回到书中,您也可以从这里做到:

图 11.7 – 桌面设备上的仪表板界面
练习问题
测验界面(图 11.8)旨在帮助你专注于问题,而不受任何杂乱信息的干扰。
你可以快速在多个问题之间导航,如果你不知道答案,可以跳过一个问题。界面还包括一个实时计时器,如果你时间用完,它会自动提交你的测验。
如果你想要直接跳转到结果页面查看所有答案,请点击“结束测验”。

图 11.8 – 桌面设备上的练习问题界面
不论是乘坐火车上班时只带手机,还是周末下午在沙发上用平板电脑,只要设备连接到互联网,测验界面在所有设备上都能正常工作。
图 11.9 展示了在移动设备上界面的截图:

图 11.9 – 移动设备上的测验界面
闪卡
闪卡旨在帮助你记住关键概念。以下是充分利用它们的技巧:
-
我们已经将所有闪卡组织成堆。想象这些就像你手中的实际卡片堆。
-
你从一整叠卡片开始。
-
当你打开一张卡片时,花几分钟时间回忆答案。
-
点击卡片上的任何位置以显示答案(图 11.10)。
-
多次翻动卡片,直到完全记住卡片。
-
一旦你觉得你已经记住了,点击卡片右上角的“标记为已记住”按钮。通过点击“下一步”继续到下一张卡片。
-
当你移动到卡片堆中的其他卡片时,重复此过程。
你可能一次无法记住所有卡片。这就是为什么当你下次打开卡片堆时,你只会看到你尚未记住的卡片。
你的目标是记完这一堆卡片,直到卡片堆为空。

图 11.10 – 闪卡界面
考试技巧
考试技巧(见 图 11.11)旨在帮助你准备好考试。从你开始准备之旅到考试当天,这些技巧被组织起来,以便你可以一次性复习所有内容。如果你在准备过程中发现某个考试技巧很有用,请确保将其标记为有用,以便其他读者可以从你的见解和经验中受益。

图 11.11 – 考试技巧界面
章节复习问题
您可以在每个章节的末尾找到章节复习问题的链接,就在总结部分之后。这些问题的设计是为了帮助您在进入下一章之前巩固本章的学习内容。每个章节都会有一个基准分数。目标是在开始下一章之前匹配或超过这个分数。在章节复习问题页面,您会找到一个章节的摘要,以便快速参考,如图图 11.12所示:

图 11.12 – 章节复习问题页面
分享反馈
如果您在平台、书籍或任何实践材料中发现任何问题,您可以从任何页面点击分享反馈按钮并联系我们。如果您有任何改进建议,也可以分享。
返回书籍
为了方便在书籍和实践资源之间切换,我们添加了一个链接,可以带您回到书籍页面(图 11.13)。点击它即可在 Packt 的在线阅读器中打开您的书籍。您的阅读位置会同步,这样您就可以直接跳转到上次关闭书籍时离开的地方。

图 11.13 – 从仪表板跳回书籍
注意
网站的一些元素可能会随着时间的推移而改变,因此它们可能看起来与本书中的截图不同。











浙公网安备 33010602011771号