机器学习解决方案架构手册第二版-一-

76 阅读1小时+

机器学习解决方案架构手册第二版(一)

原文:annas-archive.org/md5/0af95f3eb3657d22b97e00830e661a6d

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

随着人工智能(AI)在各个行业的持续发展,熟练的机器学习ML)解决方案架构师的需求正在上升。这些专业人士在将业务需求与 ML 解决方案相结合、构建解决业务和技术挑战的 ML 技术平台方面发挥着关键作用。本书旨在使个人具备对业务用例、ML 算法、系统架构模式、ML 工具、AI 风险管理、企业 AI 采用策略以及新兴的生成式 AI 领域的全面理解。

完成本书后,您将具备对 AI/ML 和生成式 AI 主题的全面理解,包括业务用例、科学原理、技术基础、架构考虑、风险管理、运营方面以及企业采用之路。此外,您将获得使用各种开源和 AWS 技术的实际技术能力,使您能够有效地构建和部署前沿的 AI/ML 和生成式 AI 解决方案。这种全面的知识和实际技能将使您能够阐述并解决这些颠覆性技术带来的多方面挑战和机遇。

这本书面向谁

本书旨在为两个主要受众群体服务:寻求指导和实践学习材料以成为 ML 解决方案架构师的开发人员和云架构师,以及寻求更广泛了解行业 ML 用例、企业数据和 ML 架构模式、数据管理、ML 工具、ML 治理以及高级 ML 工程技术的经验丰富的 ML 架构实践者和数据科学家。本书还可以帮助那些希望了解数据管理和云系统架构如何融入整体 ML 平台架构的数据工程师和云系统管理员。风险专业人士、AI 产品经理和技术决策者也将从 AI 风险管理、商业 AI 用例以及 ML 成熟度旅程和最佳实践等主题中受益。

本书假设您具备一些 Python 编程知识,并且熟悉 AWS 服务。一些章节是为 ML 初学者设计的,以学习核心 ML 基础,它们可能与经验丰富的 ML 实践者的现有知识重叠。

这本书涵盖的内容

第一章使用 ML 解决方案架构导航 ML 生命周期,介绍了 ML 解决方案架构功能,涵盖了其基础和范围。

第二章探索 ML 商业用例,讨论了 AI/ML 在金融服务、医疗保健、媒体娱乐、汽车、制造和零售等各个行业的实际应用。

第三章探索 ML 算法,介绍了常见的 ML 和深度学习算法,用于分类、回归、聚类、时间序列、推荐、计算机视觉、自然语言处理和生成式 AI 任务。您将获得在本地机器上设置 Jupyter 服务器和构建 ML 模型的实际操作经验。

第四章ML 数据管理,讨论了 ML 数据管理的关键主题,详细说明了如何利用一系列 AWS 服务构建健壮的数据管理架构。您将获得使用 AWS 服务构建 ML 数据管理管道的实际操作技能。

第五章探索开源 ML 库,涵盖了 scikit-learn、Spark ML、PyTorch 和 TensorFlow 的核心功能,以及如何使用这些 ML 库进行数据准备、模型训练和模型服务。您将练习使用 TensorFlow 和 PyTorch 构建深度学习模型。

第六章Kubernetes 容器编排基础设施管理,介绍了容器、Kubernetes 概念、Kubernetes 网络和 Kubernetes 安全。Kubernetes 是构建开源 ML 解决方案的核心开源基础设施。您还将练习在 AWS EKS 上设置 Kubernetes 平台并在 Kubernetes 中部署 ML 工作负载。

第七章开源 ML 平台,讨论了各种开源 ML 平台技术的核心概念和技术细节,如 Kubeflow、MLflow、AirFlow 和 Seldon Core。本章还涵盖了如何使用这些技术构建数据科学环境和 ML 自动化管道。

第八章使用 AWS ML 服务构建数据科学环境,介绍了用于构建数据科学环境的各种 AWS 托管服务,包括 Amazon SageMaker、Amazon ECR 和 Amazon CodeCommit。您还将通过这些服务获得实际操作经验,以配置用于实验和模型训练的数据科学环境。

第九章使用 AWS ML 服务设计企业 ML 架构,讨论了企业 ML 平台的核心需求,讨论了在 AWS 上构建企业 ML 平台的架构模式和最佳实践,并深入探讨了 SageMaker 和其他 AWS 服务的各种核心 ML 能力。

第十章高级 ML 工程,深入探讨了高级 ML 工程方面,如分布式模型训练和低延迟模型服务,这对于满足大规模模型训练和高性能服务需求至关重要。您还将通过使用 SageMaker 训练集群进行分布式数据并行模型训练获得实际操作经验。

第十一章使用 AWS AI 服务构建 ML 解决方案,将介绍 AWS AI 服务以及这些服务可以帮助解决哪些类型的问题,而无需从头开始构建 ML 模型。您将了解一些关键 AI 服务的核心功能以及它们在构建 ML 驱动的业务应用中的利用方式。

第十二章AI 风险管理,探讨了 AI 风险管理原则、框架和风险及缓解措施,全面覆盖了 AI 风险场景、指导原则、框架和风险缓解考虑因素,并阐述了机器学习平台如何通过文档、模型清单维护和监控流程来促进治理。

第十三章偏差、可解释性、隐私和对抗性攻击,深入探讨了各种风险的技术方面,深入解释了偏差检测技术、模型可解释性方法、隐私保护方法,以及对抗性攻击场景和相应的缓解策略。

第十四章规划您的机器学习之旅路线,概述了采用阶段并提出了相应的成熟度模型,旨在促进机器学习之旅的进展。此外,它还讨论了在整个过程中遇到障碍的关键考虑因素。

第十五章导航生成式 AI 项目生命周期,讨论了生成式 AI 的进步和经济效益,生成式 AI 在各种行业中的采用趋势,并指导读者了解生成式 AI 项目的各个阶段,从构思到部署,探索各种生成式 AI 技术,以及沿途的限制和挑战。

第十六章设计和实现生成式 AI 平台和解决方案,探讨了生成式 AI 平台的架构、检索增强生成RAG)应用架构和最佳实践,生成式 AI 生产部署的考虑因素,以及跨不同行业用例的生成式 AI 驱动的实际业务应用。

本章以对通用人工智能AGI)的讨论结束,以及研究社区在追求 AGI 过程中所采取的各种理论方法。

要充分利用本书

如果您使用的是本书的数字版,我们建议您亲自输入代码或从本书的 GitHub 仓库(下一节中提供链接)获取代码。这样做将有助于您避免与代码复制粘贴相关的任何潜在错误。

对于本书的硬件/软件要求,您只需要一台 Windows 或 Mac 机器,以及一个 AWS 账户。

下载示例代码文件

您可以从 GitHub 下载本书的示例代码文件,网址为github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/。如果代码有更新,它将在 GitHub 仓库中更新。

我们还有其他来自我们丰富图书和视频目录的代码包可供下载,网址为github.com/PacktPublishing/。请查看它们!

下载彩色图像

我们还提供了一份包含本书中使用的截图和图表的彩色图像 PDF 文件。您可以从这里下载:packt.link/gbp/9781805122500

使用的约定

本书使用了多种文本约定。

文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“将下载的WebStorm-10*.dmg磁盘映像文件作为系统中的另一个磁盘挂载。”

代码块如下设置:

import pandas as pd
churn_data = pd.read_csv("churn.csv")
churn_data.head() 

当我们希望您注意代码块中的特定部分时,相关的行或项目将以粗体显示:

# The following command calculates the various statistics
for the features.
**churn_data.describe()**
# The following command displays the histograms for the
different features.
# You can replace the column names to plot the histograms
for other features
**churn_data.hist([****'CreditScore'****,** **'Age'****,** **'Balance'****])**
# The following command calculate the correlations among
features
**churn_data.corr()** 

任何命令行输入或输出都应如下所示:

! pip3 install --upgrade tensorflow 

粗体:表示新术语、重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“基于深度学习的解决方案示例是亚马逊 Echo 虚拟助手。”

警告或重要提示如下所示。

小贴士和技巧如下所示。

联系我们

我们始终欢迎读者的反馈。

总体反馈:如果您对本书的任何方面有任何疑问,请通过电子邮件发送至customercare@packtpub.com,并在邮件主题中提及书名。

勘误:尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在本书中发现错误,我们将不胜感激,如果您能向我们报告,请访问www.packtpub.com/support/err…并填写表格。

盗版:如果您在互联网上发现任何形式的我们作品的非法副本,如果您能提供位置地址或网站名称,我们将不胜感激。请通过电子邮件发送至copyright@packt.com,并附上材料的链接。

如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com

分享您的想法

读完机器学习解决方案架构师手册,第二版后,我们很乐意听到您的想法!请点击此处直接进入此书的亚马逊评论页面并分享您的反馈。

你的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。

下载这本书的免费 PDF 副本

感谢您购买这本书!

你喜欢在旅途中阅读,但无法随身携带你的印刷书籍吗?

你的电子书购买是否与你的选择设备不兼容?

别担心,现在每购买一本 Packt 图书,你都可以免费获得该书的 DRM 免费 PDF 版本。

在任何地方、任何地点、任何设备上阅读。直接从你最喜欢的技术书籍中搜索、复制和粘贴代码到你的应用程序中。

优惠远不止于此,你还可以获得独家折扣、时事通讯和丰富的免费内容,每天直接发送到你的邮箱。

按照以下简单步骤获取好处:

  1. 扫描下面的二维码或访问以下链接:

图片

packt.link/free-ebook/9781805122500

  1. 提交你的购买证明。

  2. 就这样!我们将直接将免费 PDF 和其他好处发送到你的邮箱。

第一章:使用机器学习解决方案架构导航机器学习生命周期

人工智能(AI)和机器学习(ML)领域有着悠久的历史。在过去的 70 多年里,机器学习从 20 世纪 50 年代的棋类游戏计算机程序发展到能够击败人类围棋世界冠军的高级人工智能。最近,生成式人工智能GenAI)技术如 ChatGPT 正在席卷行业,在企业和消费者中引发了巨大的兴趣,并承诺为药物发现、新媒体内容、财务报告分析和消费者产品设计等业务带来新的转型方式。在这个过程中,机器学习的技术基础设施也从用于小型实验和模型的单一机器/服务器发展到能够训练、管理和部署数万个机器学习模型的复杂端到端机器学习平台。人工智能/机器学习领域的超高速增长导致了众多新职业的诞生,如MLOps 工程AI/ML 产品管理ML 软件工程AI 风险管理AI 战略家,这些职业遍布各个行业。

机器学习解决方案架构ML solutions architecture)是另一个相对较新的学科,随着机器学习项目在业务影响科学复杂性技术格局方面的日益复杂,它在完整的端到端机器学习生命周期中扮演着越来越关键的角色。

本章将帮助您了解机器学习解决方案架构在完整数据科学生命周期中的位置。我们将讨论将机器学习项目从构思阶段到生产阶段所需的不同步骤,以及组织在实施机器学习项目时面临的各种挑战,例如用例识别、数据质量问题以及机器学习人才的短缺。最后,我们将简要讨论机器学习解决方案架构的核心关注领域,包括系统架构、工作流程自动化以及安全和合规性。

在本章中,我们将涵盖以下主要主题:

  • 机器学习与传统软件的区别

  • 机器学习生命周期及其关键挑战

  • 什么是机器学习解决方案架构,它在整体生命周期中处于什么位置?

完成本章后,您将了解机器学习解决方案架构师的角色,以及您需要关注哪些业务和技术领域来支持端到端的机器学习项目。本章的目的是为那些在探索该领域的早期阶段的人提供一个机器学习生命周期的基本介绍。经验丰富的机器学习从业者可能希望跳过这个基础概述,直接进入更高级的内容。

更高级的部分从第四章开始;然而,许多技术实践者可能会发现第二章很有帮助,因为许多技术实践者通常需要更多的业务理解,了解机器学习可以在不同的业务和工作流程中应用。此外,第三章可能对某些实践者有益,因为它为那些对这一主题新手提供了机器学习算法的介绍,也可以作为那些定期实践这些概念的复习材料。

机器学习与传统软件

在我开始在人工智能/机器学习领域工作之前,我花了多年时间为大型金融服务机构构建计算机软件平台。我处理的一些业务问题具有复杂的规则,例如为投资银行交易识别可比分析的公司或为来自不同数据提供者的所有不同公司的标识符创建主数据库。我们必须在数据库存储过程和应用服务器后端中实现硬编码的规则来解决这些问题。我们经常争论某些规则是否适合我们试图解决的商业问题。

随着规则的改变,我们必须重新实现规则并确保这些变化不会破坏任何东西。为了测试新版本或更改,我们经常向人类专家反馈,以彻底测试和验证在生产发布之前实施的所有业务逻辑。这是一个非常耗时且容易出错的过程,需要大量的工程工作,对文档化的规范进行测试,以及每次引入新规则或现有规则需要更改时进行严格的变更管理。我们经常向用户反馈生产中的业务逻辑问题,当生产中出现问题时,我们有时不得不打开源代码来排查故障或解释其工作原理的逻辑。我记得我经常问自己是否有更好的方法来做这件事。

在我开始从事人工智能/机器学习领域的工作后,我开始使用机器学习技术解决许多类似挑战。有了机器学习,我无需提出复杂的规则,这些规则通常需要深入的数据和领域专业知识来创建或维护决策所需的复杂规则。相反,我专注于收集高质量的数据,并使用机器学习算法直接从数据中学习规则和模式。这种新的方法消除了创建新规则(例如,对深度领域专业知识的要求,或避免人类偏见)以及维护现有规则的许多挑战性方面。在产品发布前验证模型,我们可以检查模型性能指标,如准确率。虽然这仍然需要数据科学专业知识来解释模型指标与业务问题和数据集的性质之间的关系,但它不需要对所有不同场景进行详尽的手动测试。当一个模型部署到生产环境中时,我们会通过监控生产数据与用于模型训练的数据之间的任何重大变化来监控模型是否按预期执行。我们会收集新的未见数据和生产数据的标签,并定期测试模型性能,以确保其预测准确性在面对新的、以前未见的生产数据时保持稳健。为了解释模型为何以某种方式做出决策,我们不需要打开源代码来重新检查硬编码的逻辑。相反,我们会依赖机器学习技术来帮助解释不同输入特征的相对重要性,以了解哪些因素在机器学习模型的决策中最为关键。

下一个图显示了开发软件和训练机器学习模型之间过程差异的图形视图:

图 1.1:机器学习和计算机软件

现在你已经了解了机器学习与传统软件之间的区别,是时候深入了解机器学习生命周期的不同阶段了。

机器学习生命周期

我早期参与的一个机器学习项目是为一家主要联赛品牌解决的一个既迷人又令人畏惧的体育预测分析问题。我被提供了一份预测分析结果的清单,以便思考是否有机器学习解决方案可以用于这些问题。我对这项运动只是个业余观众;我对要生成的分析一无所知,对比赛规则的细节也缺乏了解。我提供了一些样本数据,但不知道如何处理它们。

我首先着手的工作是对这项运动本身的沉浸式体验。我深入研究了游戏的复杂性,学习了构成每场比赛和表演的不同球员位置和事件。只有在掌握了新发现的领域知识之后,数据才开始变得有意义。与利益相关者一起,我们评估了不同分析结果的影响,并根据我们所拥有的数据评估了建模的可行性。在明确理解数据的基础上,我们提出了几个最具商业影响的最顶级机器学习分析,并集中关注它们。我们还决定如何将它们整合到现有的业务工作流程中,以及如何衡量它们的影响。

此后,我进一步深入数据,以确定可用的信息和缺乏的信息。原始数据集包含大量无关的数据点,需要删除,而相关的数据点需要转换,以提供模型训练的最强信号。我根据考虑的一些机器学习算法处理和准备数据集,并进行了实验以确定最佳方法。我缺少一个跟踪不同实验结果的工具,因此我不得不手动记录我所做的一切。经过一些初步的实验轮次后,很明显,现有的数据不足以训练一个高性能模型。因此,我决定构建一个定制的深度学习模型,以整合不同模态的数据,因为数据点具有时间依赖性,并且建模需要额外的空间信息。数据所有者能够提供我需要的额外数据集,经过更多使用定制算法的实验以及大量的数据准备和特征工程,我最终训练了一个满足商业目标的模型。

在完成模型后,另一个艰巨的挑战开始了——在生产环境中部署和实施模型,并将其整合到现有的业务工作流程和系统架构中。我们参与了多次架构和工程讨论,最终为模型构建了一个部署架构。

如您从我的个人经验中可以看到,从商业想法到机器学习生产部署的旅程涉及许多步骤。一个典型的机器学习项目生命周期遵循一个正式的结构,包括几个基本阶段,如业务理解、数据获取和理解、数据准备、模型构建、模型评估和模型部署。由于生命周期的一个大组成部分是对不同数据集、特征和算法的实验,整个过程高度迭代。此外,必须注意的是,没有成功的保证。数据可用性和质量、特征工程技术(使用领域知识从原始数据中提取有用特征的过程)、学习算法的能力等因素都可能影响最终结果。

图片

图 1.2:机器学习生命周期

前面的图展示了机器学习项目中的关键步骤,在随后的章节中,我们将更详细地探讨这些步骤。

业务问题理解和机器学习问题界定

生命周期中的第一个阶段是业务理解。这个阶段涉及理解业务目标和定义可以衡量项目成功的业务指标。例如,以下是一些业务目标的例子:

  • 降低操作流程的成本,例如文档处理。

  • 缓解业务或运营风险,例如欺诈和合规性。

  • 产品或服务收入的提升,例如更好的目标营销、为更好的决策生成新的见解以及提高客户满意度。

为了衡量成功,您可以使用特定的业务指标,例如在业务流程中减少的小时数、检测到的真实正例欺诈数量的增加、目标营销的转化率提升或客户流失率减少的数量。这是确保有足够的理由进行机器学习项目以及项目结果可以成功衡量的关键步骤。

在您定义了业务目标和业务指标之后,您需要评估是否存在针对业务问题的机器学习解决方案。虽然机器学习应用范围广泛,但它并不总是每个业务问题的最佳解决方案。

数据理解和数据准备

“数据是新石油”的说法在机器学习中尤其正确。没有所需的数据,您就无法继续进行机器学习项目。这就是为什么在机器学习生命周期中的下一步是数据获取理解准备

基于业务问题和机器学习(ML)方法,您需要收集和理解现有数据,以确定您是否拥有解决机器学习问题所需的数据和数据量。例如,假设要解决的商业问题是信用卡欺诈检测。在这种情况下,您将需要诸如历史信用卡交易数据、客户人口统计数据、账户数据、设备使用数据和网络访问数据等数据集。然后需要进行详细的数据分析,以确定数据集的特征和质量是否足以满足建模任务。您还需要决定数据是否需要标注,例如标注为欺诈非欺诈。在此步骤中,根据数据质量,可能需要进行大量的数据处理和清洗工作,以准备和清理数据,并生成用于模型训练和模型评估的数据集。

模型训练和评估

使用建立的训练和验证数据集,数据科学家必须运行多个实验,使用不同的机器学习算法和数据集特征进行特征选择和模型开发。这是一个高度迭代的过程,可能需要多次运行数据处理和模型开发,以找到最佳模型性能的正确算法和数据集组合。除了模型性能外,还需要考虑数据偏差和模型可解释性等因素,以确保符合内部或监管要求。

在部署到生产之前,必须使用相关的技术指标来验证模型质量,例如准确率得分。这通常是通过使用保留数据集,也称为测试数据集,来衡量模型在未见数据上的表现。了解哪些指标适合模型验证非常重要,因为它们会根据机器学习问题和所使用的数据集而变化。例如,如果文档类型数量相对平衡,模型准确率将是一个适合文档分类用例的验证指标。然而,对于欺诈检测用例,模型准确率并不是一个好的评估模型性能的指标——这是因为欺诈的数量很少,即使模型始终预测非欺诈,模型准确率仍然可能非常高。

模型部署

模型经过充分训练和验证,达到预期的性能指标后,可以部署到生产环境和业务流程中。这里有两个主要的部署概念。第一个涉及将模型本身部署供客户端应用程序使用以生成预测。第二个概念是将这个预测工作流程集成到业务工作流程应用程序中。例如,部署信用欺诈模型可能是在 API 后面托管模型以进行实时预测,或者作为一个可以动态加载以支持批量预测的包。此外,这个预测工作流程还需要集成到业务工作流程应用程序中,用于欺诈检测,这可能包括实时交易的欺诈检测、基于预测输出的决策自动化以及详细的欺诈分析。

模型监控

机器学习生命周期并不随着模型的部署而结束。与软件不同,软件的行为高度确定,因为开发者明确地编写了其逻辑,机器学习模型在生产中的行为可能与模型训练和验证中的行为不同。这可能是由于生产数据特征、数据分布的变化,或者请求数据的潜在操纵所导致的。因此,模型监控是部署后检测模型性能下降(即模型漂移)或生产环境中数据集分布变化(即数据漂移)的重要步骤。

业务指标跟踪

实际业务影响应作为一个持续的过程进行跟踪和衡量,以确保模型能够带来预期的业务效益。这可能包括比较模型部署前后的业务指标,或者进行 A/B 测试,比较带有或不带有机器学习模型的流程之间的业务指标。如果模型没有带来预期的效益,应重新评估以寻找改进的机会。这也可能意味着将业务问题重新定义为一个不同的机器学习问题。例如,如果客户流失预测不能帮助提高客户满意度,那么可以考虑提供个性化的产品/服务来解决该问题。

机器学习挑战

在过去的几年里,我使用机器学习解决方案解决了许多现实世界的问题,并在机器学习采用过程中遇到了不同行业面临的不同挑战。

当我在机器学习项目上工作时,经常遇到相同的问题:我们有很多数据——你能帮助我们找出我们可以使用机器学习生成哪些见解吗?我把有这种问题公司称为有业务用例挑战的公司。无法识别机器学习的业务用例是许多公司面临的一个非常大的障碍。如果没有正确识别的业务问题和其价值主张及效益,就很难启动一个机器学习项目。

在我与不同行业的不同公司的交流中,数据相关挑战成为了一个常见问题。这包括数据质量、数据清单、数据可访问性、数据治理和数据可用性。这个问题影响着数据贫乏和数据丰富的公司,并且常常因数据孤岛、数据安全和行业法规而加剧。

数据科学和机器学习人才短缺是许多公司向我反映的另一个主要挑战。一般来说,公司都在努力吸引和保留顶尖的机器学习人才,这是所有行业都面临的共同问题。随着机器学习平台变得更加复杂,机器学习项目的范围也在扩大,对其他机器学习相关功能的需求开始显现。如今,除了数据科学家之外,一个组织还需要机器学习产品管理、机器学习基础设施工程和机器学习运营管理的职能角色。

根据我的经验,我观察到,对基于机器学习的解决方案的文化接受度是广泛采用中的另一个重大挑战。有些人认为机器学习是对他们工作职能的威胁,他们对机器学习的知识缺乏使他们犹豫不决,不愿在业务工作流程中采用这些新方法。

机器学习解决方案架构的实践旨在帮助解决机器学习中的某些挑战。在下一节中,我们将探讨机器学习解决方案架构及其在机器学习生命周期中的作用。

机器学习解决方案架构

当我最初作为机器学习解决方案架构师与公司合作时,当时的局面与现在大不相同。重点是数据科学和建模,手头的问题范围较小。当时,大多数问题都可以使用简单的机器学习技术解决。数据集较小,所需的基础设施要求不高。这些公司机器学习项目的范围仅限于少数数据科学家或团队。作为当时的机器学习架构师,我主要需要具备扎实的数据科学技能和一般云计算架构知识来完成工作。

在最近几年,机器学习(ML)项目的格局变得更加复杂和多元化,需要公司中更广泛的职能和角色参与。我的参与范围已经扩展到与商业高管讨论机器学习策略和组织设计,以促进他们在整个企业中广泛采用人工智能/机器学习。我被指派设计更复杂的机器学习平台,利用各种技术来满足大型企业的严格安全和合规要求。机器学习工作流程编排和运营已经成为越来越重要的讨论话题,越来越多的公司正在寻求使用大量训练数据来训练大型机器学习模型。一些公司训练和部署的机器学习模型数量在短短几年内从几十个激增至数万个。此外,复杂且对安全性敏感的客户寻求关于机器学习隐私、模型可解释性和数据与模型偏差等主题的指导。作为一名机器学习解决方案架构师,我注意到在这个角色中取得成功所需的技能和知识已经发生了显著变化。

在商业、数据、科学和技术景观的复杂性中导航可能是一项艰巨的任务。作为一名机器学习解决方案架构师,我亲眼见证了公司在将这些各个部分整合在一起时面临的挑战。在我看来,机器学习解决方案架构是一个至关重要的学科,它作为连接机器学习项目不同组件的桥梁。凭借我在与各种规模的公司和不同行业合作多年的经验,我相信机器学习解决方案架构师在识别业务需求、开发解决这些需求的机器学习解决方案以及设计运行这些解决方案所需的技术平台方面发挥着关键作用。通过与各种商业和技术合作伙伴合作,机器学习解决方案架构师可以帮助公司释放数据的全部潜力,并从他们的机器学习项目中获得切实的收益。

下图展示了机器学习解决方案架构所涵盖的核心功能区域:

图片

图 1.3:机器学习解决方案架构覆盖范围

在接下来的章节中,我们将更详细地探讨这些领域:

  • 商业理解:使用人工智能和机器学习理解商业问题和进行转型。

  • 机器学习技术的识别和验证:识别和验证用于解决特定机器学习问题的机器学习技术。

  • 机器学习技术平台的系统架构:机器学习技术平台的系统架构设计和实施。

  • MLOps:机器学习平台自动化技术设计。

  • 安全和合规:机器学习平台和机器学习模型的安全、合规和审计考虑。

那么,让我们深入探讨吧!

商业理解和机器学习转型

业务流程分析的目标是识别流程中的低效率,并确定 ML 是否可以应用于帮助消除痛点、提高效率,甚至创造新的收入机会。

想象一下:你被分配去改进一个呼叫中心的运营。你知道存在需要解决的低效率问题,但你不确定从哪里开始。这就是业务流程分析发挥作用的地方。通过分析呼叫中心的流程,你可以识别出痛点,例如客户等待时间过长、代理之间的知识差距以及无法从通话录音中提取客户洞察。一旦你确定了这些问题,你就可以确定哪些数据可用以及哪些业务指标需要改进。这就是机器学习(ML)的用武之地。你可以使用 ML 来创建虚拟助手以处理常见的客户咨询,将音频录音转录成文本以便进行分析,以及检测客户意图以实现产品的交叉销售和升级销售。但有时,你需要修改业务流程以纳入 ML 解决方案。例如,如果你想使用通话录音分析来为交叉销售或升级销售产品生成洞察,但还没有建立处理这些洞察的既定流程,你可能需要引入自动化的目标市场营销流程或销售团队的主动外联流程。

ML 技术的识别和验证

一旦你列出了一系列 ML 选项,下一步就是确定 ML 方法背后的假设是否有效。这可能涉及进行简单的概念验证POC)建模来验证可用数据集和建模方法,或使用预构建的 AI 服务进行技术 POC,或者测试 ML 框架。例如,你可能想测试使用现有的文本转录服务从音频文件中进行文本转录的可行性,或者从营销活动构建一个新产品转换的客户倾向模型。

值得注意的是,ML 解决方案架构并不专注于开发新的机器算法,这项工作最适合应用数据科学家或研究数据科学家。相反,ML 解决方案架构专注于识别和应用 ML 算法来解决一系列 ML 问题,如预测分析、计算机视觉或自然语言处理。此外,任何建模任务的目标不是构建生产质量的模型,而是验证方法,以便全职应用数据科学家进行进一步的实验。

系统架构设计和实施

ML 解决方案架构师角色最重要的方面是 ML 平台的技术架构设计。该平台需要提供技术能力以支持 ML 周期的不同阶段和角色,如数据科学家和运维工程师。具体来说,一个 ML 平台需要具备以下核心功能:

  • 数据探索和实验:数据科学家使用机器学习平台进行数据探索、实验、模型构建和模型评估。机器学习平台需要提供数据科学开发工具,用于模型编写和实验,数据整理工具用于数据探索和整理,源代码控制用于代码管理,以及软件包仓库用于库包管理。

  • 数据管理和大规模数据处理:数据科学家或数据工程师需要具备技术能力,以摄取、存储、访问和处理大量数据,用于清洗、转换和特征工程。

  • 模型训练基础设施管理:机器学习平台需要为不同类型的建模训练提供模型训练基础设施,包括不同的计算资源、存储和网络配置。它还需要支持不同类型的机器学习库或框架,例如scikit-learnTensorFlowPyTorch

  • 模型托管/托管:机器学习平台需要提供技术能力,以托管和提供模型进行预测生成,用于实时、批量或两者兼而有之。

  • 模型管理:训练好的机器学习模型需要被管理和跟踪,以便于访问和查找,并包含相关元数据。

  • 特征管理:需要管理和提供常见且可重用的特征,用于模型训练和模型托管。

机器学习平台工作流程自动化

机器学习平台设计的一个关键方面是工作流程自动化持续集成/持续部署CI/CD),也称为 MLOps。机器学习是一个多步骤的工作流程——它需要自动化,这包括数据处理、模型训练、模型验证和模型托管。基础设施提供自动化和自助服务是自动化设计中的另一个方面。工作流程自动化的关键组件包括以下内容:

  • 管道设计和管理:能够为各种任务(如模型训练和模型托管)创建不同的自动化管道。

  • 管道执行和监控:能够运行不同的管道并监控整个管道以及机器学习周期中每个步骤(如数据处理和模型训练)的执行状态。

  • 模型监控配置:能够监控生产中的模型,针对各种指标,如数据漂移(生产中使用的数据的分布与用于模型训练的数据分布不同)、模型漂移(与训练结果相比,模型在生产中的性能下降)和偏差检测(机器学习模型复制或放大对某些个人的偏见)。

安全和合规性

机器学习解决方案架构的另一个重要方面是在敏感或企业环境中考虑安全和合规性:

  • 身份验证和授权:机器学习平台需要提供身份验证和授权机制来管理对平台以及不同资源和服务的访问。

  • 网络安全:机器学习平台需要配置不同的网络安全控制,如防火墙和 IP 地址访问允许列表,以防止未经授权的访问。

  • 数据加密:对于对安全性敏感的组织来说,数据加密是机器学习平台设计考虑的另一个重要方面。

  • 审计和合规性:审计和合规性工作人员需要信息来帮助他们理解如果需要的话,预测模型是如何做出决策的,从数据到模型实体的模型谱系,以及数据和中表现出的任何偏差。机器学习平台需要提供模型可解释性、偏差检测以及跨各种数据存储和服务组件的模型可追溯性等功能。

各个行业的技术提供商已经建立了最佳实践来指导机器学习基础设施的设计和实施,这是机器学习解决方案架构师实践的一部分。例如,亚马逊网络服务创建了机器学习透镜,以提供在关键领域(如运营卓越、安全性、可靠性、性能、成本优化和可持续性)的架构最佳实践。遵循这些发布的指南可以帮助从业者实施稳健有效的机器学习解决方案。

摘要

在本章中,我分享了一些作为机器学习解决方案架构师的个人经验,并概述了机器学习生命周期中涉及的核心概念和组件。我们讨论了机器学习解决方案架构师角色在整个生命周期中的关键职责。本章旨在让您了解作为机器学习解决方案架构师有效工作所需的技术和商业领域。有了这些基础知识,您现在应该对这一角色的广度和其在成功交付机器学习解决方案中的核心作用有所认识。

在接下来的章节中,我们将深入探讨不同行业(如金融服务和媒体娱乐)的多种机器学习用例,以进一步了解机器学习的实际应用。

加入我们的 Discord 社区

加入我们社区的 Discord 空间,与作者和其他读者进行讨论:

packt.link/mlsah

二维码

第二章:探索机器学习商业应用案例

作为一名机器学习从业者,对我而言,深入理解不同行业对于与商业和技术领导者进行有效沟通至关重要。这并不令人惊讶,因为任何机器学习解决方案架构的最终目标都是利用科学技术解决方案解决实际商业问题。因此,机器学习解决方案架构的主要关注领域之一是广泛了解不同的商业领域、工作流程和相关数据。没有这种理解,将难以理解数据,并为商业问题设计和开发实用的机器学习解决方案。

在本章中,我们将探讨多个行业垂直领域的各种现实世界机器学习应用案例。我们将分析金融服务业和零售等行业面临的关键业务工作流程和挑战,以及机器学习技术如何帮助解决这些挑战。本章的目标不是让你成为任何特定行业或其机器学习应用和技术的专家,而是让你接触到商业环境和工作流程中的现实世界机器学习应用案例。阅读本章后,你将能够将类似的分析思维应用于自己的业务领域中的机器学习解决方案。你将获得识别和评估在您的流程、过程和目标中机器学习技术如何提供价值的视角。跨行业案例和场景旨在激发如何利用机器学习解决您独特的商业挑战的想法,并拓宽你对机器学习机会的思考。

具体来说,本章将涵盖以下内容:

  • 金融服务业的机器学习应用

  • 媒体和娱乐领域的机器学习应用

  • 医疗保健和生命科学领域的机器学习应用

  • 制造领域的机器学习应用

  • 零售领域的机器学习应用

  • 汽车行业的机器学习应用

如果你已经作为一名机器学习从业者拥有丰富的经验,并对您所在行业的应用案例和解决方案有深入的了解,并且你对了解其他行业不感兴趣,你可能希望跳过本章,直接进入下一章,在那里我们将介绍机器学习算法。

金融服务业的机器学习应用

金融服务行业FSI)始终处于技术创新的前沿,机器学习的采用也不例外。近年来,我们看到了各种机器学习解决方案在金融服务内部不同业务功能中的应用。例如,在资本市场,机器学习被用于前台、中台和后台,以辅助投资决策、交易优化、风险管理以及交易结算处理。在保险领域,公司正在使用机器学习简化承保、防止欺诈并自动化索赔管理。而在银行业,银行正在利用它来改善客户体验、打击欺诈并促进贷款审批决策。在接下来的章节中,我们将探讨金融服务内部的不同核心业务领域以及机器学习如何应用于克服一些这些业务挑战。

资本市场前台

在金融领域,前台是产生收入的业务领域,包括面向客户的角色,如证券销售、交易员、投资银行家和财务顾问。前台部门提供的产品和服务包括并购M&A)和 IPO 咨询、财富管理和交易金融资产,如股票(例如,股票)、固定收益(例如,债券)、商品(例如,石油)和货币产品。让我们考察前台区域的一些具体业务功能。

销售交易和研究

在销售交易中,一家公司的销售团队会监控投资新闻,例如收益报告或并购活动,以识别为机构客户提供投资机会。交易团队随后为客户执行交易,这被称为代理交易。此外,交易团队还可以为其公司执行交易,这被称为自营交易。由于交易团队经常处理大量证券,优化交易策略以在不过度推高价格的情况下以有利价格获得股票至关重要。

研究团队通过分析股票和固定收益资产并提供建议来支持销售和交易团队。算法交易是另一种交易类型,它使用计算机根据预定义的逻辑和市场条件自动执行交易。

下图说明了销售交易台的业务流程以及不同参与者如何互动以完成交易活动:

图 2.1 – 销售、交易和研究

图 2.1:销售、交易和研究

在销售交易和研究领域,专业人士在日常工作中面临几个核心挑战。这些挑战围绕着生成准确的市场洞察、做出明智的投资决策以及实现最优的交易执行。以下是一些这些挑战的例子:

  • 研究分析师面临紧迫的时间表以交付研究报告。

  • 收集和分析大量市场信息,以制定交易策略和做出交易决策。

  • 持续监控市场,以调整交易策略。

  • 在不推动市场上下波动的情况下,以理想的价格实现最优交易。

销售交易和研究为机器学习提供了众多机会。通过利用自然语言处理NLP)和日益增长的大型语言模型LLMs),可以从各种数据源中自动提取关键实体,如人员、事件、组织和地点,例如证券交易委员会SEC)的文件、新闻公告和收益电话会议记录。

自然语言处理(NLP)还可以通过分析大量新闻、研究报告和收益电话会议,发现实体之间的关系,评估市场对公司及其股票的情绪,从而为交易决策提供信息。由 LLMs 驱动的自然语言生成NLG)可以帮助进行叙事写作和报告生成,而计算机视觉已被用于从卫星图像等替代数据源中识别市场信号,以了解如零售客流量等商业模式。在交易中,机器学习模型可以筛选大量数据,以发现模式,从而为交易策略提供信息,例如对冲交易,使用公司基本面、交易模式和指标等技术指标。在交易执行过程中,机器学习模型可以帮助估计交易成本,并确定最优交易执行策略和路径,以最小化成本并优化利润。金融服务公司产生大量时间序列数据,如不同金融工具的价格,可用于发现市场信号和估计市场趋势。因此,机器学习已被应用于金融时间序列分类、预测金融工具和经济指标等用例。

投资银行

当公司、政府和机构需要资金来支持业务运营和增长时,他们会聘请投资银行家提供资本筹集服务(例如,股票或债券的出售)。以下图表说明了投资银行家和投资者之间的关系。除了资本筹集外,投资银行家还参与并购咨询,协助客户从开始到结束谈判和结构化并购交易。投资银行工作人员承担许多活动,如财务建模、业务估值、提案书生成和交易文件准备,以完成和执行投资银行交易。此外,他们还负责一般关系管理和业务发展管理活动。

图 2.2 – 投资银行工作流程

图 2.2:投资银行工作流程

投资银行工作流程在搜索和分析大量结构化(收益、现金流、估计)和非结构化数据(年报、文件、新闻和内部文件)方面提出了重大挑战。典型的初级银行家花费许多小时寻找可能包含有用信息的文件,并手动从文件中提取信息以准备提案书或进行财务建模。为了解决这个劳动密集型问题,投资银行一直在探索和采用机器学习解决方案。其中一个解决方案是使用自然语言处理(NLP)从大量 PDF 文档中自动提取结构化表格数据。具体来说,命名实体识别(NER)技术可以帮助从文档中自动提取实体。基于机器学习的阅读理解和问答技术可以帮助银行家使用自然人类问题快速准确地从大量文本中找到相关信息,而不是简单的文本字符串匹配。文档还可以通过机器学习技术自动标记元数据并进行分类,以改善文档管理和信息检索。此外,机器学习还可以帮助解决投资银行中的其他挑战,例如将来自不同数据源的公司标识符链接起来,以及解决公司名称的不同变体。

财富管理

财富管理(WM)业务涉及向客户提供建议,进行财富规划和结构化,以增长和保护客户的财富。与以投资咨询为重点的经纪公司不同,WM 公司还提供税务规划、财富保护和遗产规划,以满足客户更复杂的财务规划目标。WM 公司通过与客户沟通了解他们的生活目标和消费模式,为客户设计定制化的财务规划解决方案。然而,WM 公司在运营中面临各种挑战,例如:

  • WM 客户对他们的 WM 需求越来越要求全面和个性化的财务规划策略。

  • WM 客户越来越精通技术,许多人除了直接客户-顾问互动外,还要求新的互动渠道。

  • WM 顾问需要在保持相同个性化服务和规划的同时,覆盖越来越多的客户。

  • WM 顾问需要跟上市场趋势、多样化的客户需求和日益复杂的金融产品和服务组合,以满足客户需求。

WM 公司正在采用基于机器学习的解决方案,为客户提供更个性化的服务。通过分析客户的交易历史、投资组合详情、对话记录、投资偏好和人生目标,构建机器学习模型以推荐最合适的投资产品和服务。这些模型考虑客户接受提议的可能性以及如预期价值等业务指标,以建议下一步最佳行动。这使得财富管理公司能够为其客户提供定制化的财务规划解决方案。以下图表说明了下一步最佳行动方法的概念:

图 2.3 – 下一步最佳行动推荐

图 2.3:下一步最佳行动推荐

WM 公司也在越来越多地利用人工智能和机器学习来增强客户参与度和体验,自动化常规任务,并在客户互动期间为财务顾问(FAs)提供正确的知识。例如,公司正在构建虚拟助手,为客户提供个性化的答案并自动满足他们的请求。财务顾问正在配备基于人工智能的解决方案,可以将音频对话转录成文本以进行文本分析,评估客户的情绪,并提醒财务顾问潜在的客户流失。此外,正在采用智能搜索和问答技术,以便财务顾问在客户互动期间快速准确地找到相关信息。

资本市场后台运营

后台办公室是金融服务公司的支柱。虽然它可能不是面向客户的,但它处理着诸如交易结算、记录保存和合规监管等关键支持活动。因此,它是一个迅速采用机器学习的领域。凭借其带来的财务效益和成本节约,以及其提高合规性和内部控制的潜力,机器学习正在改变后台办公室。让我们探讨一些机器学习可以产生重大影响的业务流程。

净资产价值审查

提供共同基金和 ETF 的金融服务公司需要准确反映基金的值以用于交易和报告目的。他们使用净资产价值(NAV)计算,即实体的资产价值减去其负债,来表示基金的值。NAV 是投资者可以买卖基金的价格。每天,在市场关闭后,基金管理员必须以 100%的准确性计算 NAV 价格,这涉及五个关键步骤:

  1. 股票核对

  2. 反映任何公司行为

  3. 对工具定价

  4. 记账、计算和核对费用及利息累计,以及现金核对

  5. NAV/价格验证

下图展示了净资产价值审查流程:

图 2.4 – 净资产价值审查流程

图 2.4:净资产价值审查流程

第 5 步是最关键的,因为如果操作不当,基金管理员可能需要承担责任,这可能导致向投资者支付赔偿金。然而,使用固定阈值标记异常的传统方法往往会导致大量误报,浪费分析师的时间。由于调查和审查过程中涉及的大量数据,包括工具价格、费用、利息、资产、现金头寸和公司行动数据,因此需要高效和准确的方法。

NAV 验证步骤的主要目标是检测定价异常,这可以被视为一个异常检测挑战。为了识别潜在的定价不规则性并将它们标记为需要进一步人工调查,金融服务公司已实施了基于机器学习的异常检测解决方案。这种方法已显示出显著减少误报并节省了大量人工审查人员的时间。

交易后结算失败预测

前台执行交易后,必须完成几个交易后流程以最终确定交易,例如结算和清算。在交易后结算期间,买方和卖方比较交易细节,批准交易,更新所有权记录,并安排证券和现金的转移。尽管大多数交易结算都是通过直通处理自动处理的,但由于各种原因,如卖方未能交付证券或买方支付失败,一些交易结算可能会失败。在这种情况下,经纪人可能需要使用他们的储备金来完成交易。为了确保库存水平设置正确,以便宝贵的资本可以用于其他地方,预测结算失败至关重要。

下图展示了买卖双方通过各自的经纪公司在一个交易所买卖证券的交易流程:

图 2.5 – 交易流程

图 2.5:交易流程

交易执行后,清算所如 DTCC 将处理与买方和卖方各自的托管人之间的交易清算和结算。

经纪公司旨在通过维持适量的库存储备来优化交易率并降低资本支出成本。为了实现这一目标,利用机器学习模型在交易流程早期预测交易失败。有了这些预测,经纪人可以采取预防或纠正措施来防止或解决交易失败。

风险管理与欺诈

金融服务公司的中间办公室,包括投资银行和商业银行,包括风险管理和欺诈预防。由于这些领域在财务和监管方面具有重大影响,它们是金融服务中机器学习应用的主要领域之一。机器学习在欺诈预防和风险管理中有许多用例,例如检测洗钱、监控交易活动、识别信用卡交易欺诈和揭露保险索赔欺诈。在接下来的章节中,我们将更详细地探讨这些用例。

反洗钱

金融机构有义务通过检测有助于非法洗钱的活动来预防洗钱。反洗钱AML)法规要求金融服务公司投入大量资源来对抗 AML 活动。传统上,基于规则的系统被用来检测 AML 活动,但它们的视野有限,只能检测到过去已知的欺诈行为。此外,在基于规则的系统中包含大量要评估的特征具有挑战性,并且难以随着新变化更新规则。基于机器学习的解决方案已在 AML 的多个领域得到应用,例如:

  • 网络链接分析,揭示不同实体和司法管辖区之间复杂的社会和商业关系。

  • 聚类分析,用于发现相似和不同的实体,以发现犯罪活动模式中的趋势。

  • 基于深度学习的预测分析,用于识别犯罪活动。

  • 自然语言处理(NLP),从大量非结构化数据源中收集尽可能多的信息。

以下图表展示了 AML 分析的流程、监管机构报告要求以及内部风险管理审计功能:

图 2.6 – 反洗钱检测流程

图 2.6:反洗钱检测流程

AML 平台从许多不同的来源获取数据,包括交易数据和内部分析数据,如了解你的客户KYC)和可疑活动数据。这些数据经过处理并输入到不同的基于规则和机器学习的分析引擎中,以监控欺诈活动。然后,可以将发现结果发送到内部风险管理和审计,以及监管机构。

交易监控

金融机构的经纪人作为中介,代表客户买卖证券和其他金融工具。他们执行订单并就进入和退出金融头寸向客户提供咨询。为了防止交易员或金融机构进行市场操纵,采用贸易监控来识别和调查潜在的市场操纵行为。市场操纵的例子包括散布虚假和误导性信息、通过大量洗盘操纵交易量,以及通过披露非公开信息进行内幕交易。金融机构必须遵守如市场操纵法规MAR)、金融工具市场指令 IIMiFID II)和其他内部合规性规定,以保护自身免受声誉和财务损失。由于高噪声/信号比和许多误报,执行贸易监控可能具有挑战性,这增加了案件处理和调查的成本。一种典型的滥用检测方法是构建复杂的基于规则的系统,具有不同的固定阈值用于决策。

有多种方法可以将贸易监控问题框架化为机器学习问题,包括:

  • 将活动滥用检测框架化为分类问题,以取代基于规则的系统。

  • 将从非结构化数据源(例如,电子邮件和聊天)中提取的数据提取信息(例如,受限股票)视为自然语言处理实体提取问题。

  • 将实体关系分析(例如,市场滥用中的交易员-交易员合作)转化为基于机器学习的网络分析问题。

  • 将滥用行为视为异常,并使用无监督机器学习技术进行异常检测。

许多不同的数据集可以用于构建贸易监控的机器学习模型,例如损益信息、头寸、订单簿详情、电子通信、交易员及其交易之间的链接信息、市场数据、交易历史,以及如交易对手详情、交易价格、订单类型和交易所等详细信息。

以下图表展示了金融服务公司内贸易监控管理的典型数据流和业务流程:

图 2.7 – 贸易监控流程

图 2.7:贸易监控流程

贸易监控系统监控许多不同的数据源,并将其发现反馈给前台和合规部门进行进一步调查和执行。

信用风险

银行在向企业和个人发放贷款时面临借款人无法支付所需贷款款项的风险。这导致银行在抵押贷款和信用卡贷款等活动中的本金和利息损失。为了减轻这种违约风险,银行利用信用风险建模来评估贷款风险,重点关注两个主要方面:

  • 借款人违约贷款的概率。

  • 对贷款人财务状况的影响。

传统的人工审核贷款申请既慢又容易出错,导致贷款处理成本高昂,以及由于错误的和缓慢的贷款审批处理而错失机会。以下图表描绘了一个典型的信用风险评估业务流程及其过程中的各种决策点:

图 2.8 – 信用风险审批流程

图 2.8:信用风险审批流程

为了减少与贷款相关的信用风险,许多银行广泛采用机器学习技术来更准确、更快速地预测贷款违约及其相关风险评分。信用风险管理建模过程包括从借款人收集财务信息,如收入、现金流、债务、资产和抵押品,信贷的使用以及其他信息,如贷款类型和贷款还款行为。然而,这个过程可能需要分析财务报表中的大量非结构化数据。为了应对这一挑战,基于机器学习的解决方案,如光学字符识别OCR)和自然语言处理(NLP)信息提取和理解,已被广泛用于自动化智能文档处理。

保险

保险行业包括各种子行业,每个子行业提供独特的保险产品,如人寿保险、财产和意外伤害保险以及意外和健康保险。除了保险公司外,保险技术提供商也在行业中扮演着关键角色。大多数保险公司有两个主要业务流程,即保险承保和保险索赔管理。

保险承保

保险公司通过称为保险承保的过程评估为个人和资产提供保险覆盖的风险。利用精算数据和保险软件,保险公司确定他们愿意承担的风险的适当保险费率。承保过程因提供的保险产品而异。例如,财产保险承保过程中涉及到的步骤通常如下:

  1. 客户通过代理人或直接向保险公司提交保险申请。

  2. 保险公司的工作人员通过考虑申请人的损失和保险历史、以及精算因素来评估申请,以确定保险公司是否应该承担风险,以及风险的价格和保险费。然后,他们对政策进行额外的调整,例如保险金额和免赔额。

  3. 如果申请被接受,则保险公司将颁发保险单。

在承保过程中,需要收集和审查大量数据,由承保人估计索赔的风险,并基于数据和个人经验来确定合理的保险费。然而,人类承保人在审查数据的能力上有限,可能会在决策过程中引入个人偏见。相比之下,机器学习模型可以分析大量数据,并就索赔概率和结果等风险因素做出更准确、基于数据的决策,同时比人类承保人做出更快的决策。此外,机器学习模型可以利用大量历史数据和风险因素来生成推荐的政策保险费,从而减少评估所需的时间。

保险索赔管理

保险索赔管理涉及评估保单持有人提出的索赔并提供根据保险合同规定的损失赔偿的过程。索赔过程中的具体步骤可能因保险类型而异。例如,在财产保险的情况下,通常遵循以下步骤:

  1. 被保险人提交索赔,并附上支持证据,如损坏照片和警察报告(在汽车事故的情况下)。

  2. 保险公司指派一名调整员来评估损坏的程度。

  3. 调整员评估损坏情况,进行欺诈评估,并将索赔发送给支付批准。

在保险索赔管理过程中面临的一些主要挑战如下:

  • 损坏/丢失物品清单过程和数据录入需要大量耗时的人工操作。

  • 需要快速进行索赔损坏评估和调整。

  • 保险欺诈。

保险公司在整个保险索赔过程中收集大量数据,例如财产详情、损坏物品的详细信息和照片、保险单、索赔历史和历史上的欺诈数据。

图 2.9 – 保险索赔管理流程

图 2.9:保险索赔管理流程

机器学习可以帮助自动化手动流程,例如从文档中提取数据和从图片中识别保险对象,这可以减少数据收集所需的手动工作量。对于损害评估,机器学习可以用来估算维修和更换的成本,从而加快索赔处理速度。此外,机器学习可以用来检测保险索赔中的异常并预测潜在的欺诈行为,这有助于在打击保险欺诈的斗争中识别需要进一步调查的案件。

媒体和娱乐领域的机器学习用例

媒体和娱乐(M&E)行业涵盖了各种形式的内容制作和分发,如电影、电视、流媒体内容、音乐、游戏和出版。由于流媒体和点播(OTT)内容交付在传统广播中的日益普及,该行业经历了重大变化。M&E 客户能够接触到不断增多的媒体内容选择,他们的消费习惯正在转变,并要求在不同设备上随时随地获得更加个性化和增强的体验。该行业也以激烈的竞争为特征,为了保持竞争力,M&E 公司需要识别新的货币化渠道、改善用户体验和提高运营效率。以下图表展示了媒体制作和分发的工作流程:

图 2.10 – 媒体制作和分发工作流程

图 2.10:媒体制作和分发工作流程

近年来,我观察到媒体与娱乐(M&E)公司越来越多地在媒体生命周期的不同阶段采用机器学习,例如内容生成和内容分发,以提高效率和促进业务增长。例如,机器学习已被用于增强内容管理和搜索、开发新的内容开发、优化货币化和执行合规性与质量控制。

内容开发和制作

在电影制作生命周期初期的规划阶段,内容制作者需要根据预估的性能、收入和盈利能力等因素来决定下一个内容。为了辅助这一过程,电影制作者采用了基于机器学习的预测分析模型,通过分析如演员阵容、剧本、不同电影的过往表现以及目标受众等因素,来帮助预测新想法的流行度和盈利能力。这使得制作者能够迅速淘汰市场潜力有限的想法,并将精力集中在开发更有潜力和盈利性的想法上。

为了支持个性化的内容观看需求,内容制作者通常将长视频内容分割成围绕某些事件、场景或演员的小型微片段,以便它们可以单独分发或重新包装成更符合个人偏好的内容。这种基于机器学习的方法可以用来创建视频剪辑,通过检测场景、演员和事件等元素,为具有不同口味和偏好的不同目标受众创建视频。

内容管理和发现

拥有大量数字内容资产的媒体娱乐公司需要对其内容进行整理,以创造新的内容,从而开拓新的盈利机会。为此,这些公司需要丰富的元数据来描述数字资产,以便不同内容可以被搜索和发现。消费者也需要轻松且准确地搜索内容,以满足不同的使用需求,例如个人娱乐或研究。没有元数据标记,发现相关内容将非常具有挑战性。作为数字资产管理流程的一部分,许多公司雇佣人类来审查和标记这些内容,并添加有意义的元数据以实现内容的发现。然而,人工标记既昂贵又耗时,导致元数据不足,无法有效管理内容并实现内容发现。

计算机视觉模型可以自动为图像和视频内容标记诸如物体、类型、人物、地点或主题等项目。机器学习模型还可以解释文本内容的意义,如主题、情感、实体,有时甚至包括视频。可以使用机器学习技术将音频内容转录成文本,以便进行额外的文本分析。基于机器学习的文本摘要可以帮助您将长文本总结为内容元数据生成的一部分。以下图表说明了基于机器学习的分析解决方案可以如何融入媒体资产管理流程:

图 2.11 – 基于机器学习的媒体分析工作流程

图 2.11:基于机器学习的媒体分析工作流程

基于机器学习的解决方案正越来越多地被媒体娱乐(M&E)公司采用,以简化媒体资产管理流程。总体而言,这些解决方案可以为 M&E 公司带来显著的时间和成本节约,同时提升消费者的用户体验。

内容分发和客户参与

现在,电影和音乐等媒体内容越来越多地通过数字点播VOD)和不同设备上的直播进行分发,绕过了传统的媒体如 DVD 和广播,为消费者提供了各种媒体内容选择。因此,媒体公司面临着客户获取和保留的挑战。为了保持用户参与并留在他们的平台上,M&E 公司正专注于高度个性化的产品功能和内容。实现高度个性化参与的一个有效方法是通过内容推荐引擎,该引擎使用观看和参与行为数据来训练针对个人偏好和观看模式的目标 ML 模型。

这使得可以为用户推荐各种媒体内容,包括视频、音乐和游戏。

图 2.12 – 推荐 ML 模型训练

图 2.12:推荐 ML 模型训练

推荐技术已经存在多年,并且随着时间推移有了很大的改进。如今,推荐引擎可以使用多个数据输入来学习模式,包括历史交互、顺序模式和与用户和内容相关的元数据。现代推荐引擎还可以从用户的实时行为/决策中学习,并据此做出动态推荐。

医疗保健和生命科学中的 ML 用例

医疗保健和生命科学行业是世界上最大和最重要的行业之一,为全球数百万人民提供服务。该行业涵盖广泛的领域,每个领域都有其独特的挑战和机遇。医疗保健和生命科学中最显著的领域之一是药物行业,包括生物技术公司、制药公司和基因药物制造商。这些公司负责开发和生产治疗各种疾病和疾病的药物,从轻微疾病到危及生命的情况。他们投入大量资金进行研发,以发现新药和疗法,通常需要大量的财务资源和多年的临床试验,才能将产品推向市场。

医疗保健和生命科学中的另一个重要领域是医疗设备行业,该行业制造从标准设备如注射器和绷带到高科技设备如 MRI 机器和手术机器人的各种产品。这些公司在创新的前沿,不断开发新技术以改善患者结果并推进医疗实践。

管理型医疗保健是医疗和生命科学行业中的另一个关键部门。这些公司提供健康保险政策,为他们的保单持有人覆盖医疗费用。该部门面临许多挑战,如不断上升的医疗保健成本和不断变化的法规,需要谨慎的管理和规划,以向保单持有人提供负担得起且有效的保障。

医疗设施,如医院、诊所和实验室,是医疗和生命科学行业中的另一个重要部门。这些设施为患者提供从常规检查到复杂手术的医疗护理和服务。它们需要大量资源来运营,如熟练的医疗人员、最先进的设备和先进的技术。

政府机构,如疾病控制与预防中心(Centers for Disease Control and PreventionCDC)和食品药品监督管理局(Food and Drug AdministrationFDA),在监管和监督医疗和生命科学行业方面发挥着关键作用。它们负责确保药物和医疗设备的安全性和有效性,监测公共卫生问题,并制定促进公共卫生和安全的政策。

近年来,医疗和生命科学行业在人工智能和机器学习的采用方面显著增加。这些技术已被用于解决行业中的复杂挑战,例如提高患者预后、降低成本以及加速药物发现和开发。随着大量健康数据的可用性,包括电子健康记录、基因组数据和医学影像,机器学习算法可以提取有意义的见解和模式,以指导临床决策、疾病诊断和治疗规划。通过这种方式,机器学习正在改变医疗和生命科学行业,使从业者和研究人员能够做出更明智的决策并改善患者预后。

医学影像分析

医学影像是创建人体视觉表示的过程和技术,用于医学分析。医学专业人员,如放射科医生和病理学家,使用医学影像协助进行医疗状况评估并开具医疗治疗方案。然而,对医学影像分析的需求不断增加导致合格的专业人员短缺。这一挑战部分通过在医学影像分析中采用机器学习得到解决。

一种基于机器学习的解决方案涉及将医学影像分析视为计算机视觉目标检测和分类问题。例如,在癌细胞检测的情况下,癌细胞组织可以在现有的医学影像中被识别并标记为计算机视觉算法的训练数据。

一旦训练完成,这些模型可以用于自动筛选大量 X 光图像,突出那些病理学家需要审查的重要图像。这种方法有可能提高医学影像分析的效率和准确性,减轻医疗专业人员的负担,并改善患者预后。以下图表展示了使用医学影像分析中的标记图像数据训练计算机视觉模型的过程:

图 2.13 – 利用计算机视觉进行癌症检测

图 2.13:利用计算机视觉进行癌症检测

通过将图像数据与其他临床数据(如患者的病历、实验室检测结果和遗传数据)相结合,可以增强医学图像分析。这种数据组合可以提高医学诊断的准确性,并实现疾病的早期检测。例如,在乳腺癌的情况下,医学影像可以与其他临床数据(如年龄、家族史和激素状态)相结合,以开发更准确的乳腺癌风险预测模型。

可以将结合的数据输入到机器学习算法中,以训练一个联合模型,该模型考虑了所有可用信息,以做出更准确的预测。机器学习模型可以学习数据中各种特征(包括图像)之间的复杂模式和关系,并预测特定状况存在的可能性。

将非图像数据与医学图像结合使用,有可能更全面地了解患者的健康状况,并允许更早、更准确地诊断疾病。此外,它可以帮助医疗专业人员根据患者的具体健康状况制定更有效的治疗方案。

药物发现

药物发现和开发过程是医疗保健和生命科学行业的一个关键方面。第一阶段是发现和开发,涉及识别一个可以针对特定蛋白质或基因作为药物候选物的先导化合物。这个过程通常涉及分子生物学、生物化学和药理学等领域的初步研究。

一旦确定了先导化合物,它将进行临床前研究,以确定其有效性和安全性。这一阶段涉及广泛的实验室测试和动物研究,以了解药物药代动力学和药效学。最终目标是确定最有希望的药物候选物,以便进入临床开发阶段。

临床开发是下一个阶段,涉及临床试验和志愿者研究,以微调药物并优化其剂量、安全性和有效性。这一阶段分为三个阶段,每个阶段逐渐扩大并增加成本。目标是证明药物既安全又有效,适用于其预期用途。

在临床试验阶段之后,药物将接受 FDA 的审查,全面评估其是否批准或拒绝。这包括对药物的安全性、有效性和制造过程的严格评估。

最后,进行市场后监测以确保药物一旦获得批准并向公众开放后其安全性。这涉及对不良反应、副作用和其他安全问题的持续监测。

在药物发现和开发的领域,近年来机器学习已成为一种强大的工具。机器学习技术可用于各种目的,例如预测药物候选物的疗效和毒性以及识别新的药物靶点。此外,机器学习可以帮助解决药物发现中的一个关键挑战:理解蛋白质折叠。蛋白质折叠是蛋白质分子假定其功能三维形状的过程。机器学习算法可以分析蛋白质分子之间的复杂相互作用并预测其折叠模式。这可以为疾病的机制提供见解并促进针对特定蛋白质的新药发现。通过利用大型和复杂的数据集,机器学习可以加速药物开发过程,降低成本并提高新药的安全性和有效性。

机器学习已被用于优化临床试验,例如识别临床试验的潜在队列,这是药物发现过程中的一个重要步骤。通过分析大量患者数据,机器学习模型可以帮助识别最有可能从特定治疗中受益的患者群体。例如,在癌症研究中,机器学习已被用于分析患者的遗传和临床数据,以识别可能对特定药物反应更好的特定患者亚组。

机器学习模型还可以通过预测特定试验成功的可能性来帮助优化临床试验设计。例如,机器学习算法可以用来分析历史临床试验数据,以识别与成功试验相关的因素,如患者特征、剂量和治疗持续时间。然后,这些信息可以用来设计未来更有效的试验。

医疗数据管理

每天医疗保健行业都会生成和收集大量患者医疗保健数据,这些数据以各种格式存在,如手写笔记、保险索赔数据、记录的医疗对话和医疗图像,例如 X 光片。这些数据对于形成对患者的全面了解或支持医疗账单流程的医疗编码至关重要。然而,从这些来源中提取有价值的见解通常需要大量的手动处理,这不仅成本高昂且容易出错,通常由具有健康领域专业知识的人执行。因此,大量的患者医疗保健数据以原始形式未被利用。基于机器学习的方法已被采用来自动化这一过程并提高数据处理准确性和效率。例如,自然语言处理(NLP)模型可以从非结构化医疗笔记中提取信息,而计算机视觉算法可以分析医疗图像以检测和诊断疾病。这使得医疗保健组织能够从以前未开发的病人医疗保健数据中获得有价值的见解。

以下图表展示了使用机器学习从非结构化数据源中提取信息的过程,展示了数据流以及机器学习与不同医疗保健任务(如医疗编码和临床决策支持)的集成。

图 2.15 – 医疗数据管理

图 2.14:医疗数据管理

总体而言,在医疗保健领域采用基于机器学习(ML)的解决方案正在使医疗保健组织能够从非结构化数据源中解锁有价值的见解,这有助于改善患者结果、优化资源利用和降低成本。

制造业中的机器学习用例

制造业是一个庞大的行业,负责创造各种物理产品,如消费品、电子产品、汽车、家具、建筑材料等。制造业的每个子行业都需要特定的工具、资源和专业知识才能成功生产所需的产品。

制造过程通常包括几个阶段,包括产品设计、原型制作、生产和后制造服务与支持。在设计阶段,制造商致力于产品的概念化和规划。这包括定义产品的特性、材料和制造要求。在原型制作阶段,会制造少量产品以测试其功能性和性能。

一旦产品设计完成,制造和组装就会进行。这是将原材料转化为成品的过程。质量控制是制造过程中的关键环节,因为制造商需要确保每个产品都符合所需的标准和规范。最后,制造后的服务和支持包括维修和维护、客户支持和产品升级等活动。目标是为客户提供持续的价值,并确保产品持续发挥最佳性能。

下图展示了制造业中典型的业务功能和流程:

图 2.16 – 制造业务流程图

图 2.15:制造业务流程图

人工智能和机器学习已成为制造业的关键工具,推动了制造过程各个阶段的重大改进。例如,机器学习算法用于预测销售,这使公司能够就生产量和物料采购做出明智的决策。这反过来又导致更有效的库存管理、减少浪费和增加盈利能力。

此外,预测性机器维护是人工智能和机器学习做出重大贡献的另一个领域。通过使用机器学习算法,制造商可以分析来自传感器和其他来源的数据,以预测设备故障,在故障发生之前采取预防措施。这有助于避免计划外的停机时间,降低维护成本,并提高整体设备效率。

质量控制是另一个人工智能和机器学习取得显著改进的关键领域。通过分析传感器和摄像头的数据,机器学习算法可以实时识别有缺陷的产品或部件,从而允许及时干预,解决制造过程中的问题。

此外,人工智能和机器学习在自动化制造过程中的各种任务中发挥了关键作用。这包括使用机器人进行产品组装、执行质量检查和处理物料移动。这不仅提高了制造质量和产量,还有助于通过减少危险工作环境中的事故风险来确保工人安全。

最后,人工智能和机器学习还可以用于优化供应链管理,提高整体运营效率并降低成本。机器学习算法可以分析来自多个来源的数据,以识别供应链中的低效和瓶颈,使制造商能够做出基于数据的决策,从而改善生产计划、库存管理和分销。

工程与产品设计

产品设计是制造过程中的一个关键方面,设计师的目标是创造既实用又吸引消费者的产品。在设计阶段,设计师需要在他们的创意愿景、市场的实际需求和生产限制之间找到平衡。为了实现这一点,他们可能会创建多个新产品的概念版本,以满足不同的需求和限制。例如,在时尚行业,设计师可能会分析客户对颜色、质地和风格的偏好,以开发满足这些需求的新服装设计和图形。

制造业一直在利用生成式设计机器学习技术来协助新产品概念设计。例如,生成式 AI,一种机器学习类型,可以用于产品设计,以生成满足特定约束和要求的大量可能设计变体。通过输入设计约束,如成本、材料和生产能力,生成式 AI 可以产生数千个满足这些标准的设计选项。这种方法可以显著加快产品设计过程,并使设计师能够探索更广泛的设计可能性。

除了生成式 AI,机器学习技术在分析市场需求和评估新产品潜力方面已被证明是无价的。通过利用各种数据来源,如客户反馈、市场趋势和竞争对手分析,机器学习算法可以准确预测新产品的需求。此外,机器学习模型可以快速分析大量数据,使企业能够通过识别新的市场机会和趋势来保持竞争优势。机器学习算法还可以识别客户偏好,如颜色、质地、风格和功能,以指导产品开发过程。机器学习分析复杂数据集的能力还可以提供关于影响消费者行为和产品偏好的潜在因素的见解。这些信息可以帮助企业优化产品设计营销策略,从而提高销售额和收入。

制造运营 – 产品质量和产量

在制造业中,质量控制对于确保产品符合所需标准和规范至关重要。然而,仅依靠人工检查既耗时又昂贵。这就是为什么基于计算机视觉技术的采用在质量控制过程中成为了一场变革。可以使用机器学习算法训练计算机视觉模型来识别制造产品中的缺陷和瑕疵。例如,在汽车行业,计算机视觉算法可以检测到可能影响车辆性能的最轻微的表面划痕、凹痕或变形。此外,基于计算机视觉的技术可以应用于制造过程的各个阶段,如监控装配线、检测成品中的缺陷以及识别原材料的问题。在质量控制中使用 AI 驱动的系统不仅提高了效率并降低了成本,还确保了检查过程的一致性和准确性。

制造业运营 – 机器维护

定期维护对于工业制造设备和机械的平稳运行以及防止意外故障至关重要。然而,遵循定期维护计划的传统维护做法可能成本高昂,并且不一定总能检测到潜在问题。幸运的是,基于机器学习的预测性维护分析已成为一种解决方案,帮助制造商提前预测潜在问题并降低意外设备故障的风险。通过分析各种数据,包括由物联网IoT)传感器收集的遥测数据,机器学习算法可以预测某台设备是否可能在特定时间窗口内出现故障。维护人员随后可以采取主动措施防止设备故障,避免昂贵的维修或更换。这种方法不仅最小化了计划外停机的风险,还降低了整体维护成本和停机时间。

零售业中的机器学习应用

零售业是一个直接向消费者销售消费品的市场,无论是通过实体零售店还是在线平台。零售商从批发分销商或制造商直接采购商品。多年来,零售业经历了重大变化。电子商务的增长速度超过了传统零售业务,迫使实体店适应并创新店内购物体验以保持竞争力。零售商正在探索新的方法来提升线上线下购物体验。最近的发展,如社交电商、增强现实、虚拟助手购物、智能商店和 1:1 个性化,已成为零售业的关键差异化因素。

零售业目前正在受到人工智能和机器学习技术的推动而进行转型。零售商正在利用这些技术来优化库存、预测消费者需求,并提供个性化的沉浸式购物体验。人工智能和机器学习算法可以提供个性化的产品推荐,并实现虚拟现实购物,使购物者能够虚拟试穿衣服。此外,人工智能和机器学习技术还被用于实现无收银员商店购物、防止欺诈活动和盗窃。总的来说,零售业采用人工智能和机器学习技术预计将增强购物体验,并使零售商能够满足客户不断变化的需求和期望。

产品搜索与发现

在线购物简化了消费者的购买过程,但当你只有一张图片而没有关于商品名称或特性的信息时,在网上搜索产品有时可能会很困难。这就是深度学习驱动的视觉搜索技术派上用场的地方。这项技术允许消费者通过简单地上传他们正在寻找的商品的图片,快速识别类似外观的产品。视觉搜索技术通过创建商品图片的数字表示,也称为编码或嵌入,并将其存储在高性能的商品索引中来实现。当购物者需要使用图片找到类似外观的商品时,新图片被编码成数字表示,并使用基于距离的效率比较方法与商品索引进行搜索。然后系统返回与目标商品最接近的商品。

使用视觉搜索技术,消费者可以轻松找到他们想要的东西,即使他们不知道正确的搜索词。这项技术在电子商务零售商中越来越受欢迎,构建基于机器学习的图像搜索能力的架构也在不断演变,以提高视觉搜索的准确性和效率。

下图展示了一个构建基于机器学习的图像搜索能力的架构:

图 2.18 – 图像搜索架构

图 2.16:图像搜索架构

基于视觉搜索的推荐已经被许多大型电子商务网站如 Amazon.com 采用,以增强购物体验。

定向营销

零售商采用各种营销活动和广告策略,包括直接营销电子邮件或数字广告,通过基于其人口统计数据提供的激励或折扣来吸引潜在客户。此类活动的成功在很大程度上依赖于有效地定位正确的客户以实现高转化率,同时最大限度地降低广告成本和减少客户干扰。已经开发了机器学习模型来优化营销活动的有效性。这些模型使用客户数据和各种人口统计因素来识别最有可能转化的潜在客户,以及确定针对每个客户细分市场的最合适的消息和激励措施。通过利用机器学习技术,零售商可以提高其营销活动的准确性和效率,从而实现更高的投资回报率。

细分是理解不同客户细分市场以帮助提高营销活动有效性的一个传统方法。使用机器学习可以进行不同的细分,例如根据基本人口统计数据等数据对客户进行无监督聚类。这允许您将客户分组到几个细分市场,并为每个细分市场创建独特的营销活动。

更有效的定向营销方法是使用高度个性化的以用户为中心的营销活动。它们通过使用大量个人行为数据(如历史交易数据、对历史活动的响应数据以及如社交媒体数据等替代文本数据)创建准确的个人档案来工作。使用这些个人档案可以生成高度个性化的带有定制营销信息的活动,以提高转化率。以用户为中心的定向营销的机器学习方法预测不同用户的转化率,如点击率CTR),并向转化率高的用户发送广告。这可以通过学习用户特征与转化概率之间的关系来成为一个分类或回归问题。

上下文广告是一种定向营销技术,它会在网页内容上显示相关的广告。这涉及到在内容与广告相匹配的网站上放置展示或视频广告,从而提高广告的效果。例如,一款烹饪产品的广告可能会放置在烹饪食谱网站上,以吸引高度参与的受众。机器学习可以帮助识别广告的上下文,以确保其被适当地放置。例如,计算机视觉模型可以分析视频广告以检测物体、人物和主题,提取上下文信息并将其与网站内容相匹配。通过利用上下文广告,营销人员可以增加他们的广告与目标受众产生共鸣并实现更高的点击率的几率。

生成式 AI 为零售商提供了一个强大的机会,通过动态个性化内容将他们的目标营销工作提升到新的水平。通过利用生成模型,零售商可以创建针对个别客户偏好和兴趣的定制图像和文本。例如,一家户外服装公司可以生成针对当地天气和气候的产品的定制广告。

情感分析

理解消费者对其品牌的认知对于零售业至关重要,因为它可以对其成功产生重大影响。随着在线平台的兴起,消费者在表达他们的体验和观点方面变得更加直言不讳,这使得零售商更容易监控其品牌声誉。

零售商正在采用各种技术,包括征求购物者的反馈和监控社交媒体渠道,以评估其客户对其品牌和产品的情感和情绪。通过有效地分析情感,零售商可以识别改进领域,如运营或产品改进,以及减轻对其品牌声誉的潜在恶意攻击。

情感分析是一个文本分类问题,涉及使用标记文本数据,如产品评论,来确定情感是正面、负面还是中性。包括基于深度学习的算法在内的机器学习算法可以用来训练模型,以检测文本中的情感。然后,这些模型可以用来自动分类新的文本数据,如社交媒体帖子或客户反馈,以帮助零售商了解对其品牌和产品的整体情感。随着生成式 AI 的最近进步,许多大型语言模型提供了预训练的情感分析功能,无需您使用标记数据训练自定义模型。

通过利用情感分析,零售商可以深入了解客户偏好,识别改进领域,并做出基于数据的决策,以改善整体客户体验。

产品需求预测

零售商依赖库存规划和需求预测来管理库存成本,同时最大化收入并避免缺货情况。传统的需求预测方法,如买家调查、专家意见和基于过去需求的预测,在准确性和可靠性方面存在局限性。

为了解决这些局限性,零售商正在转向统计和机器学习技术,如回归分析和深度学习。这些方法可以使用历史需求和销售数据,以及其他相关数据,如价格、节假日、特别事件和产品属性,来创建更准确和基于数据的预测。

基于深度学习的算法通过将多个数据源纳入模型,可以特别有效地生成准确的需求预测。这种方法涉及训练一个机器学习模型来识别数据中的模式和关系,以生成高度准确的预测。结果是更可靠的库存规划,有助于零售商优化库存同时最大化收入。

下图展示了使用多个数据源构建深度学习模型以生成预测模型的概念:

图 2.19 – 基于深度学习的预测模型

图 2.17:基于深度学习的预测模型

基于机器学习的预测模型可以生成点预测(一个数字)和概率预测(带有置信度分数的预测)。许多零售业务使用机器学习来生成基线预测,然后专业预测员根据他们的专业知识和其他因素进行审查和调整。

机器学习在汽车行业的应用案例

近年来,汽车行业经历了重大变革,技术在塑造其演变过程中发挥了关键作用。人工智能和机器学习已成为汽车制造商和供应商提高效率、安全性和客户体验的强大工具。从生产线到联网汽车,人工智能和机器学习正被用于自动化流程、优化运营以及启用新的服务和功能。

自动驾驶汽车

人工智能和机器学习在汽车行业中最显著的应用之一是自动驾驶。汽车制造商和技术公司正在利用这些技术来构建无需人工干预即可安全在道路上和高速公路上行驶的自动驾驶汽车。人工智能和机器学习算法用于处理来自传感器、摄像头和其他输入的数据,以做出实时决策和行动,例如制动或换车道。

自动驾驶汽车AV)的系统架构包括 3 个主要阶段:1)感知与定位,2)决策与规划,3)控制,如下所示:

包含文本、截图、字体、数字的图片,描述自动生成图 2.18:自动驾驶汽车系统架构

感知与定位

感知是自动驾驶中的一个关键阶段,其中自动驾驶汽车通过各种传感器收集周围环境信息,并确定其在环境中的位置。自动驾驶汽车使用雷达、激光雷达、摄像头和实时动态RTK)系统来捕捉周围环境的数据。然后,这些感官数据被输入到识别模块进行进一步处理。

感知阶段的一个关键组件是自适应检测和识别框架(ADAF),它利用机器学习算法检测和分类自动驾驶汽车附近的对象,如行人、车辆和障碍物。此外,自动驾驶汽车还集成了车道偏离警告系统(LDWS)、交通标志识别(TSR)、未知障碍物识别(UOR)和车辆定位和定位(VPL)等模块,以增强其感知能力。

感知阶段是整体自动驾驶系统的一个基本构建块。感知模块的准确性和可靠性对自动驾驶汽车感知和解释其环境的能力产生重大影响。机器学习算法、传感器技术和传感器融合技术的进步持续提高自动驾驶汽车的感知能力,使其能够在各种复杂驾驶场景中安全有效地运行。

决策和规划

决策和规划阶段是自动驾驶的关键方面,它根据感知阶段收集的数据来控制自动驾驶汽车的运动和行为。人工智能和机器学习技术在这一阶段发挥着至关重要的作用,可以被视为自动驾驶的大脑。通过分析来自雷达、激光雷达和摄像头等传感器的数据,决策和规划阶段使用算法来确定自动驾驶汽车应遵循的最佳路径。

人工智能/机器学习可以通过考虑各种因素,如实时地图信息、交通模式和用户输入,来帮助增强路径规划过程,从而做出明智的决策。通过预测和预测技术,自动驾驶汽车可以预测其他道路使用者的行为并相应地规划。人工智能/机器学习算法还可以通过持续监控环境、检测潜在危险并对车辆轨迹进行实时调整以避免碰撞来帮助避障。

决策和规划阶段是自动驾驶行动背后的智慧,使其能够根据实时和历史数据做出明智的选择。随着人工智能和机器学习的进步,决策算法变得越来越复杂,使自动驾驶汽车能够应对复杂场景并有效地应对动态交通状况。

控制

自动驾驶中的控制模块在将决策和规划阶段做出的决策转化为控制自动驾驶汽车(AV)的物理动作方面发挥着至关重要的作用。在这一模块中应用人工智能和机器学习技术来增强控制机制并优化自动驾驶汽车的性能。

在控制模块中,人工智能/机器学习可以应用于自适应控制系统。通过利用传感器数据和实时反馈,人工智能算法可以动态调整控制输入,以确保自动驾驶车辆平稳、安全地运行。机器学习模型可以从过去的驾驶经验中学习,并根据不同的驾驶条件(如不同的路面、天气条件和交通模式)优化控制动作。

此外,强化学习技术可以在控制模块中应用,以使自动驾驶车辆通过试错学习最佳控制策略。通过与环境互动并对其行动的结果获得反馈,自动驾驶车辆可以迭代地改进其控制策略,从而实现更高效、更有效的驾驶行为。

高级驾驶辅助系统(ADAS)

除了自动驾驶之外,人工智能和机器学习还被用于增强驾驶体验,具有如高级驾驶辅助系统ADAS)等特性。

高级驾驶辅助系统(ADAS)利用计算机视觉、传感器融合和人工智能技术实时检测和解释周围环境。通过分析来自摄像头、雷达和其他传感器的数据,ADAS 可以识别道路上的潜在危险,包括行人、骑自行车的人和车辆。这使得系统可以向驾驶员发出警告,甚至采取自主纠正措施以减轻风险。例如,车道偏离警告系统会在驾驶员无意中偏离车道时提醒驾驶员,而自动紧急制动系统可以自主应用刹车以防止或减轻碰撞的严重程度。ADAS 技术不仅提高了安全性,还有助于减少事故并挽救生命。

摘要

在本章中,我们探讨了各个行业以及它们如何利用机器学习(ML)来解决商业挑战并推动增长。从金融和医疗保健到零售和汽车行业,我们看到了机器学习如何改进流程、产生洞察力并提升客户体验。本章中的例子可能激发了你的一些想法,你现在可以将这些想法带给利益相关者,以启动机器学习路线图讨论,并创造性地思考在你自己的组织中可能具有高影响力的应用。

随着我们进入下一章,我们将更深入地探讨机器学习的机制,探索机器学习背后的基本概念以及该领域最广泛使用的算法。这将为你提供一个坚实的理解基础,了解机器学习在实际中是如何应用于解决各种机器学习问题的。

加入我们的 Discord 社区

加入我们的 Discord 空间,与作者和其他读者进行讨论:

packt.link/mlsah

二维码

第三章:探索机器学习算法

虽然机器学习算法设计可能不是机器学习解决方案架构师的主要角色,但对他们来说,仍然需要具备对常见现实世界机器学习算法及其在解决商业问题中的应用的全面理解。这种知识使机器学习解决方案架构师能够识别合适的数据科学解决方案,并设计部署这些算法所需的技术基础设施。

通过熟悉各种机器学习算法,机器学习解决方案架构师可以掌握每个算法的优势、局限性和特定用例。这使得他们能够准确评估业务需求,并选择最合适的算法方法来解决给定的问题。无论是分类、回归、聚类还是推荐系统,理解底层算法为架构师提供了做出明智决策所需的知识。

在本章中,我们将探讨机器学习的基础知识,并深入研究常见的机器学习和深度学习算法。我们将涵盖分类、回归、目标检测、推荐、预测和自然语言生成等任务。通过理解这些算法的核心原理和应用,您将获得识别适合现实世界问题的机器学习解决方案的知识。本章旨在为您提供跨各种领域的有见地的决策和设计有效的机器学习解决方案的专长。

具体来说,本章将涵盖以下主题:

  • 机器学习是如何工作的

  • 选择机器学习算法的考虑因素

  • 分类和回归算法

  • 聚类算法

  • 时间序列算法

  • 推荐算法

  • 计算机视觉算法

  • 自然语言处理算法

  • 生成式人工智能算法

  • 动手实践练习

注意,本章为对应用这些算法的新读者提供了机器学习算法的介绍。如果您已经拥有数据科学家或机器学习工程师的经验,您可能希望跳过本章,直接进入第四章,在那里我们讨论机器学习的数据管理。

技术要求

为了完成本章的动手实践练习部分,您需要一个个人电脑(MacWindows)。

您还需要从www.kaggle.com/mathchi/churn-for-bank-customers下载数据集。在动手实践练习部分将提供额外的说明。

机器学习是如何工作的

第一章使用机器学习解决方案架构导航机器学习生命周期 中,我们讨论了机器学习算法通过数据处理和参数更新实现自我改进的能力,从而生成类似于计算机源代码中编译二进制的模型。但算法实际上是如何学习的呢?本质上,机器学习算法通过优化目标函数(也称为损失函数)来学习,这涉及到最小化或最大化它。目标函数可以被视为一个业务指标,例如预测和实际产品销售之间的差异。优化的目的是减少这种差异。为了实现这一点,机器学习算法迭代并处理大量的历史销售数据(训练数据),调整其内部模型参数,直到预测值和实际值之间的差距最小化。这个过程被称为优化,专门为此目的设计的数学程序称为优化器。

为了说明优化的概念,让我们考虑一个简单的例子:训练一个机器学习模型来根据其价格预测产品销售。在这种情况下,我们可以使用线性函数作为机器学习算法,如下所示:

sales = W * price + B

在这个例子中,我们的目标是使预测销售值和实际销售值之间的差异最小化。为了实现这一点,我们采用 均方误差MSE)作为优化的损失函数。具体任务是确定模型参数 WB 的最佳值,通常称为权重和偏差。权重为每个输入变量分配相对重要性,而偏差表示平均输出值。我们的目标是找到产生最低 MSE 的 WB 值,以提高销售预测的准确性:

解决机器学习优化问题有多种技术可用。其中,梯度下降及其变体被广泛用于优化神经网络和各种其他机器学习算法。梯度下降是一种迭代方法,它涉及计算与每个输入变量相关的误差变化率(梯度)。根据这个梯度,模型参数(在本例中的 WB)逐步更新,以逐步减少误差。学习率是机器学习算法的一个超参数,它控制每次迭代的参数更新幅度。这允许对优化过程进行微调。以下图展示了使用梯度下降优化 W 值的过程:

图 3.1 – 梯度下降

图 3.1:梯度下降

梯度下降优化过程涉及几个关键步骤:

  1. 随机初始化 W 的值。

  2. 使用分配的 W 值来计算误差(损失)。

  3. 计算误差相对于损失函数的梯度(变化率)。梯度可以是正的、零或负的。

  4. 如果梯度是正的或负的,更新W的值,使其在减少下一次迭代中误差的方向上移动。在这个例子中,我们将W向右移动以增加其值。

  5. 重复步骤 24,直到梯度变为零,这表明W的最佳值已经达到,并且收敛已经实现。

除了梯度下降之外,还可以使用如正规方程这样的替代优化技术来寻找机器学习算法(如线性回归)的最佳参数。与梯度下降的迭代方法不同,正规方程为计算线性回归模型的系数提供了一个一步的解析解。其他机器学习算法也可能有针对模型训练的特定算法优化方法,这些将在下一节中讨论。

机器学习算法概述

在简要概述了机器学习背后的基本概念之后,现在让我们更深入地探讨各种机器学习算法。机器学习领域已经发展了许多算法,学术界和工业界都在持续地进行研究和创新。在本节中,我们将探讨几个著名的传统和深度学习算法,检查它们在预测、推荐和自然语言处理等各种类型的机器学习问题中的应用。此外,我们还将探讨不同算法的优缺点,并讨论每种算法最适合的情况。这将帮助你建立对每个算法不同能力和它们可以解决的各类问题的理解。

在我们深入探讨这些算法之前,讨论在选择适合特定任务的算法时需要考虑的因素是很重要的。

选择机器学习算法的考虑因素

在选择机器学习算法时,有几个关键因素需要考虑:

  • 问题类型:不同的算法更适合不同类型的问题。例如,分类算法适用于目标是将数据分类到不同类别的任务,而回归算法用于预测连续的数值。理解问题类型对于选择最合适的算法至关重要。

  • 数据集大小:你的数据集大小可能会影响算法的选择。有些算法在小数据集上表现良好,而其他算法则需要大量的数据才能有效地泛化。如果你数据有限,具有较少参数的简单算法可能更可取,以防止过拟合。过拟合是指训练模型对训练数据学习得太好,但无法泛化到新的、未见过的数据。

  • 特征空间:考虑你的数据集中特征的数量和性质。一些算法可以处理高维特征空间,而其他算法则更适合具有较少特征的集合。特征工程和降维技术也可以应用于提高算法性能。

  • 计算效率:算法的计算需求应予以考虑,特别是如果你有大量数据集或有限的计算资源。一些算法计算成本高昂,可能不适合某些环境。时间复杂度和空间复杂度是用于评估机器学习算法效率的定量指标。大 O 符号表示时间和空间需求的上限估计。例如,线性搜索的时间复杂度为O(N),而二分搜索的时间复杂度为O(log N)。理解这些复杂性有助于评估算法效率和可扩展性,有助于为特定任务选择算法。

  • 可解释性:根据你的应用,算法结果的解释性可能很重要。一些算法,如决策树或线性模型,提供易于解释的结果,而其他算法,如深度神经网络,则提供更复杂和抽象的表示。

  • 算法复杂度和假设:不同的算法对潜在数据分布有不同的假设。考虑这些假设是否适用于你的数据集。此外,算法的复杂性可能会影响其实施的简便性、训练时间和处理噪声或不完整数据的能力。

通过考虑这些因素,你可以在选择最适合你特定问题和可用资源的机器学习算法时做出明智的决定。

用于分类和回归问题的算法

今天的大多数机器学习问题主要涉及分类和回归。分类是机器学习任务,它将类别或类分配给数据点,例如将信用卡交易标记为欺诈或不欺诈。另一方面,回归是一种机器学习技术,用于预测连续的数值,例如预测房屋价格。

在接下来的章节中,我们将探讨用于分类和回归任务的常见算法。我们将解释每个算法的工作原理,每种算法适合解决的问题类型,以及它们的局限性。这将有助于建立对不同任务选择不同算法的直觉。

线性回归算法

线性回归算法是通过基于独立输入预测连续值来解决回归问题的。它们在各种实际场景中得到了广泛应用,例如根据价格估计产品销售或根据降雨量和肥料确定作物产量。

线性回归利用一组系数和输入变量的线性函数来预测标量输出。线性回归的公式如下所示:

图片

在线性回归方程中,X[s]代表输入变量,W[s]表示系数,图片表示误差项。线性回归旨在通过计算输入的加权总和来估计输出值,假设输出和输入之间存在线性关系。线性回归背后的直觉是找到一个线或超平面,可以估计一组输入值的值。线性回归可以有效地处理小数据集,通过系数评估输入和输出变量提供可解释性。然而,它可能无法很好地处理复杂、非线性数据集。此外,线性回归假设输入特征之间相互独立,当存在共线性(一个特征的价值影响另一个特征的价值)时,它可能会遇到困难,因为评估相关特征的重要性变得具有挑战性。

逻辑回归算法

逻辑回归通常用于二元和多类分类任务。它可以预测事件发生的概率,例如,一个人是否会点击广告或是否有资格获得贷款。逻辑回归是现实场景中非常有价值的一种工具,在这些场景中,结果为二元,需要估计特定类别的可能性。通过利用逻辑函数,该算法将输入变量映射到概率分数,从而实现有效的分类决策。

逻辑回归是一种用于估计事件或结果发生概率的统计模型,例如交易欺诈或通过考试。它与线性回归类似,但输出转换不同。逻辑回归的目标是找到一个决策边界,由一条线或超平面表示,能够有效地将数据点的两个类别分开。通过将输入变量的线性组合应用逻辑函数,逻辑回归确保预测输出落在 0 到 1 的范围内,表示属于特定类别的概率。以下公式是逻辑回归的函数,其中X是输入变量的线性组合(b+wx)。在这里,w 是回归系数:

图片

与线性回归一样,逻辑回归具有快速训练速度和可解释性作为其优点。然而,由于其线性特性,逻辑回归不适用于解决具有复杂非线性关系的问题。

决策树算法

决策树在各种现实世界的机器学习场景中得到了广泛的应用,包括心脏病预测、目标营销和贷款违约预测。它们用途广泛,可以用于分类和回归问题。

决策树的概念源于数据可以根据规则分层划分的想法,导致相似的数据点遵循相同的决策路径。它通过在树的各个分支使用不同的特征来分割输入数据来实现这一点。例如,如果年龄是用于分支分割的特征,则可以使用条件检查如年龄 > 50 来划分数据。选择用于分割的特征以及分割位置是通过诸如基尼纯度指数和信息增益等算法来决定的。基尼指数衡量误分类的概率,而信息增益量化了分割导致的熵减少。

在这本书中,我们不会深入探讨具体的算法细节。然而,决策树的一般概念涉及尝试不同的分割选项和条件,计算每个分割选项的度量值(例如,信息增益),并选择产生最高值的选项。在预测过程中,输入数据根据学习到的分支逻辑遍历树,最终预测由终端节点(叶节点)确定。请参阅图 3.2以了解决策树的一个示例结构。

图 3.2 – 决策树

图 3.2:决策树

与线性回归和逻辑回归相比,决策树的主要优势在于它们能够捕捉特征之间的非线性关系和交互。决策树可以处理复杂的数据模式,并且不仅限于输入变量和输出之间的线性关系。它们可以表示更灵活的决策边界,并可以处理数值和分类特征。

决策树的优势在于它可以处理最少预处理的数据,适应分类和数值特征,并处理缺失值和变化的特征尺度。它也非常易于解释,允许轻松可视化和分析决策路径。此外,决策树在计算上效率很高。然而,它们可能对异常值敏感,并且容易过拟合,尤其是在处理大量特征和噪声数据时。过拟合发生在模型记住训练数据但在未见数据上表现不佳的情况下。

决策树和基于树的算法的一个显著局限性是它们无法在训练输入范围之外进行外推。例如,如果一个房价模型是在 500 到 3,000 平方英尺的平方英尺数据上训练的,那么决策树将无法对超过 3,000 平方英尺的数据进行预测。相比之下,线性模型能够捕捉趋势并在观察范围之外进行预测。

随机森林算法

随机森林算法在电子商务、医疗保健和金融等各个领域的实际应用中得到了广泛应用。它们在分类和回归任务中尤其有价值。这些任务的现实世界例子包括保险承保决策、疾病预测、贷款支付违约预测和定向营销活动。随机森林算法的通用性允许它们在广泛的行业中应用,以解决各种商业挑战。

如前述决策树章节所述,决策树使用单一树来做出决策,树的根节点(第一个分割树的特性)对最终决策影响最大。随机森林背后的动机在于,结合多个树的决策可以导致整体性能的提升。随机森林的工作方式是创建多个较小的子树,也称为弱学习树,其中每个子树使用所有特征的一个随机子集来做出决策,最终决策通过多数投票(用于分类)或平均(用于回归)来做出。将多个模型的决策结合起来的这个过程也被称为集成学习。随机森林算法还允许你引入不同程度的随机性,例如自助采样,这涉及到在单个树中使用相同的样本多次。这有助于使模型更加通用,并减少过拟合的风险。以下图示说明了随机森林算法如何使用多个子树处理输入数据实例,并组合它们的输出。

图 3.3 – 随机森林

图 3.3:随机森林

与决策树相比,随机森林具有几个优势。通过多数投票或平均结合多个树的预测,它们提高了准确性。它们通过在模型中引入随机性和使用特征的不同子集来减少过拟合。随机森林通过关注数据的不同方面更好地处理大型特征集。它们对异常值具有鲁棒性,并提供特征重要性估计。此外,随机森林支持跨多台机器的并行处理,以训练大型数据集。随机森林的局限性包括与决策树相比的可解释性降低、较长的训练和预测时间、增加的内存使用以及需要调整超参数。

梯度提升机与 XGBoost 算法

梯度提升和 XGBoost 也是流行的基于多树的机器学习算法,广泛应用于信用评分、欺诈检测和保险索赔预测等各个领域。与随机森林在最后结合弱学习树的结果不同,梯度提升按顺序聚合来自不同树的结果。

随机森林利用并行独立弱学习器,而梯度提升采用一种顺序方法,其中每个弱学习器树纠正前一个树的错误。梯度提升提供了更多的超参数来微调,并且通过适当的调整可以实现卓越的性能。它还允许自定义损失函数,为建模现实世界场景提供了灵活性。参考以下图示了解梯度提升树的工作原理:

图 3.4 – 梯度提升

图 3.4:梯度提升

梯度提升提供了几个关键优势。首先,它在处理不平衡数据集方面表现出色,这使得它非常适合欺诈检测和风险管理等任务。其次,当适当调整时,它有可能比其他算法实现更高的性能。此外,梯度提升支持自定义损失函数,为建模现实世界应用提供了灵活性。最后,它能够有效地捕捉数据中的复杂关系并产生准确的预测。尽管梯度提升具有优势,但也存在一些需要考虑的局限性。首先,由于其顺序性,它缺乏并行化能力,因此在训练速度上比可以并行化的算法慢。其次,梯度提升对噪声数据敏感,包括异常值,这可能导致过拟合和降低泛化性能。最后,梯度提升模型的复杂性使其比决策树等简单算法更难以解释,这使得理解数据中的潜在关系变得具有挑战性。

XGBoost,梯度提升的一个广泛使用的实现,因其在大规模 Kaggle 竞赛中的成功而受到欢迎。虽然它与梯度提升具有相同的基本概念,但 XGBoost 提供了一些改进。它允许在多个核心和 CPU 上训练单个树,从而缩短了训练时间。XGBoost 结合了强大的正则化技术来减轻过拟合并降低模型复杂性。它还在处理稀疏数据集方面表现出色。除了 XGBoost 之外,其他流行的梯度提升树变体还包括 LightGBM 和 CatBoost。

K 近邻算法

K 近邻K-NN)是一种多用途算法,用于分类和回归任务。它也被用于搜索系统和推荐系统。K-NN 的基本假设是,在特征空间中,相似的项目往往彼此靠近。为了确定这种接近性,测量不同数据点之间的距离,通常使用欧几里得距离等度量。

在分类的情况下,K-NN 算法首先加载训练数据及其相应的类别标签。当需要对新数据点进行分类时,会计算其与现有数据点的距离,通常使用欧几里得距离。确定新数据点最近的 K 个邻居,并检索它们的类别标签。然后通过多数投票确定新数据点的类别标签,即将 K 个最近邻居中最频繁的类别分配给新数据点。

下面的图示展示了如何使用 K-NN 进行分类:

一个图示的图示描述自动生成

图 3.5:K-NN 用于分类

对于回归任务,K-NN 遵循类似的方法。计算新数据点与现有数据点之间的距离,并选择 K 个最近邻居。通过平均 K 个最近数据点的值来获得新数据点的预测标量值。

K-NN 的一个优点是其简单性以及不需要训练或调整超参数(除了选择 K 的值)。数据集直接加载到模型中,无需训练模型。值得注意的是,K 的选择对 K-NN 模型的表现有显著影响。最优的 K 值通常通过迭代试错过程,通过评估保留的数据集来找到。K-NN 的结果也易于解释,因为每个预测都可以通过检查最近邻居的性质来理解。然而,K-NN 也有一些局限性。

随着数据点的数量增加,模型的复杂性增加,预测可能会变慢,尤其是在大型数据集上。K-NN 不适合高维数据集,因为在更高维空间中,邻近的概念变得不那么有意义。该算法对噪声数据和缺失数据也很敏感,需要移除异常值和数据插补技术来有效处理这些情况。

多层感知器(MLP)网络

如前所述,人工神经网络ANN)模拟了人脑的学习过程。大脑由众多相互连接的神经元组成,它们处理信息。网络中的每个神经元都从另一个神经元接收输入(电脉冲),处理并转换输入,然后将输出发送到网络中的其他神经元。以下是人脑神经元的示意图:

图 3.5 – 人脑神经元

图 3.6:人脑神经元

人工神经元以类似的方式运作。以下图示展示了一个人工神经元,它由一个线性函数与一个激活函数组合而成。激活函数会修改线性函数的输出,例如将其压缩在特定范围内,如 0 到 1(Sigmoid 激活),-1 到 1(Tanh 激活),或保持值在 0 以上(ReLU)。激活函数被用来捕捉输入和输出之间的非线性关系。或者,每个神经元也可以被视为一个线性分类器,类似于逻辑回归。

图 3.6 – 人工神经元

图 3.7:人工神经元

当将大量神经元堆叠成不同的层(输入层隐藏层输出层)并将所有神经元在相邻层之间连接起来时,我们就得到了一个称为多层感知器MLP)的 ANN。在这里,“感知器”一词意味着“人工神经元”,它最初由 Frank Rosenblatt 于 1957 年发明。MLP 背后的理念是每个隐藏层将学习前一层的一些高级表示(特征),这些高级特征捕捉了前一层的更重要的信息。当使用最终隐藏层的输出进行预测时,网络已经从原始输入中提取了最重要的信息,用于训练分类器或回归器。以下图示展示了 MLP 网络的架构:

图 3.7 – 多层感知器

图 3.8:多层感知器

在模型训练过程中,通过梯度下降调整每一层中每个神经元的权重(W),以优化训练目标。这种调整过程被称为反向传播。它涉及将总误差反向传播通过网络,根据每个神经元的贡献将一部分误差分配给每个神经元。这允许对每个神经元中的权重进行微调,确保每一层的每个神经元都对最终输出产生影响,从而提高整体性能。

MLP 是一种多才多艺的神经网络,适用于分类和回归任务,类似于随机森林和 XGBoost。虽然通常应用于表格数据,但它也可以处理各种数据格式,如图像和文本。MLP 在捕捉数据集中的复杂非线性模式方面表现出色,并因其并行化能力而具有高效的计算处理能力。然而,与传统的机器学习算法相比,MLP 通常需要更大的训练数据集才能达到最佳性能。

聚类算法

聚类是一种数据挖掘方法,它涉及根据共享属性将项目分组在一起。聚类的一个实际应用是通过分析人口统计、交易历史或行为数据来创建客户细分。其他例子包括社交网络分析、文档分组和异常检测。存在各种聚类算法,在本节中我们将重点关注 K-means 聚类算法,这是最广泛使用的聚类算法之一,因为它简单易行。其他一些流行的聚类算法包括层次聚类和 DBSCAN。

K-means 算法

K-means 算法在现实世界的应用中得到了广泛的应用,包括客户细分分析、基于文档属性的文档分类和保险欺诈检测。它是一种多用途算法,可以有效地将数据点分组到各种领域,用于不同的目的。

K-means 算法旨在将相似的数据点分组到簇中,它是一种无监督算法,这意味着它不依赖于标记数据。算法首先随机分配 K 个质心,这些质心代表簇的中心。然后,它迭代地调整数据点到最近质心的分配,并将质心更新为每个簇中数据点的平均值。这个过程一直持续到收敛,从而根据相似性形成定义良好的簇。

K-means 聚类具有几个优点,包括其简单性和易于理解,这使得它对初学者来说易于访问。它是计算高效的,可以有效地处理大型数据集。生成的簇是可解释的,为数据中的潜在模式提供了有价值的见解。K-means 算法灵活多样,适用于各种类型的数据,包括数值、分类和混合属性数据集。然而,也有一些缺点需要考虑。选择最佳簇数(K)可能是主观的且具有挑战性。该算法对质心的初始位置敏感,可能导致不同的簇形成。K-means 假设簇是球形的且具有相等的方差,这在所有情况下可能并不成立。它对异常值也很敏感,并且在与非线性数据关系作斗争时存在困难。

时间序列分析算法

时间序列是由在连续时间间隔内记录的一系列数据点组成的。它通常用于分析预测各个领域的趋势,如金融、零售和销售。时间序列分析使我们能够理解过去的模式,并根据当前值与过去值之间的关系进行未来预测。时间序列预测依赖于未来值受不同时间点先前观察影响的假设。

时间序列数据表现出几个重要的特征,包括趋势、季节性和平稳性。趋势指的是数据的长期方向,它表示数据随时间是否呈现整体增加或减少。它有助于识别潜在的模式并理解时间序列的一般行为。另一方面,季节性捕捉固定间隔内的重复模式,通常在周期或季节中发生。它有助于识别在特定时间周期内重复的规律性波动,如每日、每周或年度模式。平稳性指的是时间序列的属性,其中统计属性,如均值和方差,随时间保持恒定。平稳性至关重要,因为许多预测技术假设基础数据是平稳的。非平稳时间序列可能导致预测不准确或不可靠。因此,在应用预测技术之前,评估和解决时间序列的平稳性是很重要的。

ARIMA 算法

自回归积分移动平均ARIMA)算法在各种实际场景中有实际应用,包括预算预测、销售预测、患者就诊预测和客户支持呼叫量预测。ARIMA 是分析预测时间序列数据的有力工具,允许组织在这些领域做出明智的决策并优化其运营。通过利用数据中的历史模式和趋势,ARIMA 可以实现准确的预测,并帮助企业在有效管理资源和规划未来方面发挥作用。

ARIMA 基于以下前提运作:给定时期变量的值受其自身先前值(自回归)的影响,与平均值之间的偏差遵循基于先前偏差的模式(移动平均),通过差分(计算连续数据点之间的差异)可以消除趋势和季节性。这个差分过程旨在将时间序列转换为平稳状态,其中统计属性如均值和方差随时间保持恒定。ARIMA 的这三个组件可以用以下公式进行数学表示:

图片

其中,自回归AR)组件表示为先前值的回归(也称为滞后):

图片

常数C代表漂移:

图片

移动平均MA)组件表示为先前时间周期的预测误差的加权平均值,其中它代表一个常数:

图片

时间序列的集成组件(时间序列差分)可以表示为前一个周期内值与当前周期内值的差。

ARIMA 是预测单时间序列(单变量)数据的合适选择,因为它不依赖于其他变量。它优于简单的预测技术,如简单移动平均、指数平滑或线性回归。此外,ARIMA 提供了可解释性,使得对潜在模式有清晰的理解。然而,由于其向后看的本质,ARIMA 可能难以准确预测意外事件。此外,作为一个基于线性模型的模型,ARIMA 可能无法有效地捕捉时间序列数据中的复杂非线性关系。

DeepAR 算法

基于深度学习的预测算法为传统模型如 ARIMA 的局限性提供了解决方案。它们擅长捕捉复杂的非线性关系,并能有效地利用多变量数据集。这些模型能够训练一个全局模型,使得一个模型可以处理多个相似的目标时间序列。这消除了为每个单独的时间序列创建单独模型的需求,提供了一种更高效和可扩展的方法。

深度自回归DeepAR)是一种基于神经网络的先进预测算法,旨在处理具有多个相似目标时间序列的大数据集。它具有结合相关时间序列的能力,例如产品价格或假日安排,以增强其预测模型的准确性。当处理由外部变量触发的峰值事件时,这一特性尤其有价值,它允许进行更精确和可靠的预测。

DeepAR 利用循环神经网络RNN)作为其底层模型来捕捉目标时间序列中的模式。它通过结合多个目标时间序列和额外的外部支持时间序列超越了单变量预测。RNN 不是考虑单个值,而是接受代表每个时间周期各种变量值的输入向量。通过联合学习这些组合向量随时间变化的模式,DeepAR 可以有效地捕捉不同时间序列之间的内在非线性关系和共享模式。这种方法使得 DeepAR 能够训练一个单一的全局模型,该模型可用于跨多个相似的目标时间序列进行预测。

DeepAR 在处理复杂的多变量数据集方面表现出色;然而,当使用大量数据进行训练时,它的表现最佳。它在涉及大规模零售预测的实际情况中特别有用,例如对众多商品的预测,需要考虑外部因素如营销活动和假日安排。通过利用其同时建模多个变量的能力,DeepAR 可以在这种实际应用场景中提供准确的预测和见解。

DeepAR 的一个显著缺点是深度学习模型的黑盒性质,它缺乏可解释性和透明度。这使得预测比简单的统计方法更难以解释和证明。另一个主要缺点是 DeepAR 对数据的贪婪性,当数据集较小时,其表现不佳。

推荐算法

推荐系统是一种关键的机器学习技术,它预测用户对物品的偏好,主要依赖于用户或物品属性的相似性或用户-物品交互。它在零售、媒体和娱乐、金融和医疗保健等各个行业中得到了广泛的应用。多年来,推荐算法领域已经发生了显著的变化,从基于相似用户的偏好和行为进行推荐,发展到基于强化学习的方法,其中算法随着时间的推移学习做出连续的决策,同时考虑用户反馈和交互。在下一节中,我们将探讨推荐系统领域的一些常用算法。

协同过滤算法

协同过滤是一种流行的推荐算法,它利用了这样一个观点:在一组物品中具有相似兴趣或偏好的个人,在其他物品中也可能具有相似的兴趣。通过分析不同用户的集体经验和行为,协同过滤可以有效地根据相似用户的偏好为单个用户推荐物品。这种方法利用了群体的经验,提供个性化的相关推荐。

下图展示了电影评分背景下的物品-用户交互矩阵。如图所示,它是一个稀疏矩阵。这意味着矩阵中有许多空项,这是预期的,因为任何个人都不太可能观看每一部电影:

图 3.8 – 协同过滤的用户-物品交互矩阵

图 3.9:协同过滤的用户-物品交互矩阵

协同过滤的主要优点之一是它可以提供高度个性化的推荐,与每个用户的独特兴趣相匹配。与基于内容的系统不同,协同过滤模型不需要分析和理解物品特征和内容。相反,它们完全依赖于行为模式,如评分、购买、点击和用户之间的偏好,以揭示相关性。这使得协同系统能够根据群体智慧获得用户喜好的细致轮廓。然后,算法可以生成针对特定用户的定制推荐,超越明显的建议。这种个性化的程度和捕捉用户偏好的能力使协同过滤成为一种强大的方法,尤其是在分析内容不可行的庞大目录中。

协同过滤也有一些明显的缺点。一个主要问题是冷启动问题:当引入新用户或没有评分的项目时,协同模型会面临挑战。算法高度依赖于群体评分,因此它们无法有效地向缺乏历史数据的用户推荐新项目。协同系统也可能导致多样性有限,形成过滤气泡和明显的推荐而不是新颖的推荐。它们通常面临稀疏性问题,因为用户-项目矩阵通常是稀疏的,尤其是在大型目录中。

矩阵分解是协同过滤推荐系统中常用的一种技术。它涉及在用户-项目交互矩阵中学习用户和项目的向量表示或嵌入。目标是通过对学习的用户和项目嵌入矩阵进行乘积来近似原始矩阵。

这使我们能够预测矩阵中的缺失条目,这些条目代表用户对未见项目可能给出的评分。为了进行预测,我们只需计算用户嵌入和项目嵌入之间的点积。

嵌入是机器学习中的一个基本概念,在各个领域发挥着至关重要的作用。它涉及以捕捉实体(如单词或对象)的语义相似性的方式创建实体的数值表示。这些表示组织在一个多维空间中,其中相似的实体彼此靠近。通过使用嵌入,我们可以揭示对象的潜在语义,从而实现更有效的分析和建模。在接下来的章节中,我们将深入了解嵌入技术及其在自然语言处理算法中的应用。

矩阵分解提供了主要的可扩展性优势,因此协同过滤可以应用于极其庞大的目录。然而,由于潜在因子建模,该算法失去了一些透明度。总的来说,矩阵分解将协同过滤扩展到更大的数据集,但牺牲了一些可解释性。

多臂老虎机/上下文老虎机算法

基于协同过滤的推荐系统严重依赖于已识别用户和项目之间的先前交互数据来做出准确的推荐。然而,当缺乏先前交互或用户匿名时,这些系统面临挑战,导致冷启动问题。为了解决这个问题,一种方法是基于多臂老虎机MAB)的推荐系统。这种方法从试错的概念中汲取灵感,类似于一个同时玩多个老虎机和观察哪个机器产生最佳整体回报的赌徒。通过采用强化学习技术,基于 MAB 的推荐系统可以动态探索和利用不同的推荐来优化用户体验,即使在缺乏大量先前交互数据的情况下。

MAB 算法在在线学习的范式下运行,其中在部署模型之前没有预先存在的训练数据。相反,模型随着数据的可用性逐渐学习和适应。在 MAB 学习的初始阶段,模型以相等的概率向用户推荐所有可用的选项(例如电子商务网站上的产品)。随着用户开始与项目的一部分进行互动并提供反馈(奖励),MAB 模型调整其策略。它开始更频繁地提供产生更高奖励的项目(例如,更多用户互动),利用它们积极表现的已知知识。

然而,该模型仍然继续将较小比例的推荐分配给新项目,旨在探索它们获得互动的潜力。这种在探索(提供新项目)和利用(提供已知奖励的项目)之间的平衡是 MAB 算法中的一个基本权衡。

MAB 算法面临几个限制。在探索和利用之间取得正确的平衡可能具有挑战性,导致在某些环境中出现次优解。处理高维上下文信息也是一个挑战,算法可能对噪声奖励敏感。此外,当新项目或用户的历史数据有限时,会出现冷启动问题。

计算机视觉问题的算法

计算机视觉是指计算机解释和理解视觉表示的能力,例如图像和视频,以便执行诸如对象识别、图像分类、文本检测、人脸识别和活动检测等任务。这些任务依赖于模式识别,其中图像被标注为对象名称和边界框,计算机视觉模型被训练以识别这些模式并在新图像上做出预测。计算机视觉技术在内容管理、安全、增强现实、自动驾驶汽车、医疗诊断、体育分析和制造业的质量检验等实际领域有众多应用。在下一节中,我们将深入探讨一些专门为计算机视觉任务设计的神经网络架构。

尽管即将到来的部分涉及深度学习架构、嵌入和其他技术——这些元素可能并不严格符合传统算法的定义——但为了在整个章节中保持语义一致性,我们将它们称为“算法”。通过这种方式,我们希望促进对我们将要探讨的细微概念的更流畅理解。

卷积神经网络

卷积神经网络CNN)是一种专门设计用于处理和分析图像数据的深度学习架构。它从动物视觉皮层的功能中汲取灵感。在视觉皮层中,单个神经元对视觉场中特定子区域的视觉刺激做出反应。这些由不同神经元覆盖的子区域部分重叠,以覆盖整个视觉场。同样,在 CNN 中,不同的滤波器被应用于与图像的子区域交互,捕捉并响应该区域内的信息。这使得 CNN 能够从图像数据中提取有意义的特征和模式。

CNN 架构由多个层组成,这些层按照一定模式重复。每一层都有不同的子层,具有特定的功能。卷积层在从输入图像中提取特征方面起着至关重要的作用。它利用卷积滤波器,这些滤波器是由高度和宽度定义的矩阵,以提取相关特征。这些卷积层通过将滤波器与输入图像进行卷积处理输入图像,产生特征图,并将其传递到网络中的下一层。

在一个或多个卷积层之后,发现了一个池化层,它减少了提取的特征的维度。它将多个输出组合成一个输出,从而得到一个更紧凑的表示。两种常用的池化技术是最大池化,它从输出中选择最大值,以及平均池化,它计算平均值。

在卷积和池化层之后,使用一个全连接层来组合和展平前一层输出的结果。该层聚合提取的特征,并将它们输入到输出层,通常用于图像分类等任务。

CNN 的架构在以下图中展示,展示了信息通过各个层的流动:

图 3.9 – CNN 架构

图 3.10:CNN 架构

由于 CNN 具有高度的并行性,因此基于 CNN 的模型提供了高效的训练。这对于涉及大规模图像数据的任务特别有利,因为并行处理可以显著加快训练时间。虽然 CNN 主要用于计算机视觉任务,但它们的成功已经导致它们在其他领域也得到了应用,包括自然语言处理。通过适应卷积和层次特征提取的原则,CNN 在文本分类和情感分析等任务中显示出希望。这证明了基于 CNN 的模型在计算机视觉传统应用之外的灵活性和有效性。

CNNs 有其局限性。由于复杂的架构,CNNs 缺乏可解释性,表现得像黑盒。这使得当模型可解释性至关重要时,它们不适用。此外,CNNs 需要大量的训练数据集来正确学习特征并避免过拟合。它们在较小数据集上的性能显著下降。

ResNet

随着计算机视觉任务复杂性的增加,在卷积神经网络(CNNs)中增加更多层可以增强其图像分类能力,通过学习越来越复杂的特征。然而,随着 CNN 架构中层数的增加,性能可能会下降。这通常被称为梯度消失问题,其中来自初始输入的信号,包括关键信息,在穿过 CNN 的多个层时逐渐减弱。

残差网络ResNet)通过实现层跳过技术来解决梯度消失问题。ResNet 不是按顺序通过每一层处理信号,而是引入了跳过连接,允许信号绕过某些层。这可以想象成一条出口较少的高速公路,使得早期层的信号得以保留并向前传递而不会损失。ResNet 架构在以下图中展示。

图 3.10 – ResNet 架构

图 3.11:ResNet 架构

ResNet 可用于不同的计算机视觉任务,如图像分类目标检测(检测图片中的所有对象)以及产生比传统 CNN 网络精度更高的模型。然而,ResNet 的一个潜在缺点是由于引入了跳过连接,计算复杂度增加。额外的连接需要更多的内存和计算资源,使得训练和推理比浅层架构更昂贵。

自然语言处理(NLP)问题的算法

自然语言处理(NLP)关注计算机与人类语言之间的关系。它涉及处理和分析大量自然语言数据,目的是使计算机能够理解人类语言背后的含义并从中提取有价值的信息。NLP 涵盖了数据科学领域内的广泛任务。其中一些任务包括文档分类、主题建模、语音转文本、文本生成语音、从文本中提取实体、语言翻译、理解和回答问题、阅读理解以及语言生成。

机器学习算法不能直接处理原始文本数据。为了有效地训练自然语言处理模型,有必要将输入文本中的单词转换成其他单词、句子或文档上下文中的数值表示。在嵌入技术发展之前,有两种广泛用于表示文本中单词相关性的方法:词袋模型BOW)和词频-逆文档频率TF-IDF)。

BOW(词袋模型)简单来说就是文本(文档)中单词出现的计数。例如,如果输入的文档是“我需要去银行存款”和“我沿着河岸散步”,并且你计算每个输入文档中每个独特单词的出现次数,你会得到单词“I”的计数为1,在第一个文档中单词“to”的计数为3,仅作为一个例子。如果我们有两个文档中所有独特单词的词汇表,第一个文档的向量表示可以是 [1 1 3 1 1 1 1 1 1 0 0 0 0 0],其中每个位置代表词汇表中的一个独特单词(例如,第一个位置代表单词“I”,第三个位置代表单词“to”)。现在,这个向量可以被输入到机器学习算法中,以训练文本分类等模型。BOW 背后的主要思想是,在文本中,出现频率更高的单词具有更强的权重。

TF-IDF 有两个组成部分。第一个组成部分,TF,是词汇表中的单词在文档中出现的次数与文档中总单词数的比率。使用前面的第一个文档,单词“I”在第一句话中的 TF 值为1/11,而单词“walk”的 TF 值为0/11,因为“walk”没有出现在第一句话中。虽然 TF 衡量一个单词在文本上下文中的重要性,但 IDF 组件衡量一个单词在整个文档集中的重要性。从数学上讲,它是文档数量与包含该单词的文档数量的比率的对数。一个单词的 TF-IDF 最终值将是TF项乘以IDF项。一般来说,TF-IDF 比 BOW 效果更好。

虽然 BOW 和 TF-IDF 对于自然语言处理任务很有用,但它们缺乏捕捉单词语义意义的能力,并且经常导致输入向量大且稀疏。这就是嵌入概念发挥关键作用的地方。

嵌入是一种用于生成单词或句子低维表示(数学向量)的技术,它能够捕捉文本的语义意义。其基本思想是,具有相似语义意义的单词或句子往往出现在相似的环境中。在多维空间中,语义相似实体的数学表示彼此更接近,而意义不同的实体则更远。例如,如果我们考虑与运动相关的单词,如足球、网球和自行车,它们在高度嵌入空间中的嵌入会彼此靠近,这是通过诸如余弦相似度等度量来衡量的,余弦相似度通过计算它们之间角度的余弦值来衡量两个向量之间的相似度。嵌入向量代表了单词的内在意义,每个维度代表与单词相关联的特定属性。在多维空间中可视化嵌入显示了相关实体的邻近性。以下图表提供了这个多维空间中邻近性的视觉描述:

图 3.11 – 嵌入表示

图 3.12:嵌入表示

现在,嵌入已经成为在大多数 NLP 任务中取得良好结果的关键组成部分。与简单的词频统计等其他技术相比,嵌入提供了更有意义的底层文本表示。这导致了它们在各种针对 NLP 设计的 ML 算法中的广泛应用。在本节中,我们将深入研究这些算法,如 BERT 和 GPT,探讨它们在 NLP 任务背景下的具体应用和优势。

Word2Vec

托马斯·米科尔洛夫于 2013 年创建了Word2Vec。它支持两种不同的学习嵌入的技术:连续词袋模型CBOW)和连续跳字模型。CBOW 试图预测给定窗口周围单词的一个单词,而连续跳字模型则试图预测给定单词的周围单词。Word2Vec 的训练数据集可以是任何可用的运行文本,例如维基百科。CBOW 生成训练数据集的过程是在运行文本上运行一个滑动窗口(例如,五个单词的窗口)并选择其中一个单词作为目标,其余作为输入(不考虑单词的顺序)。在连续跳字模型的情况下,目标和输入是相反的。有了训练数据集,问题可以转化为一个多类分类问题,其中模型将学习预测目标单词的类别(例如,词汇表中的单词)并为每个预测的单词分配一个概率分布。

Word2Vec 嵌入可以使用简单的单隐藏层 MLP 网络进行训练。在这种方法中,MLP 网络的输入是一个表示邻近单词的矩阵,而输出是目标单词的概率分布。在训练过程中,隐藏层的权重被优化,一旦训练完成,这些权重就作为单词的实际嵌入。生成的嵌入捕捉了单词的语义关系和上下文意义,使得它们可以在各种自然语言处理任务中有效利用。

由于大规模词嵌入训练可能成本高昂且耗时,Word2Vec 嵌入通常作为预训练任务进行训练,以便它们可以方便地用于下游任务,如文本分类或实体提取。这种将嵌入用作下游任务特征的方法称为基于特征的应用。公共领域中有预训练的嵌入(例如,Tomas Mikolov 的 Word2Vec 和斯坦福大学的 GloVe),可以直接使用。这些嵌入是每个单词与其向量表示之间的1:1映射。

BERT

Word2Vec 为词汇表中的每个单词生成一个固定的嵌入表示,忽略了意义在上下文中的变化。然而,单词的意义可能因它们被使用的具体上下文而有所不同。例如,“bank”一词可以指代金融机构或水体旁边的土地。为了解决这个问题,已经开发出了上下文化的词嵌入。这些嵌入考虑了单词周围的其他单词或单词出现的整体上下文,从而允许更细腻和上下文感知的表示。通过考虑上下文,这些嵌入捕捉了单词可能具有的多种意义,使得在下游任务中可以进行更准确和上下文特定的分析。

BERT,即来自 Transformer 的双向编码器表示,是一种通过以下方式考虑上下文的语言模型:

  • 预测句子(上下文)中随机遮蔽的单词并考虑单词的顺序。这也被称为语言模型

  • 从给定的句子中预测下一个句子。

2018 年发布,这种上下文感知的嵌入方法为单词提供了更好的表示,可以显著提高诸如阅读理解情感分析命名实体识别等语言任务。此外,BERT 在子词级别(例如,单词和字符之间的一个片段,例如,单词 embeddings 被分解为 embeddings)生成嵌入。这使得它可以处理 Word2Vec 的另一个限制——词汇表外OOV)问题,Word2Vec 只生成已知单词的嵌入,并将 OOV 单词简单地视为未知。

要使用 BERT 获得词嵌入,其过程与 Word2Vec 中使用的直接词到向量的映射不同。相反,句子被输入到一个预训练的 BERT 模型中,并动态地提取嵌入。这种方法生成的嵌入是在给定句子的上下文中上下文化的。除了词级嵌入外,BERT 还能够生成整个句子的嵌入。预训练是指使用输入标记学习嵌入的过程,以下图展示了 BERT 模型为此目的所涉及到的组件。

图 3.13 – BERT 模型预训练

图 3.13:BERT 模型预训练

在架构上,BERT 主要使用一个称为transformer的构建块。transformer 内部有一堆编码器和一堆解码器,它将一个输入序列转换成另一个序列。每个编码器有两个组成部分:

  • 自注意力层主要计算一个标记(表示为一个向量)与输入句子中所有其他标记之间的连接强度,这种连接有助于每个标记的编码。关于自注意力的一种思考方式是句子中哪些词比句子中的其他词更紧密地连接。例如,如果输入句子是The dog crossed a busy street,那么我们会说单词dogcrossed与单词The的连接比单词abusy的连接更强,而后者将与单词street有较强的连接。自注意力层的输出是一系列向量;每个向量代表原始输入标记以及它在输入中与其他单词的重要性。

  • 前馈网络层(单隐藏层 MLP)从自注意力层的输出中提取高级表示。

在解码器内部,也存在一个自注意力层和前馈层,以及一个额外的编码器-解码器层,这有助于解码器关注输入中的正确位置。

在 BERT 的情况下,只使用了 transformer 的编码器部分。BERT 可以用于多种 NLP 任务,包括问答文本分类命名实体提取文本摘要。当它发布时,在许多任务中实现了最先进的性能。BERT 预训练也被应用于不同的领域,如科学文本和生物医学文本,以理解特定领域的语言。以下图展示了如何使用微调技术使用预训练的 BERT 模型训练一个问答任务的模型:

图 3.14 – BERT 微调

图 3.14:BERT 微调

虽然 BERT 的预训练嵌入可以提取用于下游任务,如文本分类和问答,但使用其预训练嵌入的一种更直接的方法是通过一种称为微调的技术。通过微调,BERT 网络中添加了一个额外的输出层以执行特定任务,例如问答或实体提取。在微调过程中,加载预训练模型,并插入特定任务的输入(例如,问答中的问题/段落对)和输出(段落中答案的起始/结束和跨度)以微调特定任务的模型。通过微调,预训练模型的权重得到更新。

生成式 AI 算法

尽管像 ChatGPT 这样的技术已经普及了生成式 AI,但生成模型的概念并不新鲜。生成对抗网络(GANs),作为生成式 AI 技术的突出例子,已经存在多年,并在各种实际应用领域取得了成功,其中图像合成是一个显著的应用。生成式 AI 已成为最具变革性的 AI 技术之一,我专门在第十五章和第十六章中深入探讨了实际生成式 AI 用例、实用技术解决方案和伦理考量。在本章中,我们将熟悉几种生成式 AI 算法。

生成对抗网络

GAN 是一种旨在生成真实数据实例的生成模型,例如图像。它采用由生成器和判别器组成的两部分网络。生成器网络负责生成实例,而判别器网络学习区分生成器生成的真实和假实例。这种对抗性设置鼓励生成器不断改进其生成越来越真实数据实例的能力。

图 3.16 – 生成对抗网络

图 3.15:GAN

在训练过程中,GAN 中的判别器网络暴露于两种不同的数据源:一种来自真实数据集,作为正例,另一种来自生成器网络,生成合成或假样本。判别器被训练以分类和区分真实和假样本,优化其损失以准确预测每个样本的来源。相反,生成器网络被训练以生成看起来与真实数据不可区分的合成数据,目的是欺骗判别器。当判别器正确识别其生成的数据为假时,生成器会受到惩罚。

两个网络都使用反向传播来学习和更新它们的参数,使它们能够迭代地改进。在生成阶段,生成器被提供随机输入以产生新的合成样本。在整个训练过程中,生成器和判别器网络交替以连接方式训练,使它们能够作为一个统一系统学习和优化它们的性能。

GANs 在生成能够欺骗人类的逼真图像方面取得了很大的成功。它们可以应用于许多应用,例如将草图转换为逼真的图像,将文本输入转换为与文本对应的图像,以及生成逼真的人类面孔。然而,在训练期间使 GANs 收敛和稳定可能很困难,导致学习失败等问题。此外,在逼真图像生成方面出现了新的技术,它们比 GANs 的能力要强得多。

生成预训练转换器(GPT)

与 BERT 不同,BERT 需要使用大型特定领域数据集进行微调,以针对不同的下游 NLP 任务,而生成预训练转换器GPT),由OpenAI开发,只需看到几个示例(或没有示例)就能学习如何执行任务。这个过程被称为少样本学习零样本学习。在少样本场景中,GPT 模型被提供几个示例、任务描述和提示,然后模型将使用这些输入并开始逐个生成输出标记。例如,当使用 GPT-3 进行翻译时,任务描述可以是“将英语翻译成中文”,训练数据将包括一些从英语句子翻译成中文句子的示例。要使用训练好的模型翻译新的英语句子,你提供英语句子作为提示,然后模型生成相应的中文翻译文本。需要注意的是,少样本或零样本学习不涉及更新模型的参数权重,这与微调技术不同。

GPT,就像 BERT 一样,以 Transformer 架构作为其主要组件,并采用了一种称为下一个词预测的训练方法。这包括预测给定输入词序列后应跟的单词。然而,GPT 与 BERT 不同,它仅使用 Transformer 解码器块,而 BERT 使用 Transformer 编码器块。与 BERT 一样,GPT 通过包含掩码词来学习嵌入。然而,与 BERT 随机掩码单词并预测缺失的单词不同,GPT 将自注意力计算限制为排除目标词右侧的单词。这种方法被称为掩码自注意力。

GPT 及其聊天机器人界面 ChatGPT 在众多传统的自然语言处理任务中展示了卓越的能力,如语言建模、语言翻译和问答。此外,它们在开创性领域如生成编程代码或机器学习代码、编写网站内容以及回答问题方面也证明了其有效性。因此,GPT 为一种新的 AI 范式——生成式 AI 铺平了道路。

大型语言模型

大型语言模型LLMs)是一类能够生成文本、翻译语言、创作内容以及为问题提供信息性答案的生成式人工智能模型。LLMs 在包含文本和代码的广泛数据集上训练,拥有数十亿个模型参数,这使得它们能够理解和学习词语和短语之间的统计模式和关系。例如,经过训练后,LLM GPT-3 拥有 1750 亿个参数。这种训练使得 LLMs 能够有效地处理和生成跨越广泛应用的类似人类的文本。虽然 GPTs 是 LLMs 的一个显著例子,但近年来开源社区和其他公司也开发了额外的 LLMs,主要使用类似的基于 Transformer 的架构。LLMs 也被称为基础模型。与为特定任务训练的传统机器学习模型不同,基础模型是在大量数据集上预训练的,可以处理多个任务。此外,基础模型还可以进行微调和适应额外任务。基础模型的卓越能力和适应性发现了许多以前难以解决的令人兴奋的 AI 应用。现在,让我们简要回顾一下其他一些流行的基础模型:

  • Google 的 Pathways 语言模型PaLM)是一个仅具有解码器功能的 5400 亿参数 Transformer 模型。它提供了与 GPT 类似的特性,包括文本生成、翻译、代码生成、问答、摘要以及支持创建聊天机器人。PaLM 使用一种名为 Pathways 的新架构进行训练。Pathways 是一种模块化架构,意味着它由模块组成,每个模块负责特定任务。

  • Meta 的大型语言模型 Meta AILLaMA)是一个从 70 亿参数到 650 亿参数的多种尺寸的 LLM。与 GPT 和 PaLM 相比,它是一个较小的模型,但提供了几个优势,例如需要较少的计算资源。LLaMA 提供了与其他 LLM 类似的特性,如生成创意文本、回答问题和解决数学问题。Meta 为 LLaMA 发布了非商业许可证,强调其在研究环境中的使用。当 LLaMA 与额外的训练数据进行微调时,它被发现表现极为出色。

  • 大科学 BLOOM是一个拥有 1760 亿参数的 LLM,能够用 46 种不同的语言和 13 种编程语言生成文本。BLOOM 的开发涉及来自 70 多个国家和 250 多个机构的 1000 多名研究者的协作努力。作为负责任的 AI 许可证的一部分,同意其条款的个人和机构可以在他们的本地机器或云平台上使用和构建该模型。该模型在 Hugging Face 生态系统中易于访问。

  • 彭博 BloombergGPT – 虽然像 GPT 和 LLaMA 这样的通用 LLM 在不同的领域域中可以很好地执行各种任务,但像金融服务和生命科学这样的领域需要特定领域的 LLM 来解决针对特定领域的难题。BloombergGPT 是专门为行业训练的领域特定 LLM 的例子。BloombergGPT 在将这项技术应用于金融方面取得了重大进步。该模型将增强现有的金融 NLP 任务,如情感分析、命名实体识别、新闻分类和问答等。利用其广泛的收集和策划资源,彭博利用其 40 年的金融语言文档档案,形成了一个包含 3630 亿个标记的全面数据集,包括英语金融文档。该数据集通过一个 3450 亿个标记的公共数据集进行了增强,从而产生了超过 7000 亿个标记的训练语料库。

虽然这些 LLM 模型已经展示了非凡的能力,但它们也伴随着重大的局限性,包括生成错误信息(幻觉)和有害内容,以及显示潜在的偏见。LLM 在训练和运行时也消耗了大量的资源。值得注意的是,虽然 LLM 可以帮助解决一些新问题,但许多常见问题(例如,命名实体提取、文档分类、情感分析)已经通过现有的 NLP 技术得到解决,这些技术仍然是这些任务的可行选项。

扩散模型

最近,AI 在生成高分辨率、逼真图像以及以前未见过的生成艺术或精确操纵图像方面的非凡能力引起了广泛关注。所有这些令人惊叹的能力背后是一个新的深度学习模型,称为扩散模型。在深度学习和 GANs 的基础上,扩散模型引入了一种生成高质量、逼真数据实例的新方法。

与试图通过欺骗判别网络生成逼真假图像的 GANs 不同,扩散模型通过首先在输入数据(例如,图像)上逐步添加噪声,经过许多步骤,直到输入数据无法识别,这个过程称为扩散步骤。

然后,该模型被训练以从噪声到原始数据的扩散步骤进行逆向操作。从更技术性的角度来说,扩散模型的训练过程涉及通过反向传播优化一组可学习的参数。模型通过最大化给定一系列扩散步骤的训练数据的似然性来学习生成逼真的样本。这个迭代过程允许模型捕捉复杂的依赖关系、复杂的模式和结构,并生成高度逼真和多样化的数据实例。以下图示说明了这个过程:

图 3.16:扩散模型的工作原理

此外,扩散模型在生成过程中提供了灵活性和可控性。通过调整扩散步骤,可以控制样本质量和多样性之间的权衡。这使用户能够微调模型以满足他们的特定需求,无论是强调对训练数据的忠实度,还是鼓励更多创造性和新颖的输出。与 GANs 相比,扩散模型可以生成更逼真的图像,并且比 GANs 更稳定。

扩散模型在计算机视觉、自然语言处理和音频合成等各个领域都显示出巨大的潜力。它生成具有精细细节的高质量数据的能力为图像生成、视频预测、文本生成等应用开辟了令人兴奋的可能性。

开源社区和私营公司已经基于这种扩散方法开发了众多模型。其中两个值得提到的流行模型是 Stable Diffusion 和 DALL-E 2:

  • OpenAI 的 DALL-E 2:DALL-E 2 是由 OpenAI 开发的一种文本到图像模型。DALL-E 2 使用图像和文本描述的数据集进行训练。首次发布于 2022 年 1 月,DALL-E 2 在从文本描述生成和操作图像方面显示出非凡的能力。它还应用于图像修复(修改图像中的区域)、图像扩展(扩展图像)和图像到图像的翻译。DALL-E 2 生成的图像通常与真实图像难以区分,可用于各种目的,如创作艺术和生成营销材料。从模型训练的角度来看,DALL-E 2 的训练包括两个关键步骤:

    • 链接文本语义和视觉表示:这一步涉及学习如何将一段文本,例如“一个戴帽子的男人”,在语义上与实际的“一个戴帽子的男人”图像相联系。为此,DALL-E 2 使用一种称为对比语言-图像预训练CLIP)的模型。CLIP 使用数亿张图像及其相关描述进行训练。训练完成后,它可以根据一段文本描述输出一个文本条件下的视觉编码。您可以在openai.com/research/clip了解更多关于 CLIP 的信息。

    • 从视觉嵌入生成图像:这一步学习从 CLIP 生成的视觉嵌入中逆向生成图像。为此步骤,DALL-E 2 使用了一个名为 GLIDE 的模型,该模型基于扩散模型。您可以在arxiv.org/abs/2112.10741了解更多关于 GLIDE 的信息。

    模型训练完成后,DALL-E 2 可以生成与输入文本描述密切相关的新图像。

  • Stable Diffusion by Stability AI:Stable Diffusion 是由慕尼黑路德维希-马克西米利安大学的计算机视觉研究小组 Compvis 开发并由 Stability AI 主要赞助的算法。该模型也是一个使用真实图像和文本描述的数据集进行训练的文本到图像模型,这使得模型能够使用文本描述生成逼真的图像。首次发布于 2022 年 8 月,Stable Diffusion 已被证明在从文本描述生成高质量图像方面非常有效。在架构上,它使用 CLIP 编码器对模型进行文本描述的条件化,并使用 UNET 作为去噪神经网络从视觉编码中生成图像。它是一个开源模型,代码和模型权重已公开发布。您可以在github.com/CompVis/stable-diffusion上获取更多关于 Stable Diffusion 的详细信息。

尽管扩散模型非常强大,但它们确实带来了一些担忧,包括版权侵权和有害图像的创建。

动手练习

在这个动手练习中,我们将在您的本地机器上构建一个Jupyter Notebook环境,并在您的本地环境中构建和训练一个 ML 模型。练习的目标是熟悉设置本地数据科学环境的安装过程,然后学习如何使用我们在前面章节中介绍的一种算法来分析数据、准备数据和训练 ML 模型。首先,让我们看一下问题陈述。以下图表说明了流程:

图片

图 3.17:ML 问题解决流程

让我们开始吧。

问题陈述

在我们开始之前,让我们首先回顾一下我们需要解决的商业问题。一家零售银行一直在经历其零售银行业务的高客户流失率。为了主动实施预防措施以减少潜在的流失,银行需要知道潜在的流失者是谁,这样银行就可以直接针对这些客户提供激励措施,以防止他们离开。从商业角度来看,吸引新客户比提供激励措施以保留现有客户要昂贵得多。

作为一名 ML 解决方案架构师,您被要求运行一些快速实验以验证该问题的 ML 方法。目前没有可用的 ML 工具,因此您决定在您的本地机器上设置一个 Jupyter 环境来完成这项任务。

数据集描述

您将使用 Kaggle 网站上的银行客户流失数据集进行建模。您可以通过 www.kaggle.com/mathchi/churn-for-bank-customers 访问数据集。请注意,您需要 Kaggle 账户才能下载文件。该数据集包含 14 个特征列,如信用评分、性别和余额,以及一个目标变量列 Exited,用于指示客户是否流失。我们将在后面的章节中更详细地审查这些特征。

设置 Jupyter Notebook 环境

现在,让我们设置一个本地数据科学环境,用于数据分析和实验。我们将使用您本地计算机上的流行 Jupyter Notebook。在本地机器上设置 Jupyter Notebook 环境包括以下关键组件:

  • Python:Python 是一种通用编程语言,也是数据科学工作中最受欢迎的编程语言之一。安装说明可以在 www.python.org/downloads 找到。

  • PIP:PIP 是一个 Python 包安装程序,用于安装不同的 Python 库包,如机器学习算法、数据处理库或可视化库。安装说明可以在 pip.pypa.io/en/stable/installation/ 找到。

  • Jupyter Notebook:Jupyter Notebook 是一个用于编写包含代码、描述和/或可视化的文档(称为笔记本)的 Web 应用程序。它是数据科学家用于实验和建模最受欢迎的工具之一。安装说明可以在 jupyter.org/install 找到。

运行练习

按照以下步骤运行实验室:

  1. 环境配置完成后,让我们开始实际的数据科学工作。首先,下载数据文件:

    1. 让我们在本地机器上创建一个名为 MLSALab 的文件夹来存储所有文件。您可以在本地机器上的任何位置创建该文件夹,只要您能访问它。我有一个 Mac,所以我直接在默认用户的 Documents 文件夹中创建了一个。

    2. MLSALab 文件夹下创建另一个名为 Lab1-bankchurn 的子文件夹。

    3. 访问 www.kaggle.com/mathchi/churn-for-bank-customers 网站,下载数据文件(一个存档文件),并将其保存到 MSSALab/Lab1-bankchurn 文件夹中。如果您还没有账户,请创建一个 Kaggle 账户。在文件夹内解压存档文件,您将看到一个名为 churn.csv 的文件。现在您可以删除存档文件。

  2. 启动 Jupyter Notebook:

    1. 在终端窗口(或 Windows 系统的命令提示符窗口)中,导航到 MLSALab 文件夹,并运行以下命令以在您的机器上启动 Jupyter Notebook 服务器:

      jupyter notebook 
      

      将打开一个浏览器窗口并显示 Jupyter Notebook 环境(见以下截图)。有关 Jupyter Notebook 如何工作的详细说明超出了本实验的范围。如果您不熟悉 Jupyter Notebook 的工作方式,您可以在互联网上轻松找到相关信息:

      图 3.17 – Jupyter Notebook

      图 3.18:Jupyter Notebook

    2. 点击 Lab1-bankchurn 文件夹,您将看到 churn.csv 文件。

  3. 现在,让我们在 Jupyter Notebook 环境中创建一个新的数据科学笔记本。为此,点击 新建 下拉菜单并选择 Python 3(见以下截图):图 3.18 – 创建新的 Jupyter 笔记本

    图 3.19:创建新的 Jupyter 笔记本

  4. 您将看到一个类似于以下截图的屏幕。这是一个空的笔记本,我们将使用它来探索数据和构建模型。In [ ]: 旁边的部分称为 单元格,我们将在此单元格中输入代码。要运行单元格中的代码,您点击工具栏上的 运行 按钮。要添加新的单元格,您点击工具栏上的 + 按钮:图 3.19 – 空的 Jupyter 笔记本

    图 3.20:空的 Jupyter 笔记本

  5. 通过点击工具栏上的 + 按钮添加新的单元格,在第一个空单元格中输入以下代码块,并通过点击工具栏上的 运行 按钮来运行单元格。此代码块下载了用于数据处理(pandas)、可视化(matplotlib)以及模型训练和评估(scikit-learn)的多个 Python 包。我们将在第五章 探索开源机器学习库 中更详细地介绍 scikit-learn。我们将在以下章节中使用这些包:

    ! pip3 install pandas
    ! pip3 install matplotlib
    ! pip3 install scikit-learn 
    
  6. 现在,我们可以加载数据并探索。在新的单元格中添加以下代码块以加载 Python 库包并从 churn.csv 文件加载数据。您将看到一个包含 14 列的表格,其中 Exited 列是目标列:

    import pandas as pd
    churn_data = pd.read_csv("churn.csv")
    churn_data.head() 
    
  7. 您可以使用以下命令使用多种工具探索数据集,以理解信息,例如 数据集统计不同特征之间的成对相关性数据分布describe() 函数返回有关数据的基本统计信息,例如均值、标准差、最小值和最大值,针对每个数值列。

    hist() 函数绘制所选列的直方图,而 corr() 计算数据中不同特征之间的相关矩阵。请在新的单元格中逐个尝试它们,以了解数据:

    # The following command calculates the various statistics for the features.
    churn_data.describe()
    # The following command displays the histograms for the different features.  
    # You can replace the column names to plot the histograms for other features
    churn_data.hist(['CreditScore', 'Age', 'Balance'])
    # The following command calculate the correlations among features
    churn_data.corr() 
    
  8. 为了用于模型训练,数据集需要进行转换。以下代码块将GeographyGender值从分类字符串转换为序数,以便它们可以被 ML 算法后续使用。请注意,模型准确性不是这个练习的主要目的,我们进行序数转换是为了演示。我们将在这个练习中使用一个流行的 Python ML 库,即 sklearn。Sklearn 也是最容易使用和理解的库之一,特别是对于初学者。我们还会在第五章,探索开源 ML 库中更详细地讨论这个库。请在新的单元格中复制并运行以下代码块:

    from sklearn.preprocessing import OrdinalEncoder
    encoder_1 = OrdinalEncoder()
    encoder_2 = OrdinalEncoder()
    churn_data['Geography_code'] = encoder_1.fit_transform(
      churn_data[['Geography']]
    )
    churn_data['Gender_code'] = encoder_2.fit_transform(
      churn_data[['Gender']]
    ) 
    
  9. 通常,可能有一些列对于模型训练不是必需的,因为它们不会对模型的预测能力做出贡献,或者从包含的角度来看可能会引起偏差。我们可以使用以下代码块来删除它们:

    churn_data.drop(columns = ['Geography','Gender','RowNumber','Surname'], inplace=True) 
    
  10. 现在,数据集只包含我们关心的特征。接下来,我们需要将数据分为训练集和验证集。我们还通过从其余输入特征中分割目标变量Exited来准备每个数据集。请在新的单元格中输入并运行以下代码块:

    # we import the train_test_split class for data split
    from sk.model_selection import train_test_split
    # Split the dataset into training (80%) and testing (20%).
    churn_train, churn_test = train_test_split(
      churn_data, test_size=0.2
    )
    # Split the features from the target variable "Exited" as it is required for model training
    # and validation later.
    churn_train_X = churn_train.loc[:, churn_train.columns != 'Exited']
    churn_train_y = churn_train['Exited']
    churn_test_X = churn_test.loc[:, churn_test.columns != 'Exited']
    churn_test_y = churn_test['Exited'] 
    
  11. 我们已经准备好训练模型。请在新的单元格中输入并运行以下代码块。在这里,我们将使用随机森林算法来训练模型,fit()函数启动模型训练:

    # We will use the Random Forest algorithm to train the model
    from sklearn.ensemble import RandomForestClassifier
    bank_churn_clf = RandomForestClassifier(
      max_depth=2, random_state=0
    )
    bank_churn_clf.fit(churn_train_X, churn_train_y) 
    
  12. 最后,我们将使用test数据集来测试模型的准确性。在这里,我们使用predict()函数获取模型返回的预测值,然后使用accuracy_score()函数通过预测值(churn_prediction_y)和测试数据集的真实值(churn_test_y)来计算模型的准确性:

    # We use the accuracy_score class of the sklearn library to calculate the accuracy.
    from sklearn.metrics import accuracy_score
    # We use the trained model to generate predictions using the test dataset
    churn_prediction_y = bank_churn_clf.predict(churn_test_X)
    # We measure the accuracy using the accuracy_score class.
    accuracy_score(churn_test_y, churn_prediction_y) 
    

恭喜!你已经在本地机器上成功安装了 Jupyter 数据科学环境,并使用随机森林算法训练了一个模型。你已经验证了 ML 方法有可能解决这个商业问题。

摘要

在本章中,我们探讨了各种可以应用于解决不同类型机器学习(ML)问题的 ML 算法。到目前为止,你应该对哪些算法适合哪些特定任务有了很好的理解。此外,你已经在本地机器上设置了一个基本的数据科学环境,利用 scikit-learn ML 库来分析和预处理数据,并成功训练了一个 ML 模型。

在接下来的章节中,我们的重点将转向数据管理和 ML 生命周期的交集。我们将深入研究有效数据管理的重要性,并讨论如何构建一个综合性的数据管理平台在亚马逊网络服务AWS)上以支持下游的 ML 任务。这个平台将提供必要的基础设施和工具来简化数据处理、存储和检索,从而最终提高整体的 ML 工作流程。

加入我们的 Discord 社区

加入我们社区的 Discord 空间,与作者和其他读者进行讨论:

packt.link/mlsah

第四章:机器学习的数据管理

作为机器学习解决方案架构师,我经常收到关于设计机器学习工作负载的数据管理平台的指导请求。尽管数据管理平台架构通常被视为一个独立的技术学科,但它对机器学习工作负载起着至关重要的作用。为了创建一个全面的机器学习平台,机器学习解决方案架构师必须了解机器学习的基本数据架构考虑因素,并熟悉满足数据科学家和自动化机器学习管道需求的数据管理平台的技术设计。

在本章中,我们将探讨数据管理和机器学习(ML)的交汇点,讨论为机器学习量身定制的数据管理平台的关键考虑因素。我们将深入研究此类平台的核心架构组件,并检查可用于构建该平台的相关 AWS 技术和服务。

以下内容将涵盖:

  • 机器学习的数据管理考虑因素

  • 机器学习的数据管理架构

  • 实践练习 – 机器学习的数据管理

技术要求

在本章中,您需要访问 AWS 账户以及 AWS 服务,如Amazon S3Amazon Lake FormationAWS GlueAWS Lambda。如果您没有 AWS 账户,请按照 AWS 官方网站的说明创建账户。

机器学习的数据管理考虑因素

数据管理是一个广泛且复杂的话题。许多组织都设有专门的数据管理团队和组织来管理和治理数据平台的各种方面。从历史上看,数据管理主要围绕满足事务系统和分析系统的需求展开。然而,随着机器学习解决方案的兴起,在考虑数据管理平台时,现在还需要考虑额外的商业和技术因素。机器学习的出现引入了新的需求和挑战,这需要数据管理实践的发展,以有效地支持这些高级解决方案。

为了理解数据管理如何与机器学习工作流程相交,让我们回顾一下以下图中所示的机器学习生命周期:

图 4.1 – 数据管理和机器学习生命周期的交汇

图 4.1:数据管理和机器学习生命周期的交汇

在高层次上,数据管理在三个阶段与机器学习生命周期相交:数据理解和准备模型训练和评估以及模型部署

数据理解和准备阶段,数据科学家需要执行多项基本任务。他们首先识别与建模任务相关的合适数据集的数据来源。然后进行探索性数据分析,以了解数据集,包括数据统计、特征之间的相关性以及数据样本分布。此外,为模型训练和验证准备数据至关重要,通常包括以下步骤:

  • 数据验证:检查数据中的错误和异常,以确保其质量。这包括验证数据范围、分布和数据类型,并识别缺失或空值。

  • 数据清洗:任何识别出的数据错误都需被修正或更正,以确保数据集的准确性和一致性。这可能包括删除重复项、处理缺失值或解决不一致性。

  • 数据丰富:通过合并不同数据集或转换数据等技术从数据中提取额外价值。这有助于生成新的信号和洞察,从而增强建模过程。

  • 数据标注:对于监督式机器学习模型训练,训练和测试数据集需要由人工标注员或机器学习模型准确标注。这一关键步骤对于确保高质量模型的发展和验证是必要的。

在这一阶段所需的数据管理能力包括以下方面:

  • 数据集发现:能够使用相关元数据(如数据集名称、描述、字段名称和数据所有者)搜索和定位经过整理的数据集。

  • 数据访问:能够访问原始和经过处理的数据集以执行探索性数据分析。这确保数据科学家可以有效地探索和分析数据。

  • 查询和检索:运行查询以针对选定数据集获取详细信息的能力,例如统计信息、数据质量指标和数据样本。此外,还包括将数据从数据管理平台检索到数据科学环境进行进一步处理和特征工程的能力。

  • 可扩展的数据处理:在大型数据集上高效执行数据处理操作的能力。这确保数据科学家在模型开发和实验过程中可以处理和加工大量数据。

模型训练和验证阶段,数据科学家负责生成训练和验证数据集以进行正式的模型训练。为了促进这一过程,以下数据管理能力是必不可少的:

  • 数据处理和自动化工作流:数据管理平台应提供强大的数据处理能力以及自动化工作流。这使将原始或整理好的数据集转换为适合模型训练的多种格式的训练和验证数据集成为可能。

  • 数据存储库和版本控制:一个高效的数据管理平台应提供专门的数据存储库来存储和管理训练和验证数据集。此外,它应支持版本控制,使数据科学家能够跟踪对数据集进行的不同迭代和修改,以及代码和训练好的机器学习模型的版本。

  • 数据标注:对于监督式机器学习模型训练,训练和测试数据集需要由人工标注员或机器学习模型准确标注。这一关键步骤对于确保高质量模型的发展和验证至关重要。这是一项劳动密集型任务,需要专门构建的软件工具来大规模完成。

  • 机器学习特征/嵌入生成和存储:一些机器学习特征/嵌入(例如,平均值、总和和文本嵌入)需要为一个或多个下游模型训练任务预先计算。这些特征/嵌入通常需要使用专门构建的工具进行管理,以实现高效的访问和重用。

  • 为模型训练提供数据集:平台应提供机制,将训练和验证数据集提供给模型训练基础设施。这确保了数据集可由训练环境访问,使数据科学家能够有效地训练模型。

在模型部署阶段,重点转向利用训练好的模型进行预测。为了有效地支持这一阶段,以下数据管理能力至关重要:

  • 为特征处理提供数据:数据管理平台应能够在调用部署的模型时,作为输入数据的一部分提供用于特征处理的数据。这确保了模型接收到生成预测所需的相关数据输入。

  • 提供预计算的特性和嵌入:在某些情况下,在调用部署的模型时,会使用预计算的特性和嵌入作为输入。数据管理平台应具备无缝提供这些预计算特性的能力,使模型能够将它们纳入预测过程。

与传统的事务或商业智能解决方案的数据访问模式不同,在这些模式中,开发者可以在较低的环境中利用非生产数据进行开发,数据科学家通常需要访问生产数据以进行模型开发。

在探讨了机器学习数据管理的考虑因素之后,我们将更深入地探讨专门为机器学习设计的机器学习数据管理架构。重要的是要理解,有效的数据管理对于应用机器学习的成功至关重要。组织在机器学习上失败的原因不仅仅是算法差或模型不准确,还可能是由于现实世界数据和生产系统的问题。数据管理的不足可能会使即使建模出色的人工智能项目失败。

机器学习的数据管理架构

根据你的 ML 倡议的规模,考虑不同的数据管理架构模式以有效支持它们是很重要的。正确的架构取决于组织内 ML 倡议的规模和范围,以便在业务需求和工程努力之间取得平衡。

对于具有有限数据范围、小型团队规模和最小跨职能依赖性的小型 ML 项目,一个专门构建的、满足特定项目需求的数据管道可能是一个合适的方法。例如,如果你的项目涉及从现有的数据仓库和公开可用的数据集中获取结构化数据,你可以考虑开发一个简单的数据管道。这个管道将从数据仓库和公共领域提取必要的数据,并将其存储在项目团队拥有的专用存储位置。此数据提取过程可以根据需要安排,以方便进一步的分析和处理。以下图表展示了一个简化的数据管理流程,旨在支持小型 ML 项目:

图 4.2 – 有限范围 ML 项目的数据架构

图 4.2:有限范围 ML 项目的数据架构

对于企业层面的大规模 ML 倡议,数据管理架构与企业分析非常相似。两者都需要对来自不同来源的数据摄取提供强大的支持,以及针对各种处理和访问需求的数据集中管理。虽然分析数据管理主要处理结构化数据,并且通常依赖于企业数据仓库作为其核心后端,但 ML 数据管理需要处理结构化、半结构化和非结构化数据以执行不同的 ML 任务。因此,通常采用数据湖架构。ML 数据管理通常是更广泛的企业数据管理策略的一部分,包括分析和 ML 倡议。

以下图表展示了一个包含关键组件如数据摄取、数据存储、数据处理、数据目录、数据安全和数据访问的逻辑企业数据管理架构:

图 4.3 – 企业数据管理

图 4.3:企业数据管理

在以下章节中,我们将深入分析企业数据管理的每个关键组件,提供对它们在云中使用 AWS 原生服务构建的数据管理架构中的功能和影响的深入了解。通过探索这些组件的具体特性和能力,我们将获得关于基于 AWS 的数据管理架构的整体结构和机制的有价值见解。

数据存储和管理

数据存储和管理是整体机器学习(ML)数据管理架构的基本组成部分。ML 工作负载通常需要来自不同来源和多种格式的数据,尤其是处理非结构化数据时,数据量可能非常庞大。

为了满足这些需求,云对象数据存储解决方案,如 Amazon S3,通常被用作底层存储介质。从概念上讲,云对象存储可以类比为一种能够容纳不同格式文件的文件存储系统。此外,存储系统允许使用前缀来组织文件,这些前缀作为虚拟文件夹,以增强对象管理。需要注意的是,这些前缀并不对应于物理文件夹结构。术语“对象存储”源于每个文件都被视为一个独立的对象,附带元数据,并分配一个唯一的标识符。对象存储具有诸如几乎无限的存储容量、基于元数据的强大对象分析、基于 API 的访问和成本效益等特性。

为了有效地处理存储在云对象存储中的大量数据,建议实施一个利用这种存储介质的数据湖架构。一个针对整个企业或特定业务线量身定制的数据湖,充当数据管理和访问的中心枢纽。设计用于容纳无限数据量,数据湖促进了数据在各个生命周期阶段(包括原始、转换、精选和 ML 特征数据)的组织。其主要目的是将分散的数据孤岛合并到一个单一的存储库中,以便为分析和 ML 需求提供集中式管理和访问。值得注意的是,数据湖可以容纳多种数据格式,如来自数据库的结构化数据、文档等非结构化数据、JSON 和 XML 格式的半结构化数据,以及包含图像、视频和音频文件的二进制格式。这种能力对于 ML 工作负载尤其有价值,因为 ML 通常涉及处理多种格式的数据。

数据湖应组织成不同的区域。例如,应建立一个着陆区作为来自不同来源的初始数据摄入的目标。在数据预处理和数据质量管理处理之后,数据可以被移动到原始数据区。原始数据区中的数据可以进一步转换和处理,以满足不同的业务和下游消费需求。为了进一步确保数据集的使用可靠性,数据可以被精选并存储在精选数据区中。对于 ML 任务,ML 特征通常需要预先计算并存储在 ML 特征区中,以便于重复使用。

AWS Lake Formation

AWS Lake Formation 是 AWS 提供的全面数据管理服务,它简化了在 AWS 平台上构建和维护数据湖的过程。以下图示说明了 AWS Lake Formation 的核心组件:

图 4.4 – AWS Lake Formation

图 4.4:AWS Lake Formation

总体而言,AWS Lake Formation 提供了四个基本功能来增强数据湖管理:

  • 数据源爬虫:此功能自动检查数据湖中的数据文件,以推断其底层结构,从而实现数据的有效组织和分类。

  • 数据目录创建和维护:AWS Lake Formation 促进了数据目录的创建和持续管理,提供了一个集中式元数据存储库,便于在数据湖中进行数据发现和探索。

  • 数据转换处理:凭借内置的数据转换功能,该服务允许处理和转换存储在数据湖中的数据,使数据科学家和分析人员能够使用精炼和优化的数据集进行工作。

  • 数据安全和访问控制:AWS Lake Formation 通过提供全面的访问控制机制和启用细粒度权限管理,确保数据仅由授权的个人和团队访问,从而确保数据安全。

Lake Formation 与 AWS Glue 集成,AWS Glue 是一个无服务器 提取、转换、加载ETL)和数据目录服务,以提供数据目录管理和数据 ETL 处理功能。我们将在后面的章节中分别介绍 ETL 和数据目录组件。

Lake Formation 提供了集中式数据访问管理功能,用于管理数据库、表或不同注册的 S3 位置的数据访问权限。对于数据库和表,权限可以细粒度地分配给单个表、列和数据库功能,例如创建表和插入记录。

数据摄取

数据摄取是数据源和数据存储之间的桥梁。它在从各种来源获取数据方面发挥着关键作用,包括结构化、半结构化和非结构化格式,如数据库、知识图谱、社交媒体、文件存储和物联网设备。其主要职责是将这些数据持久地存储在各种存储解决方案中,如对象数据存储(例如,Amazon S3)、数据仓库或其他数据存储。有效的数据摄取模式应结合实时流式传输和批量摄取机制,以满足不同类型的数据源,并确保及时高效的数据获取。

不同的数据摄入技术和工具满足不同的摄入模式。对于流数据摄入,流行的选择包括 Apache Kafka、Apache Spark Streaming 和 Amazon Kinesis/Kinesis Firehose。这些工具能够实现实时数据摄入和处理。另一方面,对于面向批次的摄入,常用的工具有安全文件传输协议SFTP)和 AWS Glue。特别是 AWS Glue,它为广泛的源和目标提供支持,包括 Amazon RDS、MongoDB、Kafka、Amazon DocumentDB、S3 以及任何支持 JDBC 连接的数据库。这种灵活性使得从各种来源无缝摄入数据到所需的数据存储或处理系统成为可能。

在决定使用哪些工具进行数据摄入时,根据实际需求评估工具和技术非常重要。以下是在决定数据摄入工具时的一些考虑因素:

  • 数据格式、大小和可扩展性:考虑各种数据格式、数据大小和可扩展性需求。机器学习项目可能使用来自不同来源和不同格式的数据(例如,CSVParquet、JSON/XML、文档或图像/音频/视频文件)。确定在必要时基础设施是否能够高效地处理大量数据,并在低量期间缩减规模以降低成本。

  • 摄入模式:考虑需要支持的不同数据摄入模式。工具或几个工具的组合应支持批量摄入模式(在特定时间间隔传输大量数据)和实时流(实时处理如传感器数据或网站点击流)。

  • 数据预处理能力:评估在数据存储到目标数据存储库之前,是否需要对摄入的数据进行预处理。寻找提供内置处理能力或与外部处理工具无缝集成的工具。

  • 安全性:确保所选工具提供强大的安全机制,用于身份验证和授权,以保护敏感数据。

  • 可靠性:验证工具是否提供故障恢复机制,以防止在摄入过程中发生关键数据丢失。如果缺乏恢复能力,确保有选项可以从源重新运行摄入作业。

  • 支持不同的数据源和目标:所选的摄入工具应与广泛的源兼容,包括数据库、文件和流源。此外,它们应提供 API 以实现轻松的数据摄入。

  • 可管理性:另一个需要考虑的重要因素是可管理性水平。该工具是否需要自我管理,或者它是否是一个完全管理的解决方案?在做出决定之前,考虑成本和操作复杂性的权衡。

AWS 在其平台上提供了多种服务,用于将数据导入其数据湖。这些服务包括 Kinesis 数据流、Kinesis Firehose、AWS 管理的 Kafka 流和 AWS Glue 流,它们满足流数据的需要。对于批量导入,可用的选项包括 AWS Glue、SFTP 和 AWS 数据迁移服务DMS)。在下一节中,我们将深入探讨如何使用 Kinesis Firehose 和 AWS Glue 来管理数据湖的数据导入过程。我们还将讨论 AWS Lambda,这是一种无服务器计算服务,提供简单轻量级的数据导入替代方案。

Kinesis Firehose

Kinesis Firehose 是一种简化将流数据加载到数据湖中的过程的工具。它是一个完全托管解决方案,这意味着您无需担心管理底层基础设施。相反,您可以通过与服务的 API 交互来处理数据的导入、处理和交付。

Kinesis Firehose 为各种可扩展的数据导入需求提供全面支持,包括:

  • 与各种数据源的无缝集成,如网站、物联网设备和视频摄像头。这是通过使用导入代理或导入 API 实现的。

  • 在将数据发送到多个目的地方面具有多功能性,包括 Amazon S3、Amazon Redshift(一个 AWS 数据仓库服务)、Amazon OpenSearch(一个托管搜索引擎)和 Splunk(一个日志聚合和分析产品)。

  • 与 AWS Lambda 和 Kinesis Data Analytics 的无缝集成,提供高级数据处理能力。使用 AWS Lambda,您可以利用无服务器计算来执行用 Python、Java、Node.js、Go、C#和 Ruby 等语言编写的自定义函数。有关 Lambda 功能的更详细信息,请参阅 AWS 官方文档。

下图展示了使用 Kinesis Firehose 的数据流:

图 4.5 – Kinesis Firehose 数据流

图 4.5:Kinesis Firehose 数据流

Kinesis 通过建立交付流来运行,这些流是 Firehose 架构中的基础组件,负责从数据生产者接收流数据。这些交付流可以配置各种交付目的地,如 S3 和 Redshift。为了适应生产者生成的大量数据,您可以通过指定分片数量来调整数据流的吞吐量。每个分片具有每秒 1 MB 的数据导入能力,并可以以每秒 2 MB 的速度支持数据读取。此外,Kinesis Firehose 还提供 API 来增加分片数量并在需要时合并它们。

AWS Glue

AWS Glue 是一种全面的、无服务器的 ETL 服务,它帮助管理数据湖的数据集成和摄取过程。它可以无缝连接到各种数据源,包括事务型数据库、数据仓库和无服务器数据库,促进数据移动到不同的目的地,例如 Amazon S3。这种移动可以是计划或由事件触发的。此外,AWS Glue 还提供了在交付目标之前处理和转换数据的能力。它提供了一系列处理选项,例如用于执行 Python 脚本的 Python shell 和用于基于 Spark 的数据处理任务的 Apache Spark。借助 AWS Glue,您可以高效地将数据集成和摄取到您的数据湖中,并从中受益于其完全托管和无服务器的特性。

AWS Lambda

AWS Lambda 是 AWS 的无服务器计算平台。它可以无缝集成到各种 AWS 服务中,包括 Amazon S3。通过利用 Lambda,您可以在响应事件时触发函数的执行,例如在 S3 中创建新文件。这些 Lambda 函数可以开发成从不同来源移动数据,例如将数据从源 S3 存储桶复制到数据湖中的目标着陆桶。

需要注意的是,AWS Lambda 并非专门设计用于大规模数据移动或处理任务,因为其内存大小和允许的最大执行时间有限制。然而,对于简单的数据摄取和处理作业,它证明是一个高度有效的工具。

数据目录

数据目录在使数据分析师和科学家发现和访问存储在中央数据存储中的数据方面发挥着至关重要的作用。在机器学习生命周期中的数据理解和探索阶段,当科学家需要为他们的机器学习项目搜索和理解可用数据时,这一点尤为重要。在评估数据目录工具时,请考虑以下关键因素:

  • 元数据目录:该技术应支持一个中心数据目录,以有效管理数据湖的元数据。这包括处理数据库名称、表模式和表标签等元数据。Hive 元数据目录是管理元数据目录的流行标准。

  • 自动数据目录:该技术应具备自动发现和目录化数据集的能力,以及从各种数据源(如 Amazon S3、关系型数据库、NoSQL 数据库和日志)推断数据模式的能力。通常,此功能通过一个爬虫实现,该爬虫扫描数据源,识别元数据元素(例如,列名、数据类型),并将它们添加到目录中。

  • 标签灵活性:该技术应能够为数据库、表和字段等元数据实体分配自定义属性或标签。这种灵活性支持在目录中增强数据搜索和发现能力。

  • 与其他工具的集成:该技术应允许数据目录与广泛的数据处理工具无缝集成,从而便于访问底层数据。此外,与数据湖管理平台的本地集成具有优势。

  • 搜索功能:该技术应在目录中的各种元数据属性上具有强大的搜索能力。这包括按数据库、表和字段名称、自定义标签或描述以及数据类型进行搜索。

当谈到构建数据目录时,有各种技术选项可用。在本节中,我们首先探讨 AWS Glue 如何用于数据目录目的。我们还将讨论使用标准 AWS 服务(如 Lambda 和 OpenSearch)的**DIY(自行制作)**数据目录选项。

AWS Glue 数据目录

AWS Glue 为数据目录提供了全面的解决方案,与 AWS Lake Formation 和其他 AWS 服务无缝集成。AWS Glue 数据目录可以作为 Hive 元存储目录的直接替代品,因此任何与 Hive 元存储兼容的应用程序都可以与 AWS Glue 数据目录一起工作。使用 AWS Glue,您可以自动发现、目录化和组织您的数据资产,使它们易于搜索和访问数据分析师和科学家。以下是使用 AWS Glue 进行数据目录的关键功能和优势:

  • 自动化数据发现:AWS Glue 提供了自动化数据发现功能。通过使用数据爬虫,Glue 可以扫描和分析来自各种结构化和半结构化数据源(如 Amazon S3、关系型数据库、NoSQL 数据库等)的数据。它识别存储在 AWS Glue 数据目录中的元数据信息,包括表模式、列名和数据类型。

  • 集中式元数据仓库:AWS Glue 数据目录充当您数据资产集中式元数据仓库。它提供了一个统一的数据视图,使得搜索、查询和理解可用数据集变得更加容易。

  • 元数据管理:AWS Glue 允许您管理和维护与您的数据资产相关的元数据。您可以在数据目录中使用数据库、表和分区定义自定义标签、添加描述并组织您的数据。

AWS Glue 数据目录的元数据层次结构是使用数据库和表组织的。数据库作为表的容器,实际数据存储在其中。像传统数据库一样,单个数据库可以包含多个表,这些表可以来自不同的数据存储。然而,每个表仅与单个数据库相关联。要查询这些数据库和表,可以使用与 Hive 元存储兼容的工具(如 Amazon Athena)执行 SQL 查询。当与 AWS Lake Formation 协作时,可以通过 Lake Formation 权益层控制对目录数据库和表的访问权限。

自定义数据目录解决方案

构建数据目录的另一种选择是使用一组 AWS 服务创建自己的数据目录。当您有特定需求而专用产品无法满足时,请考虑此选项。这种 DIY 方法涉及利用 DynamoDB 和 Lambda 等服务,如图所示:

使用 AWS Lambda、DynamoDB 和 Amazon OpenSearch Service 的综合数据目录

图 4.6:自定义数据目录解决方案

在高层次上,AWS Lambda 触发器用于在对象被放入 S3 时,将对象名称和元数据填充到 DynamoDB 表中;Amazon OpenSearch 服务用于搜索特定资产、相关元数据和数据分类。

数据处理

数据湖的数据处理功能包括执行各种数据处理任务所需的框架和计算资源,例如数据校正、转换、合并、拆分和机器学习特征工程。该组件是机器学习生命周期中的关键步骤,因为它有助于准备数据以供下游模型训练和推理步骤使用。数据处理技术的必要要求如下:

  • 与底层存储技术的集成和兼容性:能够无缝地与原生存储系统协同工作,简化了数据在存储和处理层之间的访问和移动。

  • 与数据目录的集成:能够与数据目录的元存储进行交互,查询目录中的数据库和表。

  • 可伸缩性:根据不断变化的数据量和处理速度要求,能够扩展或缩减计算资源的能力。

  • 语言和框架支持:支持流行的数据处理库和框架,如 Python 和 Spark。

  • 批处理和实时处理能力:能够处理实时数据流和批量数据处理的批处理模式。

现在,让我们考察一些 AWS 服务,它们在数据湖架构内提供数据处理能力:

  • AWS Glue ETL:除了支持数据移动和数据目录外,AWS Glue 的 ETL 功能还可以用于 ETL 和通用数据处理。AWS Glue ETL 提供了用于数据转换的内置函数,例如删除 NULL 字段(NULL 字段表示新数据)和数据过滤。它还提供了 Python 和 Spark 的通用处理框架,以运行 Python 脚本和 Spark 作业。Glue ETL 与 AWS Glue 数据目录原生集成,以访问目录中的数据库和表。Glue ETL 还可以直接访问 Amazon S3 存储。

  • 亚马逊弹性映射减少(EMR)亚马逊 EMR 是 AWS 上的一个完全托管的大数据处理平台。它设计用于使用 Spark 框架和其他 Apache 工具(如 Apache HiveApache HudiPresto)进行大规模数据处理。它能够与 Glue 数据目录和 Lake Formation 原生集成,以访问 Lake Formation 中的数据库和表。

  • AWS Lambda:AWS Lambda 可用于轻量级数据处理任务,或作为数据湖架构中更大数据处理管道的一部分。Lambda 可以由实时事件触发,因此它是实时数据处理的好选择。

虽然高效的数据处理为模型训练和消费准备原始数据,但稳健的数据管理还必须确保机器学习团队能够跟踪数据来源,并通过数据版本化等能力在需要时访问历史版本。

ML 数据版本控制

为了在训练数据和机器学习模型之间建立模型训练的谱系,实施训练、验证和测试数据集的版本控制至关重要。数据版本控制面临挑战,因为它需要使用适当的工具并遵守个人最佳实践。在模型构建过程中,数据科学家通常获取数据集的副本,执行针对其需求的特定清洁和转换,并将修改后的数据保存为新版本。这在数据管理方面带来了重大挑战,包括数据重复以及建立数据与其各种上游和下游任务之间的联系。

整个数据湖的数据版本控制不在此书的范围之内。相反,我们将专注于讨论一些与训练数据集版本控制相关的特定架构选项。

S3 分区

在这种方法中,每个新创建或更新的数据集都存储在一个具有唯一前缀的单独 S3 分区中,通常从前缀的名称中派生。虽然这种方法可能导致数据重复,但它为区分不同数据集提供了一个清晰且简单的方法,这些数据集旨在用于模型训练。为了维护数据完整性,建议通过强制命名标准的受控处理管道生成数据集。处理管道还应跟踪数据来源并记录用于数据操作和特征工程的处理脚本。此外,应将数据集配置为只读,以确保其不可变性。以下示例展示了 S3 分区结构,说明了训练数据集的多个版本:

s3://project1/<date>/<unique version id 1>/train_1.txt
s3://project1/<date>/<unique version id 1>/train_2.txt
s3://project1/<date>/<unique version id 2>/train_1.txt
s3://project1/<date>/<unique version id 2>/train_2.txt 

在这种情况下,数据集的两个版本使用不同的 S3 前缀进行隔离。为了有效地跟踪这些训练文件,建议使用数据库来存储与这些训练文件相关的元数据。当使用这些文件时,建立训练数据集、机器学习训练作业、机器学习训练脚本和生成的机器学习模型之间的链接至关重要,以建立全面的血缘关系。

版本化 S3 存储桶

Amazon S3 为 S3 存储桶提供版本控制支持,当启用时,可以用来管理训练数据集的不同版本。采用这种方法,每个新创建或更新的数据集都会在 S3 对象级别分配一个唯一的版本 ID。此外,建议使用数据库来存储与每个版本的训练数据集相关的所有相关元数据。这有助于建立血缘关系,跟踪从数据处理到机器学习模型训练的过程。元数据应捕获必要信息,以促进全面的跟踪和分析。

专门的数据版本工具

而不是为数据版本控制开发定制解决方案,现在有专门的工具可用于高效的数据版本管理。例如,这些工具可以用来跟踪和存储机器学习训练和验证数据集的不同版本,这对于可重复的实验和模型训练任务非常重要。以下是一些值得注意的选项:

  • Git LFS(大型文件存储):Git LFS 扩展了 Git 的功能,以处理大型文件,包括数据集。它将这些文件存储在 Git 存储库之外,同时保留版本信息。Git LFS 与 Git 无缝集成,常用于在以数据为中心的项目中版本化大型文件。

  • 数据版本控制(DVC):DVC 是一个专门为数据版本控制和管理工作设计的开源工具。它与 Git 集成,并提供跟踪和管理大型数据集的功能。DVC 允许对存储在远程存储(如 Amazon S3 或共享文件系统)中的实际数据文件进行轻量级链接。这种方法维护了变更的历史记录,并允许轻松地在不同的数据集版本之间切换,消除了数据复制的需要。

  • Pachyderm:Pachyderm 是一个开源的数据版本控制和数据血缘工具。它为数据管道提供版本控制,能够跟踪数据、代码和配置文件的变更。Pachyderm 支持分布式数据处理框架,如 Apache Spark,并提供可重复性、数据血缘和数据血缘分支等功能。

这些专门设计的工具简化了数据版本控制的过程,确保了数据集的高效跟踪和管理。

ML 特征存储

在大型企业中,集中管理常见的可重用机器学习特征,如精心整理的客户档案数据和标准化的产品销售数据,是有益的。这种做法有助于缩短机器学习项目生命周期,尤其是在数据理解和数据准备阶段。为了实现这一点,许多组织已经构建了中心机器学习功能存储,这是一个用于存储常见可重用机器学习特征的架构组件,作为机器学习开发架构的一部分,以满足下游模型开发、训练和模型推理的需求。根据具体要求,管理这些可重用机器学习特征有两种主要选项。

首先,您可以构建定制的功能存储,以满足机器学习模型训练中插入和查找组织化特征的基本要求。这些定制的功能存储可以根据组织的具体需求进行定制。

或者,您可以选择商业级功能存储产品,例如 AWS 提供的机器学习服务 Amazon SageMaker Feature Store,我们将在后续章节中深入探讨。它提供了高级功能,如在线和离线功能用于训练和推理、元数据标记、特征版本控制和高级搜索。这些功能使得在生产级场景中高效管理和利用机器学习特征成为可能。

为客户端消费的数据服务

中心数据管理平台应提供各种方法,例如 API 或基于 Hive 元数据存储的方法,以促进对数据的在线访问,用于下游任务,如数据发现和模型训练。此外,考虑支持将数据从中心数据管理平台转移到其他数据消费环境的数据传输工具也很重要,以满足不同的数据消费模式,例如在消费环境中本地访问数据。探索具有内置数据服务功能或可以无缝集成到外部数据服务工具中的工具是有利的,因为构建定制的数据服务功能可能是一项具有挑战性的工程任务。

在向数据科学环境提供数据时,需要考虑多种数据服务模式。在接下来的讨论中,我们将探讨两种突出的数据访问模式及其特点。

通过 API 消费

在这种数据服务模式中,消费环境和应用程序具有直接从数据湖访问数据的能力。这可以通过使用符合 Hive 元数据存储的工具或直接访问数据湖的基础存储 S3 来实现。Amazon 提供了各种服务来促进这种模式,例如 Amazon Athena,一个强大的大数据查询工具,Amazon EMR,一个强大的大数据处理工具,以及 Amazon Redshift Spectrum,Amazon Redshift 的一个功能。

通过利用这些服务,Glue 目录中索引的数据湖数据可以查询,无需单独复制数据。这种模式特别适合只需要数据子集用于下游数据处理任务的情况。它提供了避免数据重复的同时,能够高效选择和处理特定数据子集作为整体数据工作流程一部分的优势。

通过数据复制进行消费

在这种数据服务模式中,数据湖中存储的特定数据部分被复制或复制到消费环境的存储中。这种复制允许根据特定需求进行定制处理和消费。例如,最新或最相关的数据可以加载到数据分析环境,如 Amazon Redshift。同样,它也可以被发送到数据科学环境拥有的 S3 存储桶中,从而实现数据科学任务的便捷访问和利用。通过复制所需的数据子集,这种模式为不同环境中的不同处理和消费需求提供了灵活性和优化性能。

适用于 ML 的专用数据库

考虑到图神经网络和生成式人工智能等新兴的 ML 范式,已经开发了专门的数据库来满足 ML 特定的任务,如链接预测、聚类分类和检索增强生成。在下一节中,我们将深入探讨两种类型的数据库——向量数据库和图数据库——并检查它们在 ML 任务中的应用。我们将探讨它们在 ML 背景下的独特特性和应用。

向量数据库

向量数据库,也称为向量相似性搜索引擎或向量存储,是专门设计用于高效存储、索引和查询高维向量的数据库。高维向量的例子包括表示图像或文本的数值向量。这些数据库特别适合依赖于基于向量计算的应用程序。

在 ML 中,向量通常用于表示数据点、嵌入或特征表示。这些向量捕捉了底层数据的基本信息,使得相似性搜索、聚类、分类和其他 ML 任务成为可能。向量数据库提供了处理这些基于向量操作的大规模强大工具。

向量数据库的一个关键特性是它们能够执行快速的相似性搜索,允许高效检索与给定查询向量最相似的向量。这种能力在各种机器学习(ML)用例中至关重要,例如推荐系统、基于内容的搜索和异常检测。

市场上有多家向量数据库提供商,每个都提供其独特的功能和能力。其中一些突出的包括:

  • Facebook AI Similarity Search (FAISS):由Facebook AI ResearchFAIR)开发,FAISS 是一个用于高效相似性搜索和密集向量聚类的开源库。它提供高度优化的算法和数据结构,以实现快速和可扩展的向量搜索。

  • Milvus:Milvus 是一个开源的向量数据库,旨在管理和提供大规模向量数据集。它提供高效的相似性搜索,支持多种相似性度量,并通过分布式计算提供可扩展性。

  • Pinecone:Pinecone 是一个专注于高性能相似性搜索和推荐系统的云原生向量数据库服务。它提供实时索引和检索向量,具有低延迟和高吞吐量。

  • Elasticsearch:尽管 Elasticsearch 主要以其全文搜索和分析引擎而闻名,但它也通过插件提供向量相似性搜索功能,用于高效的向量索引和查询。

  • Weaviate:Weaviate 是一个开源的向量数据库。它允许您存储来自您最喜欢的机器学习模型的数据对象和向量嵌入,并无缝扩展到数十亿数据对象。

这些只是向量数据库提供商的几个例子,该领域的格局正在随着新的解决方案和该领域的发展而不断演变。在选择向量数据库提供商时,重要的是要考虑性能、可扩展性、集成简便性和您机器学习用例的具体要求。

图数据库

图数据库是专门设计的数据库,用于存储、管理和查询图结构化数据。在图数据库中,数据以节点(实体)和连接这些节点的边(关系)的形式表示,形成一个类似图的结构。图数据库擅长捕捉和处理实体之间的复杂关系和依赖,这使得它们对于机器学习任务高度相关。

图数据库提供了一种强大的方式来建模和分析在关系起关键作用的数据领域,例如社交网络、推荐系统、欺诈检测、知识图谱和网络分析。它们能够高效地遍历图,允许查询探索数据中的连接和模式。

在机器学习的背景下,图数据库有多个应用。一个关键用例是基于图的特性工程,其中使用图来表示实体之间的关系,并利用图结构来推导出可以增强机器学习模型性能的特征。例如,在推荐系统中,图数据库可以表示用户-项目交互,并可以推导出基于图的特性来捕捉用户相似性、项目相似性或协同过滤模式。

图数据库还支持基于图的算法,如 图卷积网络GCNs),用于节点分类、链接预测和图聚类等任务。这些算法利用图结构在节点之间传播信息,并捕获数据中的复杂模式。

此外,图数据库可以用于存储和查询图嵌入,这些嵌入是节点或边的低维向量表示。这些嵌入捕获了图的结构和语义信息,可以输入到机器学习模型中,用于下游任务,如节点分类或推荐。

一些值得注意的图数据库包括 Neo4j,这是一个流行且广泛使用的图数据库,允许高效地存储、检索和查询图结构化数据,以及 Amazon Neptune,这是 AWS 提供的完全托管的图数据库服务。

数据管道

数据管道通过自动化数据摄取、验证、转换和特征工程等任务,简化了数据的流动。这些管道确保了数据质量,并促进了为机器学习模型创建训练和验证数据集。有许多工作流程工具可用于构建数据管道,许多数据管理工具也提供了构建和管理这些管道的内置功能:

  • AWS Glue 工作流程:AWS Glue 工作流程在 AWS Glue 中提供原生的工作流程管理功能,允许编排各种 Glue 任务,如数据摄取、处理和特征工程。由触发器和节点组件组成,Glue 工作流程包含计划触发器、事件触发器和按需触发器。工作流程中的节点可以是爬虫作业或 ETL 作业。触发器启动工作流程运行,而事件触发器在爬虫或 ETL 作业完成后发出。通过结构化一系列触发器和作业,工作流程促进了 AWS Glue 内数据管道的无缝执行。

  • AWS Step Functions:AWS Step Functions 是一个强大的工作流程编排工具,可以无缝集成到各种 AWS 数据处理服务中,如 AWS Glue 和 Amazon EMR。它允许创建强大的工作流程,以执行数据管道中的各种步骤,例如数据摄取、数据处理和特征工程,确保这些任务的协调和执行顺畅。

  • AWS 管理的 Apache Airflow 工作流程:AWS 管理的 Apache Airflow 工作流程MWAA)是一个完全托管的服务的,简化了 Apache Airflow 的部署、配置和管理,Apache Airflow 是一个开源平台,用于编排和调度数据工作流程。此服务提供可伸缩性、可靠性和与其他 AWS 服务的轻松集成,使其成为管理云中复杂数据工作流程的高效解决方案。

探索了机器学习数据管理架构的基本要素之后,接下来的章节将深入探讨与安全和治理相关的内容。

认证和授权

认证和授权对于确保数据湖的安全访问至关重要。联合认证,例如 AWS 身份和访问管理IAM),用于验证用户身份以进行管理和数据消费。AWS Lake Formation 结合了内置的 Lake Formation 访问控制与 AWS IAM 来管理对数据目录资源和底层数据存储的访问。

内置的 Lake Formation 权限模型使用诸如 grant 和 revoke 等命令来控制对数据库和表等资源以及如表创建等操作的访问。当用户请求访问资源时,会评估 IAM 策略和 Lake Formation 权限,以验证并强制执行访问权限,然后再授予访问权限。这种多层次的方法增强了数据湖的安全性和治理。

数据湖的管理和数据湖资源的消费涉及多个角色,包括:

  • Lake Formation 管理员:Lake Formation 管理员有权管理 AWS 账户中 Lake Formation 数据湖的所有方面。例如,包括为其他用户授予/撤销访问数据湖资源的权限、在 S3 中注册数据存储以及创建/删除数据库。在设置 Lake Formation 时,您需要注册为管理员。管理员可以是 AWS IAM 用户或 IAM 角色。您可以为 Lake Formation 数据湖添加多个管理员。

  • Lake Formation 数据库创建者:Lake Formation 数据库创建者被授予在 Lake Formation 中创建数据库的权限。数据库创建者可以是 IAM 用户或 IAM 角色。

  • Lake Formation 数据库用户:Lake Formation 数据库用户可以授予对数据库执行不同操作的权限。例如权限包括创建表、删除表、描述表和修改表。数据库用户可以是 IAM 用户或 IAM 角色。

  • Lake Formation 数据用户:Lake Formation 数据用户可以授予对数据库表和列执行不同操作的权限。例如权限包括插入、选择、描述、删除、修改和删除。数据用户可以是 IAM 用户或 IAM 角色。

通过兼容的 AWS 服务,如 Amazon Athena 和 Amazon EMR,简化了在 Lake Formation 中访问和查询数据库和表。当使用这些服务进行查询时,Lake Formation 会验证与之关联的实体(IAM 用户、组和角色),以确保它们具有对数据库、表和相应的 S3 数据位置的必要访问权限。如果授予访问权限,Lake Formation 会向服务颁发临时凭证,使其能够安全高效地执行查询。此过程确保只有授权的服务才能与 Lake Formation 交互并查询数据。

数据治理

获取可信赖的数据对机器学习项目的成功至关重要。数据治理包括确保数据资产可靠性、安全性和责任的基本实践。通过识别和记录数据流以及测量和报告数据质量,可以实现可信赖的数据。数据保护和安全涉及对数据进行分类并应用适当的访问权限,以保护其机密性和完整性。为了保持数据活动的可见性,应实施监控和审计机制,使组织能够跟踪和分析对数据执行的操作,确保数据管理中的透明度和问责制。

数据目录是数据治理最重要的组成部分之一。在 AWS 上,Glue 数据目录是一个用于数据目录管理的完全托管服务。您还可以选择使用不同的基础构建块来构建自定义数据目录。例如,您可以参考docs.aws.amazon.com/whitepapers/latest/enterprise-data-governance-catalog/implementation-reference-architecture-diagrams.html中的参考架构,在 AWS 上构建自定义数据目录。

数据血缘

在跨不同区域的数据摄取和处理过程中建立和记录数据血缘时,捕获特定数据点非常重要。当在数据管道中使用 AWS Glue、AWS EMR 或 AWS Lambda 等数据摄取和处理工具时,可以捕获以下信息以建立全面的数据血缘:

  • 数据源详细信息:包括数据源名称、其位置和所有权信息,以识别数据的来源。

  • 数据处理作业历史记录:捕获管道中涉及的数据处理作业的历史和详细信息。这包括作业名称、唯一的标识符ID)、相关的处理脚本和作业所有者。

  • 生成工件:记录由于数据处理作业生成的工作件。例如,记录由管道生成的目标数据的 S3 URI 或其他存储位置。

  • 数据指标:在数据处理的不同阶段跟踪相关指标。这可能包括记录数、数据大小、数据模式以及特征统计,以提供对处理数据的洞察。

为了存储和管理数据血缘信息和处理指标,建议建立一个中央数据操作数据存储库。AWS DynamoDB,一个完全托管的 NoSQL 数据库,是此目的的一个优秀技术选择。DynamoDB 具有针对低延迟和高事务访问优化的功能,能够高效地存储和检索数据血缘记录和处理指标。通过捕获和记录这些数据点,组织可以建立全面的数据血缘,从而清晰地了解数据从源头经过各种处理阶段的过程。此文档使得可追溯性、可审计性和数据在管道中移动时的更好管理成为可能。

其他数据治理措施

除了管理数据血缘之外,还有其他几个重要的措施对于有效的数据治理至关重要,包括:

  • 数据质量:应在不同阶段实施自动化的数据质量检查,并报告质量指标。例如,在源数据被导入到着陆区之后,可以使用如开源的Deequ库等工具运行 AWS Glue 质量检查作业来检查数据质量。可以生成数据质量指标(如计数、模式验证、缺失数据、错误的数据类型或与基线统计偏差)和报告以供审查。可选地,应建立手动或自动的操作数据清理流程来纠正数据质量问题。

  • 数据编目:创建一个中央数据编目,并在数据湖中的数据集上运行 Glue 爬虫以自动创建数据清单并填充中央数据编目。通过添加额外的元数据来丰富编目,以跟踪其他信息以支持发现和数据审计,例如业务所有者、数据分类和数据刷新日期。对于机器学习工作负载,数据科学团队也会从数据湖中的现有数据集中生成新的数据集(例如,新的机器学习特征)用于模型训练。这些数据集也应注册并跟踪在数据编目中,并且为了审计目的,应保留和归档数据的不同版本。

  • 数据访问授权:应建立一个正式的过程来请求和授权对数据集和 Lake Formation 数据库和表的访问。可以使用外部票务系统来管理请求访问和授权访问的工作流程。

  • 监控和审计:应监控数据访问,并保留访问历史。可以启用 Amazon S3 服务器访问日志来直接跟踪所有 S3 对象的访问。AWS Lake Formation 还会记录 AWS CloudTrail 中 Lake Formation 数据集的所有访问(AWS CloudTrail 在 AWS 账户中提供事件历史,以实现治理、合规性和运营审计)。通过 Lake Formation 审计,您可以获取有关事件源、事件名称、SQL 查询和数据输出位置等详细信息。

通过实施这些关键数据治理措施,组织可以建立强大的数据管理、安全和合规性基础,使他们能够最大化其数据资产的价值,同时降低风险。

实践练习 – 机器学习的数据管理

在这个实践练习中,您将经历构建一个虚构零售银行简单数据管理平台的过程。这个平台将作为机器学习工作流程的基础,我们将利用不同的 AWS 技术来构建它。如果您没有 AWS 账户,可以按照以下说明轻松创建一个:aws.amazon.com/console/

我们创建的数据管理平台将包含以下关键组件:

  • 使用 Lake Formation 进行数据管理的数据湖环境

  • 使用 Lambda 将文件导入数据湖的数据摄取组件

  • 使用 Glue 数据目录的数据目录组件

  • 使用 Glue 数据目录和 Athena 的数据发现和查询组件

  • 使用 Glue ETL 的数据处理组件

  • 使用 Glue 管道的数据管道组件

以下图表显示了我们将在此练习中构建的数据管理架构:

图 4.6 – 实践练习的数据管理架构

图 4.7:实践练习的数据管理架构

让我们开始构建这个架构在 AWS 上的实施。

使用 Lake Formation 创建数据湖

我们将使用 AWS Lake Formation 构建数据湖架构;它是 AWS 上构建数据湖的主要服务。登录到 AWS 管理控制台后,创建一个名为 MLSA-DataLake-<您的首字母缩写> 的 S3 存储桶。我们将使用此存储桶作为数据湖的存储。如果您收到存储桶名称已被使用的消息,请尝试在名称中添加一些随机字符以使其唯一。如果您不熟悉如何创建 S3 存储桶,请按照以下链接中的说明操作:docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html

在创建存储桶后,按照以下步骤开始创建数据湖:

  1. 注册 Lake Formation 管理员:我们需要将 Lake Formation 管理员添加到数据湖中。管理员将拥有管理数据湖所有方面的完全权限。为此,导航到 Lake Formation 管理控制台,点击 管理角色和任务 链接,你应该会被提示添加管理员。选择 添加我自己 并点击 开始 按钮。

  2. 注册 S3 存储:接下来,我们需要在 Lake Formation 中注册您之前创建的 S3 存储桶 (MLSA-DataLake-<your initials>),以便它可以通过 Lake Formation 进行管理和访问。为此,点击 仪表板 链接,展开 数据湖设置,然后点击 注册位置。浏览并选择您创建的存储桶,然后点击 注册位置。这个 S3 存储桶将由 Lake Formation 用于存储数据库的数据并管理其访问权限。

  3. 创建数据库:现在,我们准备设置一个名为 bank_customer_db 的数据库,用于管理零售客户。在我们注册数据库之前,首先在 MLSA-DataLake-<your initials> 存储桶下创建一个名为 bank_customer_db 的文件夹。这个文件夹将用于存储与数据库相关的数据文件。为此,点击 Lake Formation 控制台上的 创建数据库 按钮,并按照屏幕上的说明创建数据库。

您现在已成功创建了一个由 Lake Formation 驱动的数据湖,并创建了一个数据库用于数据管理。有了这个数据湖,我们现在准备构建额外的数据管理组件。接下来,我们将创建一个数据导入管道,将文件移动到数据湖中。

创建数据导入管道

现在数据库已经准备好了,我们可以将数据导入到这个新创建的数据库中。如前所述,有各种数据源可供选择,包括像 Amazon RDS 这样的数据库,社交媒体流这样的流平台,以及 CloudTrail 这样的日志。此外,AWS 提供了一系列用于构建数据导入管道的服务,例如 AWS Glue、Amazon Kinesis 和 AWS Lambda。在这个练习阶段,我们将专注于创建一个 AWS Lambda 函数作业,它将促进从其他 S3 存储桶到我们的目标数据库的数据导入。如前所述,Lambda 函数可用于轻量级的数据导入和处理任务:

  1. 创建源 S3 存储桶并下载数据文件:让我们创建另一个名为 customer-data-source 的 S3 存储桶,以表示我们将从中导入数据的源。

  2. 创建 Lambda 函数:现在,我们将创建一个 Lambda 函数,从 customer-data-source 存储桶导入数据到 MLSA-DataLake-<your initials> 存储桶:

    1. 要开始,导航到 AWS Lambda 管理控制台,在左侧面板中点击函数链接,然后在右侧面板中点击创建函数按钮。选择从头开始编写,然后输入datalake-s3-ingest作为函数名称,并选择最新的 Python 版本(例如,3.10)作为运行时。保持默认的执行角色,这将为此 Lambda 函数创建一个新的 IAM 角色。点击创建函数继续。

    2. 在下一屏中,点击添加触发器,选择S3作为触发器,并选择customer-data-source存储桶作为源。对于事件类型,选择PUT事件,然后点击添加按钮完成此步骤。此触发器将允许 Lambda 函数在发生 S3 存储桶事件时被调用,例如将文件保存到存储桶中。

    3. 添加触发器后,您将返回到Lambda->function->datalake-s3-ingest屏幕。接下来,让我们通过替换以下代码块来创建函数,替换默认函数模板。将desBucket变量替换为实际存储桶的名称:

      import json
      import boto3
      def lambda_handler(event, context):
           s3 = boto3.resource('s3')
           for record in event['Records']:
                 srcBucket = record['s3']['bucket']['name']
                 srckey = record['s3']['object']['key']
                 desBucket = "MLSA-DataLake-<your initials>"
                 desFolder = srckey[0:srckey.find('.')]
                 desKey = "bank_customer_db/" + desFolder + "/" + srckey
                 source= { 'Bucket' : srcBucket,'Key':srckey}
                 dest ={ 'Bucket' : desBucket,'Key':desKey}
                 s3.meta.client.copy(source, desBucket, desKey)
           return {
                 'statusCode': 200,
                 'body': json.dumps('files ingested')
           } 
      
    4. 新函数还需要 S3 权限从另一个存储桶复制文件(对象)。为了简单起见,只需将AmazonS3FullAccess策略添加到与函数关联的执行 IAM 角色。您可以通过点击 Lambda 函数的权限选项卡来找到 IAM 角色。

  3. 触发数据摄取:现在,从以下链接下载示例数据文件:github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-Handbook/tree/main/Chapter04/Archive.zip

然后,将文件保存到您的本地计算机。解压缩归档文件。应该有两个文件(customer_data.csvchurn_list.csv)。

您现在可以通过将customer_detail.csvchurn_list.csv文件上传到customer-data-source存储桶来触发数据摄取过程,并通过检查MLSA-DataLake-<your initials>/bank_customer_db文件夹中的两个文件来验证过程完成。

您现在已成功创建了一个基于 AWS Lambda 的数据摄取管道,用于自动将数据从源 S3 存储桶移动到目标 S3 存储桶。通过创建此简单的摄取管道并移动数据,我们现在准备实现支持这些数据文件发现的组件。接下来,让我们使用 Glue 爬虫创建 AWS Glue 数据目录。

创建 Glue 数据目录

要允许发现和查询bank_customer_db数据库中的数据,我们需要创建一个数据目录。如前所述,Glue 数据目录是 AWS 上的托管数据目录。它附带一个名为 AWS Glue 爬虫的实用工具,可以帮助发现数据并填充目录。

在这里,我们将使用 AWS Glue 爬虫爬取bank_customer_db S3 文件夹中的文件并生成目录:

  1. 授权 Glue 权限

    1. 首先,让我们授权 AWS Glue 访问 bank_customer_db 数据库。我们将为您创建一个新的 IAM 服务角色,名为 AWSGlueServiceRole_data_lake,并将其附加到 AWSGlueServiceRoleAmazonS3FullAccess IAM 管理策略上。确保在创建角色时选择Glue作为服务。如果您不熟悉如何创建角色和附加策略,请遵循以下链接中的说明:docs.aws.amazon.com/IAM/latest/UserGuide

    2. 角色创建后,点击 Lake Formation 管理控制台左侧面板中的数据湖权限,然后在右侧面板中点击授权按钮。

    在下一屏,为IAM 用户和角色选择 AWSGlueServiceRole_data_lake,在命名数据目录资源下选择bank_customer_db,为数据库权限可授权权限都选择超级,最后点击授权超级权限允许服务角色访问创建数据库和作为自动化的一部分授权权限。AWSGlueServiceRole_data_lake 将用于稍后配置 Glue 爬虫作业。

  2. 配置 Glue 爬虫作业

    1. 通过点击 Lake Formation 管理控制台中的爬虫链接来启动 Glue 爬虫。一个新的 Glue 浏览器标签页将打开。点击创建爬虫按钮开始。将爬虫的名称输入为 bank_customer_db_crawler。点击添加数据源按钮,选择S3,并在包含路径字段中输入 s3://MLSA-DataLake-<你的首字母>/bank_customer_db/churn_list/

    2. 再次点击添加另一个数据源按钮。这次,输入 s3://MLSA-DataLake-<你的首字母>/bank_customer_db/customer_data/

  3. 在下一屏,配置安全设置,为之前使用的现有 IAM 角色选择 AWSGlueServiceRole_data_lake

    1. 在下一个设置输出和调度屏幕上,将目标数据库选择为bank_customer_db,并将爬虫调度的频率选择为按需

    2. 在下一个审查和创建屏幕上,在最终屏幕上选择完成以完成设置。

    3. 爬虫屏幕上,选择您刚刚创建的 bank_customer_db_crawler 作业,点击运行爬虫,等待状态显示为就绪

    4. 返回 Lake Formation 管理控制台并点击链接。您现在将看到创建了两个新表(churn_listcustomer_data)。

    5. 您现在已成功配置了一个 AWS Glue 爬虫,该爬虫可自动从数据文件中发现表模式并为新数据创建数据目录。

您已成功创建了用于新导入数据的 Glue 数据目录。有了这个,我们现在有了支持数据发现和查询的正确组件。接下来,我们将使用 Lake Formation 和 Athena 来发现和查询数据湖中的数据。

在数据湖中发现和查询数据

为了便于机器学习工作流程中的数据发现和数据理解阶段,在数据湖中集成数据发现和数据查询功能是至关重要的。

默认情况下,Lake Formation 已经提供了一系列标签列表,例如数据类型分类(例如,CSV),用于在数据库中搜索表。让我们为每个表添加更多标签,使其更容易被发现:

  1. 通过授予您的当前用户 ID 对 customer_datachurn_list 表的 Super 权限来编辑数据库表。

  2. 让我们在表字段中添加一些元数据。选择 customer_data 表,点击 编辑模式,选择 creditscore 字段,点击 编辑添加 以添加列属性,并输入以下内容,其中 description 是键,实际文本是值:

    description: credit score is the FICO score for each customer 
    
  3. 按照相同的步骤,为 churn_list 表中的 exited 字段添加以下列属性:

    description: churn flag 
    
  4. 我们现在可以准备在 Lake Formation 管理控制台中利用元数据进行一些搜索了。尝试在“查找表属性”文本框中单独输入以下单词来搜索表,并查看返回结果:

    • FICO

    • csv

    • churn flag

    • creditscore

    • customerid

现在您已经找到了所需的表,让我们查询该表并查看实际数据,以学习如何交互式地查询数据,这是数据科学家在数据探索和理解过程中执行的重要任务。选择您想要查询的表,然后在 操作 下拉菜单中点击 查看数据 按钮。这应该会带您到 Amazon Athena 屏幕。您应该看到一个已经创建的 查询 选项卡,并且查询已经执行。结果显示在屏幕底部。如果您收到一个警告消息,表明您需要提供一个输出位置,请选择 设置 选项卡,然后点击 管理 按钮以提供 S3 位置作为输出位置。您可以运行任何其他 SQL 查询来进一步探索数据,例如使用 customerid 字段将 customer_datachurn_list 表连接起来:

SELECT * FROM "bank_customer_db"."customer_data", " bank_customer_db"."churn_list" where "bank_customer_db"."customer_data"."customerid" = "bank_customer_db"."churn_list"."customerid" ; 

您现在已经学会了如何在 Lake Formation 中发现数据,并在 Lake Formation 数据库和表中运行查询。接下来,让我们使用 Amazon Glue ETL 服务运行一个数据处理作业,以便为机器学习任务准备数据。

创建 Amazon Glue ETL 作业以处理机器学习数据

customer_datachurn_list表包含对机器学习有用的特征。但是,它们需要被连接和处理,以便可以用于训练机器学习模型。一个选项是数据科学家下载这些数据集并在 Jupyter 笔记本中处理它们以进行模型训练。另一个选项是使用单独的处理引擎处理数据,以便数据科学家可以直接处理处理后的数据。在这里,我们将设置一个 AWS Glue 作业来处理customer_datachurn_list表中的数据,并将它们转换成可以直接用于模型训练的新机器学习特征:

  1. 首先,创建一个新的名为MLSA-DataLake-Serving-<your initials>的 S3 存储桶。我们将使用此存储桶来存储 Glue 作业的输出训练数据集。

  2. 使用 Lake Formation 控制台,授予AWSGlueService_Rolecustomer_datachurn_list表的超级访问权限。我们将使用此角色来运行 Glue 作业。

  3. 要开始创建 Glue 作业,请转到 Glue 控制台,并点击 Glue 控制台上的ETL 作业链接。点击脚本编辑器,然后点击创建脚本按钮。

  4. 在脚本编辑器屏幕上,将作业名称从未命名作业更改为customer_churn_process以便于跟踪。

  5. 作业详情选项卡上,选择AWSGlueService_Role作为 IAM 角色。在高级属性下添加一个新的Job参数target_bucket,并输入目标存储桶的值以输出文件。

  6. 脚本标签屏幕上,将以下代码块复制到代码部分。确保在代码中将default_bucket替换为您自己的存储桶。以下代码块首先使用customerid列作为键将churn_listcustomer_data表连接起来,然后使用索引转换gendergeo列,创建一个新的只包含相关列的 DataFrame,并最终使用日期和生成的版本 ID 作为分区将输出文件保存到 S3 位置。代码使用默认的目标存储桶和前缀变量,并为 S3 位置生成日期分区和版本分区。作业还可以接受这些参数的输入参数。

    以下代码块设置了默认配置,例如SparkContext和默认存储桶:

    import sys
    from awsglue.utils import getResolvedOptions
    from awsglue.transforms import Join
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    import pandas as pd
    from datetime import datetime
    import uuid
    from pyspark.ml.feature import StringIndexer
    glueContext = GlueContext(SparkContext.getOrCreate())
    logger = glueContext.get_logger()
    current_date = datetime.now()
    default_date_partition = f"{current_date.year}-{current_date.month}-{current_date.day}"   
    default_version_id = str(uuid.uuid4())
    default_bucket = "<your default bucket name>"
    default_prefix = "ml-customer-churn"
    target_bucket = ""
    prefix = ""
    day_partition =""
    version_id = ""
    try:
         args = getResolvedOptions(sys.argv,['JOB_NAME','target_bucket','prefix','day_partition','version_id'])
         target_bucket = args['target_bucket']
         prefix = args['prefix']
         day_partition = args['day_partition']
         version_id = args['version_id']
    except:
         logger.error("error occured with getting arguments")
    if target_bucket == "":
         target_bucket = default_bucket
    if prefix == "":
         prefix = default_prefix
    if day_partition == "":
         day_partition = default_date_partition
    if version_id == "":
         version_id = default_version_id 
    

    以下代码使用customerid列作为键将customer_datachurn_list表合并为一个单一表:

    # catalog: database and table names
    db_name = "bank_customer_db"
    tbl_customer = "customer_data"
    tbl_churn_list = "churn_list"
    # Create dynamic frames from the source tables
    customer = glueContext.create_dynamic_frame.from_catalog(database=db_name, table_name=tbl_customer)
    churn = glueContext.create_dynamic_frame.from_catalog(database=db_name, table_name=tbl_churn_list)
    # Join the frames to create customer churn dataframe
    customer_churn = Join.apply(customer, churn, 'customerid', 'customerid')
    customer_churn.printSchema() 
    

    以下代码块将几个数据列从字符串标签转换为标签索引,并将最终文件写入 S3 的输出位置:

    # ---- Write out the combined file ----
    current_date = datetime.now()
    str_current_date = f"{current_date.year}-{current_date.month}-{current_date.day}"   
    random_version_id = str(uuid.uuid4())
    output_dir = f"s3://{target_bucket}/{prefix}/{day_partition}/{version_id}"
    s_customer_churn = customer_churn.toDF()
    gender_indexer = StringIndexer(inputCol="gender", outputCol="genderindex")
    s_customer_churn = gender_indexer.fit(s_customer_churn).transform(s_customer_churn)
    geo_indexer = StringIndexer(inputCol="geography", outputCol="geographyindex")
    s_customer_churn = geo_indexer.fit(s_customer_churn).transform(s_customer_churn)
    s_customer_churn = s_customer_churn.select('geographyindex', 'estimatedsalary','hascrcard','numofproducts', 'balance', 'age', 'genderindex', 'isactivemember', 'creditscore', 'tenure', 'exited')
    s_customer_churn = s_customer_churn.coalesce(1)
    s_customer_churn.write.option("header","true").format("csv").mode('Overwrite').save(output_dir)
    logger.info("output_dir:" + output_dir) 
    
  7. 点击保存然后点击运行作业按钮来运行作业。通过在 Glue 控制台中点击ETL 作业链接,检查作业运行状态,然后点击作业运行监控

  8. 作业完成后,检查 S3 中的 s3://MLSA-DataLake-Serving-<your initials>/ml-customer-churn/<date>/<guid>/ 位置,看看是否生成了新的 CSV 文件。打开文件,查看是否在文件中看到了新的处理后的数据集。

您现在已成功构建了一个 AWS Glue 作业,用于数据处理和机器学习特征工程。有了这个,您可以自动化数据处理和特征工程,这对于实现可重复性和治理至关重要。尝试创建一个爬虫来爬取 MLSA-DataLake-Serving-<your initials> 存储桶中的新处理数据,使其在 Glue 目录中可用,并对它执行一些查询。您应该会看到一个新表被创建,具有多个分区(例如,ml-customer-churndateGUID),用于不同的训练数据集。您可以通过使用 GUID 分区作为查询条件来查询数据。

使用 Glue 工作流程构建数据管道

接下来,我们将构建一个管道,执行数据摄取作业,随后创建数据数据库目录。最后,将启动一个数据处理作业以生成训练数据集。此管道将自动化数据从源到所需格式的流动,确保为机器学习模型训练提供无缝且高效的数据处理:

  1. 首先,在 Gluemanagement 控制台的左侧面板中点击 工作流程(编排) 链接。

  2. 点击 添加工作流程 并在下一屏幕上为您的流程输入一个名称。然后,点击 创建工作流程 按钮。

  3. 选择您刚刚创建的工作流程,并点击 添加触发器。选择 添加新 选项卡,然后为触发器输入一个名称,并选择 on-demand 触发器类型。

  4. 在工作流程 UI 设计器中,您将看到一个新的 添加节点 图标出现。点击 添加节点 图标,选择 爬虫 选项卡,并选择 bank_customer_db_crawler,然后点击 添加

  5. 在工作流程 UI 设计器中,点击 爬虫 图标,您将看到一个新的 添加触发器 图标出现。点击 添加触发器 图标,选择 添加新 选项卡,并选择 在任意事件后启动 作为触发逻辑,然后点击 添加

  6. 在工作流程 UI 设计器中,点击 添加节点 图标,选择 作业 选项卡,并选择 customer_churn_process 作业。

  7. 在工作流程 UI 设计器中,最终的流程应类似于以下图表:图 4.7 – Glue 数据流设计

    图 4.8:Glue 数据流设计

  8. 现在,您已准备好运行工作流程。选择工作流程,并从 操作 下拉菜单中选择 运行。您可以通过选择 运行 ID 并点击 查看运行详情 来监控运行状态。您应该会看到类似于以下截图的内容:图 4.8 – Glue 工作流程执行

    图 4.9:Glue 工作流程执行

  9. 尝试删除customer_datachurn_list表,并重新运行工作流程。查看新表是否再次创建。检查s3://MLSA-DataLake-Serving-<your initials>/ml-customer-churn/<date>/ S3 位置,以验证是否创建了一个包含新数据集的新文件夹。

恭喜!你已经完成了动手实验室,并学习了如何构建一个简单的数据湖及其支持组件,以允许数据编目、数据查询和数据处理。你现在应该能够将所学的一些技能应用到现实世界的设计和 AWS 上数据管理平台的实施中,以支持机器学习开发生命周期。

摘要

在本章中,我们深入探讨了在机器学习背景下管理数据的考虑因素,并探讨了企业数据管理平台在机器学习中的架构。我们研究了数据管理与机器学习生命周期的交集,并学习了如何在 AWS 上设计数据湖架构。为了应用这些概念,我们通过使用 AWS Lake Formation 构建数据湖的过程进行了实践。

通过动手实践,我们练习了数据摄取、处理和编目,以进行数据发现、查询和机器学习任务。此外,我们还熟练掌握了使用 AWS 数据管理工具,如 AWS Glue、AWS Lambda 和 Amazon Athena。在下一章中,我们的重点将转向使用开源工具构建数据科学环境所涉及的架构和技术。

留下评论!

喜欢这本书吗?通过留下亚马逊评论来帮助像你这样的读者。扫描下面的二维码,获取你选择的免费电子书。

*限时优惠

第五章:探索开源机器学习库

可用的机器学习(ML)和数据科学技术种类繁多,包括开源和商业产品。在构建机器学习平台时,不同组织采取了不同的方法。一些组织选择了内部团队,利用开源技术栈,以实现更大的灵活性和定制化。其他组织则选择了商业产品,专注于解决特定的商业和数据挑战。此外,一些组织采用了混合架构,结合开源和商业工具,以利用两者的优势。作为一名机器学习解决方案架构师,了解可用的开源机器学习技术及其在构建稳健机器学习解决方案中的应用至关重要。

在接下来的章节中,我们的重点将在于探索用于实验、模型构建和机器学习平台开发的不同的开源技术。在本章中,我们将深入探讨包括 scikit-learn、Spark、TensorFlow 和 PyTorch 在内的流行机器学习库。我们将检查这些库的核心功能,并展示它们如何在机器学习项目生命周期的各个阶段有效利用,包括数据处理、模型开发和模型评估等任务。此外,您将有机会参与动手练习,通过这些机器学习库及其在训练模型中的应用获得实践经验。

具体来说,我们将涵盖以下主要主题:

  • 开源机器学习库的核心功能

  • 理解 scikit-learn 机器学习库

  • 理解 Apache Spark 机器学习库

  • 理解 TensorFlow 机器学习库和动手实验室

  • 理解 PyTorch 机器学习库和动手实验室

  • 如何在 TensorFlow 和 PyTorch 之间进行选择

技术要求

在本章中,您需要访问您已从第三章“探索机器学习算法”中安装的Jupyter环境的本地机器。

您可以在github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/tree/main/Chapter05找到本章中使用的代码示例。

开源机器学习库的核心功能

机器学习库是设计用来促进机器学习算法和技术实现的软件库。虽然它们与其他软件库有相似之处,但它们与众不同的地方在于它们对各种机器学习功能的专门支持。这些库通常通过不同的子包提供一系列功能,包括:

  • 数据处理和加工:这包括对不同数据任务的支持,例如加载不同格式的数据、数据处理、数据分析、数据可视化、数据转换和特征提取。

  • 模型构建和训练:这包括对内置机器学习算法的支持以及构建适用于广泛机器学习任务的定制算法的能力。大多数机器学习库还提供了对常用损失函数(如均方误差或交叉熵)和一系列优化器(如梯度下降、Adam 等)的支持,用户可以从中选择。一些库还提供了对跨多个 CPU/GPU 设备或计算节点进行分布式模型训练的高级支持。

  • 模型评估和验证:这包括用于评估训练模型性能的包,例如模型准确率、精确率、召回率或错误率。

  • 模型保存和加载:这包括将模型保存到各种格式以实现持久化的支持,以及将保存的模型加载到内存中进行预测的支持。

  • 模型服务:这包括模型服务功能,用于通过 API(通常是 RESTful API 网络服务)暴露训练好的机器学习模型。

  • 解释:这包括解释模型预测和特征重要性的功能。

机器学习库通常支持多种编程语言,包括 Python、Java 和 Scala 等流行选项,以满足多样化的用户需求。特别是 Python 已经成为机器学习领域的一个突出语言,许多库为其接口提供了广泛的支持。尽管用户界面通常是用 Python 实现的,但这些库的后端和底层算法主要用编译语言(如 C++和 Cython)编写。这种组合允许在模型训练和推理过程中实现高效和优化的性能。在接下来的章节中,我们将深入了解一些广泛使用的机器学习库,以更深入地了解其功能和能力,从广泛使用的机器学习库 scikit-learn 开始。

理解 scikit-learn 机器学习库

scikit-learn([scikit-learn.org/](scikit-learn.org/))是一个用于 Python 的开源机器学习库。最初于 2007 年发布,它是解决许多机器学习任务(如分类、回归、聚类和降维)中最受欢迎的机器学习库之一。scikit-learn 被不同行业的公司以及学术界广泛用于解决现实世界的业务案例,例如客户流失预测、客户细分、推荐和欺诈检测。

scikit-learn 主要建立在三个基础库之上:NumPySciPyMatplotlib

  • NumPy 是一个基于 Python 的库,用于管理大型多维数组和矩阵,并提供了额外的数学函数来操作数组和矩阵。

  • SciPy 提供了科学计算功能,例如优化、线性代数和傅里叶变换。

  • Matplotlib 用于数据可视化中的数据绘图。

总的来说,scikit-learn 是一系列常见数据处理和模型构建任务的充足且有效的工具。

安装 scikit-learn

您可以轻松地在 macOS、Windows 和 Linux 等不同操作系统上安装 scikit-learn 包。scikit-learn 库包托管在 Python 包索引 网站上 (pypi.org/) 和 Anaconda 包仓库 (anaconda.org/anaconda/repo)。要在您的环境中安装它,您可以使用 pip 包管理器或 Conda 包管理器。包管理器允许您在操作系统中安装和管理库包的安装。

要使用 pip 或 Conda 包管理器安装 scikit-learn 库,您可以简单地运行 pip install -U scikit-learn 从 PyPI 索引安装,或者如果您想使用 Conda 环境,则运行 conda install scikit-learn。您可以在 pip.pypa.io/ 学习更多关于 pip 的信息,以及 docs.conda.io 学习更多关于 Conda 的信息。

scikit-learn 的核心组件

scikit-learn 库为机器学习生命周期的各个阶段提供了广泛的 Python 类和功能。它由几个主要组件组成,如下面的图所示。通过利用这些组件,您可以构建机器学习管道并执行分类、回归和聚类等任务。

图 5.1 – scikit-learn 组件

图 5.1:scikit-learn 组件

现在,让我们深入了解这些组件如何支持机器学习生命周期的不同阶段:

  • 准备数据:对于数据处理,通常使用 pandas 库。它提供了核心数据加载和保存功能,以及数据选择、数据排列和数据统计摘要等数据操作实用工具。pandas 是建立在 NumPy 之上的。pandas 库还包含一些可视化功能,如饼图、散点图和箱线图。

    scikit-learn 提供了一系列用于数据处理和转换的转换器,例如填充缺失值、编码分类值、归一化和文本和图像的特征提取。您可以在 scikit-learn.org/stable/data_transforms.html 找到完整的转换器列表。此外,您还可以灵活地创建自定义转换器。

  • 模型训练scikit-learn提供了一系列机器学习算法(也称为估计器),用于分类和回归(例如,逻辑回归、k-最近邻和随机森林),以及聚类(例如,k-均值)。您可以在scikit-learn.org/stable/index.html找到算法的完整列表。以下示例代码展示了使用RandomForestClassifier算法通过标记的训练数据集训练模型的语法:

    from sklearn.ensemble import RandomForestClassifier
    model = RandomForestClassifier (
      max_depth, max_features, n_estimators
    )
    model.fit(train_X, train_y) 
    
  • 模型评估:scikit-learn 提供了超参数调整和交叉验证的实用工具,以及用于模型评估的metrics类。您可以在scikit-learn.org/stable/model_selection.html找到模型选择和评估工具的完整列表。以下示例代码展示了用于评估分类模型准确性的accuracy_score类:

    from sklearn.metrics import accuracy_score
    acc = accuracy_score (true_label, predicted_label) 
    

    超参数调整涉及优化机器学习模型的配置设置(超参数),以提高其性能并在给定的任务或数据集上获得更好的结果。交叉验证是一种统计技术,通过将数据集分成多个子集,在不同的组合上训练模型,并在每个子集上评估其性能,来评估机器学习模型的表现和泛化能力。

  • 模型保存:scikit-learn 可以使用 Python 对象序列化(picklejoblib)保存模型工件。序列化的pickle文件可以加载到内存中进行预测。以下示例代码展示了使用joblib类保存模型的语法:

    import joblib
    joblib.dump(model, "saved_model_name.joblib") 
    
  • 管道:scikit-learn 还提供了一个管道实用工具,可以将不同的转换器和估计器串联为一个单一的处理管道,并且它可以作为一个单一单元重用。这在您需要预处理数据以进行建模训练和模型预测时特别有用,因为两者都需要以相同的方式处理数据:

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.ensemble import RandomForestClassifier
    pipe = Pipeline([('scaler', StandardScaler()), (RF, RandomForestClassifier())])
    pipe.fit(X_train, y_train) 
    

如所示,使用 scikit-learn 开始实验和构建机器学习模型非常简单。scikit-learn 特别适合在单台机器上执行的典型回归、分类和聚类任务。然而,如果您正在处理大量数据集或需要在多台机器上执行分布式训练,除非算法支持增量训练,如SGDRegressor,否则 scikit-learn 可能不是最佳选择。因此,接下来,让我们探索在大型模型训练场景中表现卓越的其他机器学习库。

增量训练是一种机器学习方法,其中模型随着新数据的可用性而持续更新和优化,使模型能够适应不断变化的模式并在时间上提高其性能。

理解 Apache Spark ML 库

Apache Spark 是一个用于分布式数据处理的高级框架,旨在处理大规模数据处理任务。凭借其分布式计算能力,Spark 通过利用内存计算,使应用程序能够高效地在机器集群上加载和处理数据,从而显著减少处理时间。

从架构上讲,一个 Spark 集群由一个主节点和用于运行不同 Spark 应用的工作节点组成。在 Spark 集群中运行的每个应用程序都有一个驱动程序和自己的进程集,这些进程由驱动程序中的 SparkSession 对象协调。驱动程序中的 SparkSession 对象连接到集群管理器(例如 Mesos、Yarn、Kubernetes 或 Spark 的独立集群管理器),该管理器负责为 Spark 应用程序在集群中分配资源。具体来说,集群管理器在工作节点上获取称为 执行器 的资源来运行计算和存储 Spark 应用程序的数据。执行器配置了诸如 CPU 核心和内存等资源以满足任务处理需求。一旦分配了执行器,集群管理器将应用程序代码(Java JAR 或 Python 文件)发送到执行器。最后,SparkContext 将任务发送到执行器以运行。以下图显示了驱动程序程序如何与集群管理器和执行器交互以运行任务:

图 5.2 – 在 Spark 集群上运行 Spark 应用程序

图 5.2:在 Spark 集群上运行 Spark 应用程序

每个 Spark 应用程序都有一组自己的执行器,这些执行器在整个应用程序运行期间保持活跃。不同应用程序的执行器彼此隔离,并且它们只能通过外部数据存储来共享数据。

Spark 的机器学习包称为 MLlib,它运行在分布式 Spark 架构之上。它能够处理和训练不适合单台机器内存的大型数据集。它提供了包括 Python、Java、Scala 和 R 在内的不同编程语言的 API。从结构角度来看,它在核心组件和模型开发流程方面与 scikit-learn 库非常相似。

Spark 在各个行业中高度流行,并被不同规模的公司采用。像 NetflixUberPinterest 这样的大公司使用 Spark 进行大规模数据处理和转换,以及运行机器学习模型。

安装 Spark ML

Spark ML 库作为 Spark 安装的一部分包含在内。PySpark 是 Spark 的 Python API,可以使用 pippip install pyspark)像常规 Python 包一样安装。请注意,在安装 PySpark 之前,需要在机器上安装 Java 和 Python。您可以在 spark.apache.org/docs/latest/ 找到 Spark 的安装说明。

Spark ML 库的核心组件

与 scikit-learn 库类似,Spark 和 Spark ML 提供了从数据准备到模型评估和模型持久化的完整功能范围来构建机器学习模型。以下图表展示了 Spark 中可用于构建机器学习模型的核心组件:

图 5.3 – Spark ML 的核心组件

图 5.3:Spark ML 的核心组件

让我们更详细地看看 Spark 和 Spark ML 库包支持的核心功能:

  • 数据准备:Spark 支持 Spark DataFrame,这是一种分布式数据集合,可用于数据连接、聚合、过滤和其他数据操作需求。从概念上讲,Spark DataFrame 相当于关系数据库中的一个表。Spark DataFrame 可以在多台机器上分布式(即分区),这允许并行快速数据处理。Spark DataFrame 还基于一个称为懒执行模型。懒执行定义了一组转换(例如,添加列或过滤列)和转换仅在需要执行动作(例如,计算列的最小/最大值)时执行。这允许为不同的转换和动作生成执行计划以优化执行性能。

    要开始使用 Spark 功能,您需要创建一个 Spark 会话。Spark 会话创建一个SparkContext对象,这是访问 Spark 功能的入口点。以下示例代码展示了如何创建 Spark 会话:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName('appname').getOrCreate() 
    

    Spark DataFrame 可以从许多不同的来源构建,例如结构化数据文件(例如,CSV 或 JSON)和外部数据库。以下代码示例将 CSV 文件读取到 Spark DataFrame 中:

    dataFrame = spark.read.format('csv').load(file_path) 
    

    Spark 基于不同的数据处理需求提供了许多数据转换和处理的转换器,例如Tokenizer(将文本分解成单个单词)和StandardScalar(将特征归一化到单位偏差和/或零均值)。您可以在spark.apache.org/docs/2.1.0/ml-features.html找到支持的转换器列表。

    要使用转换器,首先必须使用函数参数(如inputColoutputCol)初始化它,然后在包含数据的 DataFrame 上调用fit()函数,最后调用transform()函数来转换 DataFrame 中的特征:

    from pyspark.ml.feature import StandardScaler
    scaler = StandardScaler(inputCol="features",  outputCol="scaledFeatures", withStd=True, withMean=False)
    scalerModel = scaler.fit(dataFrame)
    scaledData = scalerModel.transform(dataFrame) 
    
  • 模型训练:Spark ML 支持广泛的机器学习算法,包括分类、回归、聚类、推荐和主题建模。您可以在spark.apache.org/docs/1.4.1/mllib-guide.html找到 Spark ML 算法的列表。以下代码示例展示了如何训练一个逻辑回归模型:

    from pyspark.ml.classification import LogisticRegression
    lr_algo = LogisticRegression(
      maxIter regParam, elasticNetParam
    )
    lr_model = lr_algo.fit(dataFrame) 
    
  • 模型评估:对于模型选择和评估,Spark ML 提供了交叉验证、超参数调整和模型评估指标的工具。您可以在spark.apache.org/docs/latest/api/python/reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html找到评估器的列表。以下代码块展示了如何使用BinaryClassificationEvaluatorareaUnderPR指标来评估模型:

    From pyspark.ml.evaluation import BinaryClassificationEvaluator
    dataset = spark.createDataFrame(scoreAndLabels, ["raw", "label"])
    evaluator = BinaryClassificationEvaluator()
    evaluator.setRawPredictionCol("raw")
    evaluator.evaluate(dataset)
    evaluator.evaluate(dataset, {evaluator.metricName: "areaUnderPR"}) 
    
  • 管道:Spark ML 也支持管道概念,类似于 scikit-learn。使用管道概念,你可以将一系列转换和模型训练步骤作为一个统一的可重复步骤进行排序:

    from pyspark.ml import Pipeline
    from pyspark.ml.classification import LogisticRegression
    from pyspark.ml.feature import HashingTF, Tokenizer
    lr_tokenizer = Tokenizer(inputCol, outputCol)
    lr_hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol)
    lr_algo = LogisticRegression(maxIter, regParam)
    lr_pipeline = Pipeline(stages=[lr_tokenizer, lr_hashingTF, lr_algo])
    lr_model = lr_pipeline.fit(training) 
    
  • 模型保存:Spark ML 管道可以被序列化为一种称为 Mleap bundle 的序列化格式,这是 Spark 的一个外部库。序列化的 Mleap bundle 可以被反序列化回 Spark 进行批量评分或 Mleap 运行时来运行实时 API。您可以在combust.github.io/mleap-docs/找到有关 Mleap 的更多详细信息。以下代码展示了将 Spark 模型序列化为 Mleap 格式的语法:

    import mleap.pyspark
    from pyspark.ml import Pipeline, PipelineModel
    lr_model.serializeToBundle("saved_file_path", lr_model.transform(dataframe)) 
    

Spark 是一个多功能的框架,它使大规模数据处理和机器学习成为可能。虽然它在传统的机器学习任务中表现出色,但它也提供了对神经网络训练的有限支持,包括多层感知器算法。然而,为了更全面的深度学习功能,我们将在接下来的章节中探讨专门的机器学习库,包括 TensorFlow 和 PyTorch。

理解 TensorFlow 深度学习库

TensorFlow 最初于 2015 年发布,是一个流行的开源机器学习库,主要由谷歌支持,主要用于深度学习。TensorFlow 已被各种规模的公司用于训练和构建用于各种用例的最先进的深度学习模型,包括计算机视觉、语音识别、问答、文本摘要、预测和机器人技术。

TensorFlow 基于计算图的概念工作,其中数据通过表示数学运算的节点流动。核心思想是构建一个操作和张量的图,其中张量是n-维数组,携带数据。张量的一个例子可以是标量值(例如,1.0),一维向量(例如,[1.0, 2.0, 3.0]),二维矩阵(例如,[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),甚至是更高维度的矩阵。在这些张量上执行操作,允许进行数学计算,如加法或矩阵乘法。以下图显示了执行一系列数学操作的张量示例计算图:

图 5.4 – 数据流图

图 5.4:数据流图

在前面的计算图中,矩形节点是数学运算,而圆圈代表张量。这个特定的图表展示了执行人工神经元张量运算的计算图,即执行 WX 的矩阵乘法,然后加上 b,最后应用 ReLU 动作函数。等效的数学公式如下:

TensorFlow 允许用户通过其高级 API 或直接与底层组件交互来定义和操作计算图。这种灵活性使得研究人员和开发者能够创建复杂的模型和算法。此外,TensorFlow 支持分布式计算,允许图在多个设备或机器上执行,这对于处理大规模机器学习任务至关重要。这种分布式架构使得 TensorFlow 能够利用集群或 GPU 的力量来加速深度学习模型的训练和推理。

安装 TensorFlow

可以使用基于 Python 的环境中的 pip install --upgrade tensorflow 命令来安装 TensorFlow。安装后,TensorFlow 可以像任何其他 Python 库包一样使用。

TensorFlow 的核心组件

TensorFlow 库为不同的机器学习步骤提供了丰富的功能,从数据准备到模型部署。以下图表展示了 TensorFlow 库的核心构建模块:

图 5.5 – TensorFlow 组件

图 5.5:TensorFlow 组件

使用 TensorFlow 2.x 训练机器学习模型涉及以下主要步骤:

  1. 准备数据集:TensorFlow 2.x 提供了一个 tf.data 库,用于高效地从源(如文件)加载数据,转换数据(如更改数据集的值),以及设置用于训练的数据集(如配置批量大小或数据预取)。这些数据类提供了将数据传递给训练算法以优化模型训练的高效方式。TensorFlow 的 Keras API 还提供了一系列内置类(MNIST、CIFAR、IMDB、MNIST Fashion 和 Reuters Newswire),用于构建简单的深度学习模型。您还可以将 NumPy 数组或 Python 生成器(一个类似迭代器的函数)馈送到 TensorFlow 中的模型进行模型训练,但 tf.data 是推荐的方法。

  2. 定义神经网络:TensorFlow 2.x 提供了多种使用或构建神经网络进行模型训练的方法。您可以使用预制的估计器(如tf.estimator类的DNNRegressorDNNClassifier)来训练模型。或者,您可以使用tf.keras类创建自定义神经网络,该类提供了一系列原语,如tf.keras.layers用于构建神经网络层,以及tf.keras.activation如 ReLU、SigmoidSoftmax用于构建神经网络。Softmax 通常用作多类问题的神经网络最后一个输出,它接受一个实数向量(正数和负数)作为输入,并将向量归一化为概率分布,以表示不同类别标签的概率,例如不同类型的手写数字。对于二元分类问题,通常使用 Sigmoid,它返回介于 0 和 1 之间的值。

  3. 定义损失函数:TensorFlow 2.x 提供了内置的损失函数列表,例如用于回归任务的均方误差(MSE)和平均绝对误差(MAE),以及用于分类任务的交叉熵损失。您可以在en.wikipedia.org/wiki/Mean_squared_erroren.wikipedia.org/wiki/Mean_absolute_error找到关于 MSE 和 MAE 的更多详细信息。您可以在tf.keras.losses类中找到支持的损失函数列表。有关不同损失函数的更多详细信息,请参阅keras.io/api/losses/。如果内置的损失函数不能满足需求,还可以定义自定义损失函数。

  4. 选择优化器:TensorFlow 2.x 的tf.keras.optimizers类提供了一系列内置的优化器,例如用于参数优化的Adam优化器和随机梯度下降(SGD)优化器。您可以在keras.io/api/optimizers/找到关于不同支持的优化器的更多详细信息。Adam 和 SGD 是最常用的优化器之一。

  5. 选择评估指标:TensorFlow 2.x 的tf.keras.metrics类提供了一系列内置的模型评估指标(例如准确率和交叉熵),用于模型训练评估。您还可以在训练期间为模型评估定义自定义指标。

  6. 将网络编译成模型:此步骤将定义的网络、定义的损失函数、优化器和评估指标编译成一个准备进行模型训练的计算图。

  7. 模型拟合:此步骤通过将数据通过批次和多个 epoch 传递到计算图中来启动模型训练过程,以优化模型参数。

  8. 评估训练好的模型:一旦模型训练完成,您可以使用evaluate()函数对测试数据进行模型评估。

  9. 保存模型:模型可以保存为 TensorFlow 的SavedModel序列化格式或层次数据格式HDF5)格式。

  10. 模型服务:TensorFlow 附带了一个名为 TensorFlow Serving 的模型服务框架,我们将在第七章开源机器学习平台中更详细地介绍。

TensorFlow 库旨在用于大规模生产级数据处理和模型训练。因此,它提供了在服务器集群上对大型数据集进行大规模分布式数据处理和模型训练的能力。我们将在第十章高级机器学习工程中更详细地介绍大规模分布式数据处理和模型训练。

为了支持构建和部署机器学习管道的完整流程,TensorFlow 提供了TensorFlow ExtendedTFX)。TFX 集成了 TensorFlow 生态系统中的多个组件和库,创建了一个用于数据摄取、数据验证、预处理、模型训练、模型评估和模型部署等任务的统一平台。其架构设计为模块化和可扩展,使用户能够根据其特定需求定制和扩展管道。您可以在www.tensorflow.org/tfx上获取更多关于 TFX 的详细信息。

TensorFlow 提供了一系列库和扩展,用于解决各种高级机器学习问题,包括联邦学习(使用去中心化数据进行模型训练)、模型优化(优化模型以部署和执行)和概率推理(使用概率论在不确定性下进行推理)。它还通过 TensorFlow Lite 组件为移动和边缘设备提供支持,并通过 TensorFlow.js 库为浏览器提供支持。

动手练习 - 训练 TensorFlow 模型

随着深度学习在最近机器学习进步中的主导地位,拥有一些深度学习框架的实践经验非常重要。在这个练习中,您将学习如何在您的本地 Jupyter 环境中安装 TensorFlow 库,并构建和训练一个简单的神经网络模型。启动您之前安装在机器上的 Jupyter 笔记本。如果您不记得如何做,请回顾第三章探索机器学习算法中的动手实验室部分。

一旦 Jupyter 笔记本运行起来,通过选择新建下拉菜单然后文件夹来创建一个新的文件夹。将文件夹重命名为TensorFlowLab。打开TensorFlowLab文件夹,在此文件夹内创建一个新的笔记本,并将其重命名为Tensorflow-lab1.ipynb。现在,让我们开始吧:

  1. 在第一个单元格中,运行以下代码来安装 TensorFlow。如第三章所述,pip是 Python 包安装工具:

    ! pip3 install --upgrade tensorflow 
    
  2. 现在,我们必须导入库并加载样本训练数据。我们将使用keras库内置的fashion_mnist数据集来完成此操作。接下来,我们必须将数据加载到tf.data.Dataset类中,然后调用其batch()函数来设置批大小。在新的单元格中运行以下代码块以加载数据并配置数据集:

    import numpy as np
    import tensorflow as tf
    train, test = tf.keras.datasets.fashion_mnist.load_data()
    images, labels = train
    labels = labels.astype(np.int32)
    images = images/256  
    train_ds = tf.data.Dataset.from_tensor_slices((images, labels))
    train_ds = train_ds.batch(32) 
    
  3. 让我们看看数据是什么样的。在新的单元格中运行以下代码块以查看样本数据。Matplotlib是一个 Python 可视化库,用于显示图像:

    from matplotlib import pyplot as plt
    print ("label:" + str(labels[0]))
    pixels = images[0]
    plt.imshow(pixels, cmap='gray')
    plt.show() 
    
  4. 接下来,我们构建一个简单的多层感知器MLP)网络,包含两个隐藏层(一个包含100个节点,另一个包含50个节点)和一个包含10个节点的输出层(每个节点代表一个类别标签)。然后,我们必须使用Adam优化器编译网络,使用交叉熵损失作为优化目标,并使用准确度作为衡量指标。

    Adam 优化器是梯度下降GD)的一种变体,它主要在自适应学习率更新参数以改善模型收敛方面改进 GD,而 GD 使用恒定的学习率进行参数更新。交叉熵衡量分类模型的性能,其中输出是不同类别的概率分布,总和为 1。当预测分布与实际类别标签偏离时,交叉熵误差会增加。

    要启动训练过程,我们必须调用fit()函数,这是此情况下的一个必要步骤。我们将运行 10 个 epoch 的训练。一个 epoch 是整个训练数据集的一次遍历。请注意,这里运行 10 个 epoch 只是为了说明目的。实际的数量将基于具体的训练作业和期望的模型性能:

    model = tf.keras.Sequential([
       tf.keras.layers.Flatten(),
       tf.keras.layers.Dense(100, activation="relu"),
       tf.keras.layers.Dense(50, activation="relu"),
       tf.keras.layers.Dense(10),
       tf.keras.layers.Softmax()
    ])
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(),
                  metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
    model.fit(train_ds, epochs=10) 
    

    当模型正在训练时,你应该会看到每个 epoch 都会报告损失指标和准确度指标,以帮助理解训练作业的进度。

  5. 现在模型已经训练完成,我们需要使用测试数据集来验证其性能。在下面的代码中,我们正在为测试数据创建一个test_ds

    images_test, labels_test = test
    labels_test = labels_test.astype(np.int32)
    images_test = images_test/256  
    
    test_ds = tf.data.Dataset.from_tensor_slices((images_test, labels_test))
    test_ds = train_ds.batch(32)
    test_ds = train_ds.shuffle(30)
    results = model.evaluate(test_ds)
    print("test loss, test acc:", results) 
    
  6. 你也可以使用独立的keras.metrics来评估模型。在这里,我们正在获取预测结果,并使用tf.keras.metrics.Accuracy来计算与test[1]中真实值相比的预测准确度:

    predictions = model.predict(test[0])
    predicted_labels = np.argmax(predictions, axis=1)
    m = tf.keras.metrics.Accuracy()
    m.update_state(predicted_labels, test[1])
    m.result().numpy() 
    

    你可能会注意到前一步和这一步的准确度指标略有不同。这是因为用于评估的数据集样本并不完全相同。

  7. 要保存模型,请在新的单元格中运行以下代码。它将以SavedModel序列化格式保存模型:

    model.save("my_model.keras") 
    
  8. 打开model目录。你应该会看到生成了几个文件,例如saved_model.pb,以及variables子目录下的几个文件。

干得好!您已成功在本地 Jupyter 环境中安装了 TensorFlow 包并完成了深度学习模型的训练。通过这个过程,您现在已经掌握了 TensorFlow 及其在训练深度学习模型方面的能力。让我们将注意力转向 PyTorch,这是另一个广泛使用且备受推崇的深度学习库,它在实验和生产级机器学习模型训练方面都表现出色。

理解 PyTorch 深度学习库

PyTorch 是一个开源的机器学习库,旨在使用 GPU 和 CPU 进行深度学习。最初于 2016 年发布,它是一个高度流行的机器学习框架,拥有庞大的追随者和众多采用者。许多科技公司,包括像FacebookMicrosoftAirbnb这样的科技巨头,都在广泛的深度学习用例中大量使用 PyTorch,例如计算机视觉和自然语言处理NLP)。

PyTorch 在性能(使用 C++后端)和易用性之间取得了良好的平衡,默认支持动态计算图和与 Python 生态系统的互操作性。例如,使用 PyTorch,您可以轻松地在 NumPy 数组和 PyTorch 张量之间进行转换。为了便于反向传播,PyTorch 内置了对自动计算梯度的支持,这对于基于梯度的模型优化是必不可少的。

PyTorch 库由几个关键模块组成,包括张量、autogradoptimizerneural network。张量用于存储和操作多维数组。您可以对张量执行各种操作,如矩阵乘法、转置、返回最大值和维度操作。PyTorch 通过其 Autograd 模块支持自动梯度计算。在执行正向传播时,Autograd 模块同时构建一个计算梯度的函数。Optimizer 模块提供了 SGD 和 Adam 等算法,用于更新模型参数。神经网络模块提供了表示神经网络不同层的模块,如线性层、嵌入层和 dropout 层。它还提供了一组常用的损失函数列表,这些函数常用于训练深度学习模型。

安装 PyTorch

PyTorch 可以在不同的操作系统上运行,包括 Linux、Mac 和 Windows。您可以通过访问pytorch.org/上的说明来在您的环境中安装它。例如,您可以使用pip install torch命令在基于 Python 的环境中安装它。

PyTorch 的核心组件

与 TensorFlow 类似,PyTorch 也支持端到端的机器学习工作流程,从数据准备到模型部署。以下图表显示了不同的 PyTorch 模块用于训练和部署 PyTorch 模型:

图 5.6 – 用于模型训练和部署的 PyTorch 模块

图 5.6:PyTorch 用于模型训练和服务的模块

训练深度学习模型涉及的步骤与 TensorFlow 模型训练的步骤非常相似。我们将在以下步骤中查看 PyTorch 特有的细节:

  1. 准备数据集:PyTorch 提供了两个用于数据集和数据加载管理的原语:torch.utils.data.Datasettorch.utils.data.DataloaderDataset存储数据样本及其对应的标签,而Dataloader包装数据集,为模型训练提供方便和高效的数据访问。Dataloader提供了如shufflebatch_sizeprefetch_factor等函数来控制数据的加载和提供给训练算法的方式。此外,由于数据集中的数据在训练之前可能需要转换,Dataset允许您使用用户定义的函数来转换数据。

  2. 定义神经网络:PyTorch 通过其torch.nn类提供了构建神经网络的抽象层,该类为不同的神经网络层(如线性层和卷积层)以及激活层(如 Sigmoid 和 ReLU)提供了内置支持。它还包含容器类,如nn.Sequential,用于将不同的层打包成一个完整的网络。现有的神经网络也可以加载到 PyTorch 中进行训练。

  3. 定义损失函数:PyTorch 在其torch.nn类中提供了多个内置的损失函数,例如nn.MSELossnn.CrossEntropyLoss

  4. 选择优化器:PyTorch 通过其nn.optim类提供了多个优化器。优化器的例子包括optim.SGDoptim.Adamoptim.RMSProp。所有优化器都有一个step()函数,用于在每个前向传递中更新模型参数。还有一个反向传递,用于计算梯度。

  5. 选择评估指标:PyTorch 的ignite.metrics类提供了多个评估指标,例如精确度、召回率和RootMeanSquaredError,用于评估模型性能。您可以在en.wikipedia.org/wiki/Precision_and_recall上了解更多关于精确度和召回率的信息。您还可以使用 scikit-learn 指标库来帮助评估模型。

  6. 训练模型:在 PyTorch 中训练模型涉及每个训练循环中的三个主要步骤:前向传递训练数据,反向传递训练数据以计算梯度,并执行优化器步骤以更新梯度。

  7. 保存/加载模型torch.save()函数以序列化的pickle格式保存模型。torch.load()函数将序列化的模型加载到内存中进行推理。常见的约定是使用.pth.pt扩展名保存文件。您还可以将多个模型保存到单个文件中。

  8. 模型服务:PyTorch 附带一个名为 TorchServe 的模型服务库,我们将在第七章“开源机器学习平台”中更详细地介绍。

PyTorch 库支持大规模分布式数据处理和模型训练,我们将在第十章“高级机器学习工程”中更详细地介绍。像 TensorFlow 一样,PyTorch 也提供了一套广泛的库包,用于解决各种机器学习问题,包括机器学习隐私、对抗鲁棒性、视频理解和药物发现。

现在你已经了解了 PyTorch 的基础知识,让我们通过一个简单的练习来动手实践。

动手练习 - 构建和训练 PyTorch 模型

在这个动手练习中,你将学习如何在你的本地机器上安装 PyTorch 库,并使用 PyTorch 训练一个简单的深度学习模型。启动你之前安装在本机的 Jupyter 笔记本。如果你不记得如何做,请访问第三章“探索机器学习算法”中的动手实验室部分。现在,让我们开始吧:

  1. 在你的 Jupyter 笔记本环境中创建一个名为pytorch-lab的新文件夹,并创建一个名为pytorch-lab1.ipynb的新笔记本文件。在一个单元中运行以下命令来安装 PyTorch 和torchvision包。torchvision包含一系列计算机视觉模型和数据集。我们将使用torchvision包中的预构建 MNIST 数据集来完成这个练习:

    !pip3 install torch
    !pip3 install torchvision 
    
  2. 以下示例代码显示了之前提到的主组件。请确保在每个单独的 Jupyter 笔记本单元中运行每个代码块,以获得最佳的可读性。

    首先,我们必须导入必要的库包,并从torchvision数据集类中加载 MNIST 数据集:

    import numpy as np
    import matplotlib.pyplot as plt
    import torch
    from torchvision import datasets, transforms
    from torch import nn, optim
    transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,),)])
    trainset = datasets.MNIST('pytorch_data/train/', download=True, train=True, transform=transform)
    valset = datasets.MNIST('pytorch_data/test/', download=True, train=False, transform=transform)
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True) 
    
  3. 接下来,我们必须构建一个用于分类的多层感知器(MLP)神经网络。这个 MLP 网络有两个隐藏层,第一层和第二层使用 ReLU 激活函数。MLP 模型接受784大小的输入,这是 28x28 图像的展平维度。第一隐藏层有128个节点(神经元),而第二层有64个节点(神经元)。最终层有10个节点,因为我们有 10 个类别标签:

    model = nn.Sequential(nn.Linear(784, 128),
                          nn.ReLU(),
                          nn.Linear(128, 64),
                          nn.ReLU(),
                          nn.Linear(64, 10)) 
    
  4. 下面是图像数据的示例:

    images, labels = next(iter(trainloader))
    pixels = images[0][0]
    plt.imshow(pixels, cmap='gray')
    plt.show() 
    
  5. 现在,我们必须为训练过程定义一个交叉熵损失函数,因为我们想测量所有标签的概率分布中的误差。在内部,PyTorch 的CrossEntropyLoss自动将softmax应用于网络输出,以计算不同类别的概率分布。对于优化器,我们选择了学习率为0.003的 Adam 优化器。view()函数将二维输入数组(28x28)展平成一维向量,因为我们的神经网络接受一维向量输入:

    criterion = nn.CrossEntropyLoss()
    images = images.view(images.shape[0], -1)
    output = model(images)
    loss = criterion(output, labels)
    optimizer = optim.Adam(model.parameters(), lr=0.003) 
    

    学习率是决定优化过程中步长大小的一个超参数。

  6. 现在,让我们开始训练过程。我们将运行 15 个纪元。与 TensorFlow Keras API 不同,在那里你只需调用一个 fit() 函数来开始训练,PyTorch 需要你构建一个训练循环,并特别运行正向传递(model (images)),运行反向传递以学习(loss.backward()),更新模型权重(optimizer.step()),然后计算总损失和平均损失。对于每个训练步骤,trainloader 返回一个批次(批次大小为 64)的训练数据样本。每个训练样本被展平成一个 784 个元素的向量。优化器在每个训练步骤中用零重置:

    epochs = 15
    for e in range(epochs):
        running_loss = 0
    for images, labels in trainloader:
            images = images.view(images.shape[0], -1)
            optimizer.zero_grad()
            output = model(images)
            loss = criterion(output, labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
        else:
            print("Epoch {} - Training loss: {}".format(e, running_loss/len(trainloader))) 
    

    当训练代码运行时,它应该打印出每个纪元的平均损失。

  7. 要使用验证数据测试准确度,我们必须将验证数据集通过训练模型运行,并使用 scikit-learn 的 .metrics.accuracy_score() 函数来计算模型的准确度:

    valloader = torch.utils.data.DataLoader(valset, batch_size=valset.data.shape[0], shuffle=True)
    val_images, val_labels = next(iter(valloader))
    val_images = val_images.view(val_images.shape[0], -1)
    predictions = model (val_images)
    predicted_labels = np.argmax(predictions.detach().numpy(), axis=1)
    from sklearn.metrics import accuracy_score
    accuracy_score(val_labels.detach().numpy(), predicted_labels) 
    
  8. 最后,我们必须将模型保存到文件中:

    torch.save(model, './model/my_mnist_model.pt') 
    

恭喜!您已成功在本地 Jupyter 环境中安装 PyTorch 并训练了一个深度学习 PyTorch 模型。

如何在 TensorFlow 和 PyTorch 之间进行选择

TensorFlow 和 PyTorch 是深度学习领域中最受欢迎的两个框架。因此,一个相关的问题随之而来:一个人如何在这两个框架之间做出明智的选择?为了帮助回答这个问题,让我们对这些框架进行快速的比较分析:

  • 易用性:PyTorch 通常被认为更易于使用且更符合 Python 风格。其控制流程感觉更接近原生 Python,PyTorch 的动态计算图比 TensorFlow 的静态图更容易调试和迭代。然而,TensorFlow 2.0 中的即时执行支持有助于缩小这一差距。PyTorch 也被认为比 TensorFlow 更面向对象。

  • 社区受欢迎程度:这两个框架都享有坚实的社区支持,并且非常受欢迎。TensorFlow 最初领先;然而,根据 Google Trends 报告,PyTorch 在近年来在受欢迎程度上已经迎头赶上。PyTorch 在研究社区中更广泛地被采用,并在研究论文的实施中占据主导地位。

  • 模型可用性:TensorFlow 有 TensorFlow Model Garden,它托管了一个使用 TensorFlow API 的模型集合,涵盖了各种机器学习任务,如计算机视觉、NLP 和推荐。它还提供了 TensorFlow Hub,它提供了一系列预训练模型,可用于部署或微调各种机器学习任务。同样,PyTorch 有 PyTorch Hub,这是一个集成到 PyTorch 中的库,提供了对广泛预训练模型的便捷访问,包括计算机视觉、NLP 等。

  • 部署:这两个框架都适合机器学习模型的实际部署。TensorFlow 被认为拥有更全面的模型部署栈,包括 TensorFlow Serving、TensorFlow Lite 用于移动和边缘设备,以及 TensorFlow.js 用于浏览器部署。TensorFlow Extended 是一个端到端模型部署平台,包括模型验证、监控和解释。PyTorch 提供了用于 PyTorch 模型的模型服务框架 TorchServe,以及 PyTorch Mobile 用于在 iOS 和 Android 设备上部署模型。PyTorch 在部署过程中更依赖于第三方解决方案来实现端到端集成。

总结来说,这两个框架在整个机器学习生命周期中提供了可比的能力,适应了类似的使用案例。如果你的组织已经承诺使用 TensorFlow 或 PyTorch,建议继续执行该决定。然而,对于那些刚开始的人来说,PyTorch 可能由于其易用性而提供一个更易于入门的起点。

摘要

在本章中,我们探讨了几个流行的开源机器学习库包,包括 scikit-learn、Spark ML、TensorFlow 和 PyTorch。到目前为止,你应该对这些库的基本组件以及如何利用它们来训练机器学习模型有了很好的理解。此外,我们还深入探讨了 TensorFlow 和 PyTorch 框架,用于构建人工神经网络、训练深度学习模型并将这些模型保存到文件中。这些模型文件随后可以在模型服务环境中用于预测。

在下一章中,我们将深入探讨 Kubernetes 以及其在构建开源机器学习解决方案的基础设施中的作用。

加入我们的 Discord 社区

加入我们的 Discord 空间,与作者和其他读者进行讨论:

packt.link/mlsah

二维码