高效数据科学构建与实践指南-二-

87 阅读1小时+

高效数据科学构建与实践指南(二)

原文:Building an Effective Data Science Practice

协议:CC BY-NC-SA 4.0

十三、数据捕捉

在本章中,我们将介绍数据科学过程的数据采集步骤中使用的典型技巧和技术。

对于数据捕获,第一个活动是识别哪些数据是相关的,哪些是相关数据的来源。一旦确定了这些,数据采集步骤中的进一步活动以及相关组件如图 13-1 所示。

img/504530_1_En_13_Fig1_HTML.png

图 13-1

数据捕获中的活动和组件

如图所示,我们将数据捕获中涉及的组件大致分为三组:数据源、摄取、数据存储。需要注意的是,您要解决的特定数据科学问题可能只需要一个数据源,而相关数据可能已经存在,比如说,CSV、excel 文件或数据库。 1 在这种情况下,数据科学家可以直接使用这些数据。但更常见的是,在一个成熟的组织中,会有多个与您计划解决的数据科学问题相关的数据源,前面的图表描述了这个更广泛的场景。

在本章的前几节中,我们将涵盖图 13-1 ,从底部开始,按照方框/箭头中指示的数字顺序向上移动。在这样做的同时,我们将讨论每个领域中涉及的技巧和技术。然后,我们将讨论在选择开源和付费数据捕获工具时需要考虑的几个因素。最后,我们将提到数据捕获中涉及的数据工程方面。

数据来源(1)

在一个组织中,数据通常分布在多个来源中。如果您的组织有多个生成数据的应用程序或工具,那么这些内部系统通常会将数据存储到数据库中。如果您的组织从设备收集数据,例如从物联网系统收集数据,这些也是数据的来源。这些通常是数据科学的主要数据源,并且是您的企业所独有的。

在某些情况下,您可以从外部 API获取数据。外部 API 的例子有

  • 公开 API 的社交媒体网站,如 Twitter。

  • Web 服务提供一些关于常见环境因素的信息,如天气、地理位置等。

  • 您部署的公开 API 的第三方工具,例如,如果您在自己的场所安装了本地气象站,它可以公开用于查询数据的 API。

在极少数情况下,您可能希望直接从网站中提取一些信息。这被称为网页抓取,需要对源网页的布局有所了解。这不是一个推荐的方法,因为每当网站的结构改变时,你就需要修改你提取信息的方式——因此,维护和可靠性往往是这种方法的一个问题。但是这种方法在极少数情况下会被采用——例如,如果您正在基于来自多个网站的公开信息构建一个信息系统,而这些网站没有公开 API。

理论上,数据科学家可以查询这些不同的来源,以获得他们分析所需的数据。但更有效的方法是将这些数据整理到一个单一的集中式沙盒中,即数据存储,数据科学团队可以从中执行分析。这需要从这些多个数据源获取数据,我们接下来将会看到这一点。

摄入(2)

各种 ETL 2 和工作流库/工具可用于将来自多个数据源的数据合并、转换和摄取到中央数据存储中——我们将此统称为摄取。火花、气流和卡夫卡是常用的工具,通常一起使用,代表三种常见的工具类别:

  • ETL 脚本:Spark 是合并多个数据源、清理和转换数据所需的大数据 ETL 脚本和批处理作业的代表。

  • 工作流编排:Airflow 是编排跨多个脚本/作业的复杂工作流的工具代表。

  • 事件流处理:Kafka 是事件流处理的代表。当实时数据从数据源到达 Kafka 时,监听器被触发,进而触发 ETL 脚本或工作流。

如果您的公司有传统的企业数据集成工具,如 Informatica,它们也可以适当地用于这些目的。

摄取的目标是在集中式数据存储中以合理组织的形式提供数据。

数据存储

数据存储包含所有获取的数据,供数据科学团队的其他成员用于数据科学流程中的其他步骤,从数据准备开始。

数据存储可以由以下一个或多个组成:数据湖(3)、数据仓库(4)和共享文件系统(5)。我们将在接下来的小节中逐一介绍。

数据湖(3)

数据湖通常是收集所有数据资产的地方。除了从数据源获取的数据之外,数据还经常从数据湖移动到其他形式的存储,下面的小节将介绍这些数据。

低存储成本是数据湖的主要特征之一。在过去几年中,亚马逊 S3(或其在 Azure 和其他云提供商上的同类产品)一直是数据湖的首选技术。 3

数据湖可用于存储图像、视频、音频等数据。它还可以用来存储 CSV、JSON、Parquet 或 ORC 等格式的表格数据。

对于表格数据,数据湖传统上有一些限制:

  1. 数据湖不支持单个记录的有效更新。这经常导致数据处理流水线中的问题 4

  2. SQL 是查询复杂分析的表格数据和更新记录的常用机制。但是数据湖本身并不支持 SQL。

Delta Lake 等最新技术支持数据湖之上的 SQL 层,这也允许高效地更新记录。这大大简化了数据处理流水线。

因为 Delta Lake 是建立在数据湖技术之上的,所以我们也将其归类为数据湖。

数据仓库(4)

数据仓库的主要目的是使用 SQL 快速执行复杂的分析查询。这使得数据科学家和数据分析师能够使用可视化工具/库或 SQL 来执行快速的探索性数据分析。虽然数据仓库自 20 世纪 80 年代就已经出现,但过去十年中最重要的发展是存储半结构化和非结构化数据的能力,如 JSON,以及传统的表格形式。

通常,在开始一系列新的实验时,数据科学家/工程师会将相关数据从数据湖加载到数据仓库中进行分析。

高级 BI 工具通常用于数据可视化步骤(参见第十五章)。这些 BI 工具通常需要一个数据仓库来同时高效地执行多个 SQL 查询。

现代云数据仓库还支持使用 SQL 查询存储在数据湖中的表格数据。例如,如果您在亚马逊 S3 有以 Parquet 格式存储的表格数据,可以从亚马逊红移中查询。 5

数据仓库还支持使用 SQL 高效更新单个记录。与存储在数据湖中的表格数据相比,这是数据仓库的额外好处之一。

雪花、亚马逊红移和 Azure Synapse 都是现代数据仓库的例子。

ADVANCED NOTE: DECOUPLED COMPUTE AND STORAGE

大约在 2015 年,云数据仓库开始被设计为提供分离的存储和计算,以根据数据科学团队的需求实现扩展。例如,数据科学家或数据工程师可以快速启动适当规模的计算集群来执行分析,并在不需要时将其关闭。另一方面,在传统数据仓库的情况下,由于存储和计算在同一个集群上,您通常必须始终保持集群运行。

我们提到的所有三个数据仓库示例都支持解耦存储和计算扩展。

TERMINOLOGY CHAOS: LAKEHOUSE

最近备受关注的一个术语是 lakehouse 。lakehouse 的愿景是将数据湖(低成本)和数据仓库(高性能 SQL,具有更新记录的能力)这两个世界的精华与解耦的存储和计算结合起来。

我们认为“lakehouse”这个术语有助于描述愿景,而不是对工具进行分类。例如,我们归类为数据湖的三角洲湖也可以被描述为湖屋。我们引用的现代云数据仓库都具有使它们也能够被描述为湖边小屋的功能。

在任何情况下,我们都建议您为您的团队和组织选择正确的技术,即数据湖和/或数据仓库——,而不要被湖屋的概念分散注意力。

共享文件系统(5)

如果您的团队正在处理图像、视频、音频等。,以及需要 GPU 的深度学习框架,那么可以考虑使用共享文件系统,如亚马逊 EFS,以便从多台机器或集群中高效访问机器学习的数据。

由于数据准备步骤中会发生各种转换,因此数据准备的输出——如转换后的图像等。–也可以写回 EFS。这使得您团队中的数据科学家和数据工程师能够无缝协作,例如,如果一名数据科学家开发了一种新的数据准备机制,则转换后的数据可以存储在 EFS,其他团队成员可以立即使用这些数据进行进一步分析。

读取数据(6)

数据存储中的数据由数据科学团队访问,以进行数据科学流程的后续步骤,从数据准备等开始。在这一节中,我们将介绍数据通常是如何被访问的。

如果您只使用数据仓库,那么您的团队将使用 SQL 来读取数据进行分析。

如果您使用数据湖,那么存储的数据通常由数据科学团队使用编程 API 或 SQL 读取。在本节的剩余部分,我们将讨论从数据湖中读取数据的这两种变化。

程序化访问

以 CSV、JSON 或 Parquet 等格式存储在数据湖中的表格数据可以使用 Python、R、Scala 等语言中的编程 API 来读取。例子包括

  • Python 库Pandas

  • Scala 中的 Spark 库或 Python 中的 PySpark

除了表格数据,其他类型的数据,如图像等。可以使用数据湖提供的编程 API 来访问。例如,AWS 提供 Python 等编程语言的库来访问存储在 S3 的数据。

SQL 查询引擎

说到大数据,组织在没有数据仓库的情况下将表格数据存储在数据湖(例如,在 AWS S3)中是很常见的。为了支持使用 SQL 查询数据湖中的表格数据,一种常见的方法是使用 SQL 查询引擎。

Presto、Spark SQL 和 AWS Athena 都是 SQL 查询引擎的例子。这些通常用于分析师、数据工程师或数据科学家的即席查询。

开源与付费

对于摄取,我们提到的库和框架都是开源的。有一些付费服务使管理和扩展基础设施变得更容易,例如,AWS 为 Spark、Airflow 和 Kafka 提供托管服务。 6

对于数据湖和数据仓库,云上的付费工具和服务目前通常是首选,因为它们提供了灵活的定价模型和弹性伸缩。 7 它们通常比部署一个开源仓库(比如 PostgreSQL)并在自己的基础设施中进行管理更具成本效益。

数据工程

在数据捕获步骤中,领域专家或首席数据科学家通常会决定要捕获哪些数据以及合适的数据源。

本章中提到的进一步活动——将数据接收到数据存储中并实现对数据的有效访问——主要属于数据工程的范畴。本章提到的各种工具通常也是数据工程所拥有的。

结论

在本章中,我们介绍了数据科学流程的数据捕获步骤中涉及的各种组件和活动,包括使用的一些技术。我们还谈到了选择开源还是付费工具的一些方面。

Footnotes 1

在某些情况下,数据也可能是由工作人员在 excel 文件中手工输入而收集的。

  2

提取、转换和加载:指从一个或多个源提取数据,转换数据,最后将其加载到目标系统。

  3

在 S3 之前,HDFS (Hadoop 分布式文件系统)是一个流行的选择。

  4

当工程师不得不自己处理行级更新而不支持原子性时,等等。从存储技术来说,它经常导致与数据不一致、重复等相关的问题。

  5

利用红移光谱。

  6

AWS 也提供自己的付费服务,比如 AWS Kinesis 就是 Kafka 的替代品。

  7

弹性扩展是指自动或轻松扩展基础架构以满足需求的能力。

 

十四、数据准备

本章专门介绍数据科学流程的数据准备步骤。为了更好地理解捕获的数据,通常会对其进行研究。这些数据在用于建立模型之前必须经过大量的准备工作。在其他一些情况下,数据似乎可以直接提供给 ML 算法,但是以各种方式准备数据可能会产生更有效的模型。我们在第一章讨论的一个例子中看到了这样的情况,其中捕获的数据包含商店收银台交易的时间戳和销售额。在这种情况下,我们认为销售额可能会根据星期几、月份等有一些趋势。因此,我们转换了数据,使其包含小时、日、月等。,以及相应的总销售额,希望这将使 ML 算法能够找到这样的趋势。因此,以这种方式准备数据可能会产生更好的模型。

在这一章中,我们将重温一些我们在第二部分与问题类别相关的章节中执行的数据准备任务。在那些章节中,我们使用了一些技术来完成这些任务;现在,我们将讨论一些可用于这些任务的其他技术。这种想法是要理解每项数据准备任务都有许多可用的技术,对这些技术的良好理解可以帮助您决定哪种技术最适合您的问题。

处理缺失值

我们在前面章节中讨论过的一项任务,也是您很可能在数据准备步骤中完成的任务,就是处理数据中的缺失值。有几种方法可以做到这一点,比如简单地删除有任何缺失值的观测值,或者以智能方式填充缺失值。假设您的数据有每日销售额,但是有些天的销售额是未知的,因此数据中缺少。如果您选择简单地用 0 来填充这些缺失的金额,将会导致 ML 算法错误地认为这些天没有销售,从而可能扰乱数据中出现的任何销售趋势。例如,如果周日数据中的销售额总是很高,用 0 填充特定周日的缺失销售额将扰乱周日的高销售额趋势。因此,您可以用所有其他周日的平均销售额来填充这个周日缺少的销售额,因为您认为这个周日的销售额可能与其他周日的销售额相似。这样做将用一个高值(其他星期日的平均值)来填充这个星期日缺少的销售额,从而使销售趋势保持不变。你甚至可以建立机器学习模型来预测丢失的值。

特征缩放

我们之前讨论过的另一项任务,也是您可能会在数据准备步骤中执行的任务,是转换您的要素,使其具有相同的比例。 2 为此,您可以执行最小-最大缩放,转换特征值,使其范围从 0 到 1——最小的特征值转换为 0,最大的特征值转换为 1。实现这一点的另一种常见方法是一种叫做标准化的技术。这种方法通过减去平均值并将差值除以标准偏差来转换每个特征值。您可以看到,这种方法没有将转换后的值限制在特定的范围内。

文本预处理

让我们回顾一下第六章中 NLP 问题的文本预处理任务,其目标是建立一个模型,可以根据电子邮件中的文本推断/预测电子邮件的类别。为了实现这一目标,个人助理从数据中的每个电子邮件正文中剥离问候语和结束语,并通过删除标点符号、将其转换为小写、提取单个单词以及删除它认为对推断电子邮件的类别无用的停用词来预处理剩余的电子邮件正文。下一步,该助手对所有电子邮件中的单词使用了一种称为词汇化的技术,将单词的屈折形式转换为其基本形式,因为它认为屈折形式可能不会提供关于电子邮件类别的任何额外线索。词汇化也减少了助手必须处理的词汇。然后,助手使用单词袋技术从所有电子邮件的基本单词列表中提取特征。

在本节中,我们将讨论另一种技术,您可以使用它将单词简化为它们的基本形式,这就是所谓的词干。我们还将看到一种称为 TF-IDF 的不同技术,它可以用于从基本单词列表中提取特征。

堵塞物

词汇化对每个单词进行复杂的分析,考虑其词性,并相应地将单词映射到其正确的基本形式。另一方面,词干处理采用了一种更为粗糙的方法,即应用简单地切掉部分单词以获得其基本形式的规则。例如,如果对单词"work执行词干化 3 ,后缀" ing" 将被砍掉,您将获得" work" 作为基本单词。词干提取所采用的这种粗糙的方法显然比进行详细分析的词汇化更快。

然而,词干有时会给你一个不是有效单词的结果。例如,对单词“ dries ”执行词干处理可以简单地删除后缀“ es ”,并返回“*dri”*作为不是有效单词的基本单词。再来看另一个词,“”如果你把这个词“更坏”连同它的词性“形容词”一起进行词条化操作,它就能通过对它的详细分析,算出基本词是“坏的”另一方面,词干提取所采用的切掉部分单词的方法不可能从原始单词“更坏”中产生“坏”的结果总而言之,词干化和词汇化各有优缺点,您需要根据自己的需求决定哪一种适合您。

TF-以色列国防军

我们使用第六章中的单词袋技术从所有电子邮件的基本单词列表中提取特征。这种技术确定了词汇表(所有电子邮件中唯一基本单词的总集合),然后为词汇表中的每个基本单词创建一个特征。然后,它通过计算相应的基本词在电子邮件中出现的次数来计算电子邮件的特征值。图 14-1 显示了使用词袋技术从所有电子邮件的基本词列表中提取的部分特征——该图还显示了目标变量类别。注意,每个唯一的基本单词都有一个特征。您可以看到第三封电子邮件的特征可视化的值是 2,因为基本词可视化在该电子邮件的基本词列表中出现了两次。

img/504530_1_En_14_Fig1_HTML.png

图 14-1

电子邮件的功能和目标变量

因此,您可以看到,单词袋技术使用一种非常基本的方法来计算一个基本单词的出现次数,从而计算一个特性的值。您可以对这种计算特征的方法进行一些改进,从而获得更有效的特征。更有效的特性可以产生更有效的模型,这对数据科学的成功至关重要。让我们来看几个这样的增强。

假设我们的数据中有一封很长的电子邮件,多次包含单词 visualization单词袋技术将简单地统计出现的次数,并给这封邮件的特征可视化一个很高的值。与上图中的第三封电子邮件相比,ML 算法会认为该电子邮件的特征可视化具有更高的价值。但这可能只是因为这封邮件比第三封邮件长得多。因此,在计算特征值时对电子邮件大小进行调整将是一个好主意。您可以简单地将电子邮件的原始特征值除以该电子邮件的基本单词列表的大小。特征的修改值是基本单词在电子邮件中出现频率的更有效表示。我们将这个修改后的特征值称为项频率(TF)

然而,这种修改的特征计算过程仍然具有局限性。如果一个基本单词通常是一个非常常见的单词,因此在其他电子邮件中也经常出现,则该单词在电子邮件中的频繁出现可能没有特别的意义。但是我们改进的特征计算过程没有考虑这一方面,所以如果一个基本词在电子邮件中频繁出现,即使它是一个非常常见的词,它也会给出很高的特征值。因此,如果相应的基本单词是非常常见的单词,我们可以通过显著缩小特征值来进一步修改我们的特征值计算过程。为此,我们可以将之前计算的特征值乘以称为逆文档频率(IDF) 的值。IDF 等于电子邮件数量除以包含相应基词的电子邮件数量所得商的对数。所以如果一个基本词是在大多数邮件中出现的非常常见的词,那么它的商将接近 1,它的对数将接近 0。换句话说,如果对应的基词极其常见,IDF 接近于 0。因此,由于与 IDF 值相乘,对应于一个非常常见的基本词的特征值得到了相当大的缩减,正如我们所希望的那样。 4 这种修改后的计算特征值的方法称为 TF-IDF,最终计算出的特征值称为 TF-IDF 值。然后,这些最终特征值可以用于机器学习。

将分类变量转换为数值变量

将分类变量转换成数字变量是另一项数据准备任务,我们在前面已经看到过(第五章),也很常见。在第五章中,我们想要转换的每个分类变量只有两个可能的值,我们简单地将一个值编码为 0 ,另一个值编码为 1 。例如,您可能记得每个观察的性别变量的值是男性或女性或*。为了将这个变量转换成数字变量,我们简单地将男性编码为 1 ,将女性编码为 0 。但是,根据情况的需要,您可能需要采用其他方法/技术。*

假设您的数据中的观察值对应于患者,其中一个变量表示患者的疲劳程度。对于每个患者,该变量可以取以下五个可能值之一:非常低、低、中等、高和非常高。表示比值非常低更高的疲劳水平,值中等表示比值更高的疲劳水平,以此类推*。因此,这些可能的值有一个自然的顺序。其可能值具有自然顺序的分类变量称为顺序变量。在将这样的变量转换成数值变量时,最好保持这种顺序。例如,由于值比值非常低表示更高的疲劳水平,你应该使用比你用来编码非常低的数字更高的数字来编码,以此类推。因此,您可以简单地将非常低编码为 0,编码为 1,中等编码为 2,编码为 3,非常高编码为 4。因此,对于所有疲劳水平最初为非常低的患者,变量的编码值将为 0 。类似地,对于疲劳程度为的患者,编码值将为 *1、等等。

现在让我们看看另一种分类变量。图 14-2 显示了数据的局部视图,其中每个观察值对应一部电影。变量 Length 表示电影时长,以分钟为单位,变量Rating 表示用户给出的平均评分, Genre 表示是什么类型的电影。对于每部电影,分类变量流派可以取三个可能值中的一个:动作片喜剧片恐怖片。这些可能的值只是电影类型的名称,没有自然的顺序。这种分类变量的可能值只是没有自然顺序的名称,称为名义变量。要将这个变量转换成数字变量,显然可以将动作编码为 0 ,将喜剧编码为 1、,将恐怖编码为 2 ,如图 14-3 所示。但这种方法在某些情况下可能会产生误导。假设您试图根据电影之间的欧几里德距离来识别电影的聚类(我们在第七章中讨论了聚类)。如果图 14-3 中的编码数据用于聚类并且基于这三个变量计算距离,则表中看到的第三部电影将看起来比第一部电影更接近第二部电影。这是因为第三部电影的长度和分级等于其他两部电影的长度和分级,但是第三部电影的编码类型更接近于第二部电影的编码类型,而不是第一部电影的编码类型。然而,这种解释是不正确的,因为你可以在原始数据中看到(图 14-2 ),第三部电影的风格与其他两部电影的风格完全不同——它不是更接近其中一部,而是更远离另一部。所以我们将讨论一种不同的技术来将分类变量类型转换成数字形式。

img/504530_1_En_14_Fig3_HTML.png

图 14-3

具有编码类型的电影数据

img/504530_1_En_14_Fig2_HTML.png

图 14-2

电影数据

我们将用三个新变量替换图 14-2 中的变量流派,这三个新变量对应于流派变量的三个可能值。图 14-4 显示了这三个新变量的电影数据。你可以看到每个流派都有一个变量。如果一部电影属于某个特定的流派,那么这个流派对应的变量的值为 1,另外两个变量的值为 0。比如这个图中看到的第一部电影属于流派动作,所以变量动作的值为 1,变量喜剧的值为 0,变量恐怖的值为 0。这是被称为一键编码的流行技术背后的一般思想。因此,我们可以看到数据和所解决问题的性质如何影响我们选择将分类变量转换为数值变量的技术。

img/504530_1_En_14_Fig4_HTML.png

图 14-4

具有类型的一键编码的电影数据

转换图像

正如我们在本章开始时所讨论的,以各种方式准备数据可以产生更有效的模型。对于计算机视觉问题,在数据准备中执行的一个常见任务是转换原始图像以产生新图像,目的是建立有效的模型。用于转换图像的确切技术取决于您希望转换产生的效果,以便创建更好的模型。我们在第十章中讨论了图像变换,我们在有大量背景空白的图像中寻找本地化的模式。因此,我们采用的技术/方法是将图像分割成小块,选择具有最多组织的小块,并重新组合它们以创建具有大组织区域的正方形图像。

在许多其他常见的问题中,比如我们在第十章中看到的物体检测,以任何方式通过切片来变换图像都是不合适的。但是,在需要转换图像的情况下,可能还有其他要求。一个这样的要求是,该模型应该对图像方向(例如,旋转)、被识别对象的大小(缩放因子)等的变化有弹性。例如,如果模型需要检测图像中的特定类型的对象,它应该能够这样做,而不管图像中对象的方向等。这种弹性可以通过以多种方式(例如,通过旋转等)变换每个原始图像来实现。)并将变换后的图像与原始图像一起提供给模型用于学习。这项技术因此扩大了我们数据的规模,被称为图像增强。它帮助模型学习检测图像中具有任意方向、缩放因子等的模式。

由于这种增强有助于从您的图像中创建更大的数据语料库,因此它对于训练深度学习模型特别有用,如 CNN(见第十六章),这些模型需要大量数据。

您的问题的细节通常会决定哪些转换是合适的;以下是一些更常见的扩充/转换:

  • 旋转各种角度

  • 水平/垂直翻转

  • 放大/缩小

  • 水平/垂直移动

  • 添加一些噪声

库和工具

在这一节中,我们来看看可用于数据准备的各种库和工具。

图书馆

数据操作和分析库通常包括数据聚集和转换的功能。例如,Pandas 是用 Python 处理数据的一个流行库——它有聚集和转换数据的功能,包括日期/时间转换。

例如,如果您正在 Spark 集群上处理大数据,您可能会使用 Spark 库函数进行数据准备。此外,相对较新的考拉库提供了一个 Pandas 兼容的 API 来执行 Spark 操作——这使得熟悉 Pandas 的数据科学家能够在没有学习曲线的情况下使用 Spark。

ML 库通常也包含用于公共数据准备技术的函数。 Scikit-learn 例如,提供了填充缺失值、标准化、一键编码等功能。

也存在面向特定问题类别的库,例如,自然语言工具包(NLTK) 是用于 NLP 的流行库,它也包括词干分析、词汇化等功能。同样,对于计算机视觉,像 scikit - imageKeras 这样的库提供 API 来简化图像转换的任务。

工具

在过去的几年里,像 Paxata、Trifacta 等工具。,因为它们能够使用直观友好的用户界面进行数据准备,所以受到了欢迎。这种易用性不仅允许数据科学家,还允许分析师和业务利益相关者使用这些工具,从而在数据准备阶段实现他们之间的有效协作。这些工具还可以跟踪沿袭,即在数据准备步骤中执行的所有转换。这简化了再现性和审计。

数据工程

支持数据准备的数据工程活动有两大领域:

  1. 基础设施和数据源:如果团队在 Spark 集群等上处理大数据。和/或使用任何工具,那么建立和维护必要的基础设施就属于数据工程的范畴。此外,一些工具可能需要配置数据源——这些初始化活动也属于数据工程。

  2. 自动化数据准备:如果/当数据科学家对某些数据集的某些数据准备活动进行标准化时,数据工程可以为对应于这些数据集的新数据自动化和维护这些步骤。这有助于提高数据科学家的工作效率,让他们专注于数据科学流程的其他步骤。

结论

在这一章中,我们回顾了几个数据准备任务,并看到多种技术可用于每项任务。我们还看到,对这些技术的深入理解对于决定哪种技术最适合我们的问题非常重要。

Footnotes 1

这可能还包括查看平均值、中值、标准差等统计数据。

  2

有各种各样的原因让你想这么做(参见第七章和第八章)。

  3

例如,用波特·斯特梅尔。

  4

在类似的行中,您可以计算出这个操作对一个罕见的基本单词会有什么影响。

  5

为了讨论的简单,我们避免了特征缩放。

 

十五、数据可视化

我们在上一章中讨论了数据准备;现在,让我们更深入地研究一下数据可视化的技巧和技术,这是我们数据科学流程的下一步。

在讨论不同类别的问题时,我们强调了用具体例子设计有效可视化的重要性和好处。我们还提到了数据可视化本身是一个庞大的主题,涵盖了许多不同类型的图表、图例、布局等。其中的每一个都为用户提供了各种简单和高级的选项,以实现更好的控制。此外,还有一些机制可以将交互式特性添加到您的可视化中,或者合并现有的可视化来创建您自己的自定义可视化。我们将着眼于其中的一些一般方面,然后更深入地研究一些可视化技术,以及它们如何提供在数据科学中构建有效模型所需的洞察力。我们将通过讨论数据可视化类别中一些流行的库和工具来结束本章。

图表/曲线图

虽然有些人会不严格地、可互换地使用这些术语,但其他一些人可能会给出一些启发性的论述,说明它们都意味着不同的东西。在不深入讨论的情况下,我们想强调的是,这些是你可以用来设计可视化的基本构件。你可能已经使用过或遇到过其中的一些,如条形图、散点图、饼图等。,但我们认为这是一项有益的投资,可以超越这些,扩大你对其他高效工具的认识。

其中许多像条形图、散点图等。使用水平轴和垂直轴,并显示代表数据的可视元素。使用数据中的值导出每个可视元素沿每个轴的位置或大小。假设您有生活在某个地区的学生的人口统计数据。散点图可以将数据集中的每个学生显示为一个圆形标记,其水平轴上的位置基于学生的身高,垂直轴上的位置基于学生的体重。

还有其他不使用轴的图表,如饼图、树形图等。树形图将层次结构中的类别显示为嵌套的矩形块,矩形块的面积表示类别的某些属性。例如,图 15-1 显示了不同制造商的不同型号手机在商店的销售情况。 1 您可以看到每个制造商都有一个图块,其面积代表该制造商的总销售额。并且来自该制造商的不同型号的区块被嵌套在该制造商的区块内,使得每个嵌套区块的面积代表其相应型号的销售。例如,有一个大的红色瓷砖,其面积代表制造商小米的总销售额,它包含小米三种型号的三个嵌套的红色瓷砖。每个嵌套的红色瓷砖的面积代表小米相应型号的销售。

img/504530_1_En_15_Fig1_HTML.jpg

图 15-1

手机销售树形图

基本构建模块中的另一个类别是节点链接图。这些工具利用节点和链接来显示实体及其连接,对于可视化网络数据非常有用。

传说

通过利用颜色、大小等可视化属性,您可以在现有图表中可视化更多变量。我们之前讨论了一个散点图,它将每个学生显示为一个标记,其 x 坐标和 y 坐标分别基于身高和体重。您还可以将性别(包含离散类别男性和*女性)*添加到该可视化中,用蓝色显示男生的标记,用绿色显示女生的标记。一个离散的图例将被添加到图中,显示每种颜色所代表的含义。图 15-2 显示了散点图和离散图例,使性别、身高和体重可视化。

img/504530_1_En_15_Fig2_HTML.jpg

图 15-2

体重与身高的散点图。性别由标记的颜色描绘 2

您还可以使用颜色来可视化包含连续值的变量。显示身高和体重的散点图示例可以通过将他们的年龄映射到一系列颜色中的一种颜色来为每个学生的标记着色。将添加一个连续的图例,显示图中颜色代表的年龄值。图 15-3 显示了散点图和连续图例,使包含连续值的附加变量年龄可视化。例如,注意高亮标记的颜色;你可以在连续的图例中看到,这种颜色代表 30 岁左右的年龄。

img/504530_1_En_15_Fig3_HTML.jpg

图 15-3

体重与身高的散点图,年龄用颜色表示

您还可以使用 size 属性来可视化具有连续值的变量。例如,显示每个学生气泡的气泡图(其 x 坐标和 y 坐标基于身高和体重)可以通过改变气泡大小来额外显示年龄。添加了一个尺寸图例,显示不同气泡尺寸代表的年龄值。图 15-4 显示了气泡图和尺寸图例,除了身高和体重之外,还可以显示年龄。请注意,与之前的散点图相比,为了视觉清晰,我们减少了该图中标记的数量。

img/504530_1_En_15_Fig4_HTML.jpg

图 15-4

体重与身高的气泡图。气泡的大小表明了那个学生的年龄

布局

通常,您需要将多个相关图表添加到可视化中,以便可以跨图表比较数据。布局允许您将多个图表添加到您的可视化中,并以不同的方式组织它们。根据您的需要,您可以选择适当的布局,使您的可视化更有效,并传达对趋势的更多见解。最简单的布局之一是叠加布局,即将一个基于轴的图表叠加在另一个之上。假设您有一个堆积条形图,将每年来自电子产品的收入堆积在来自软件的收入之上。因此,每个条形的总高度表示相应年份的总收入。在这个条形图上,您可以叠加一个散点图,显示每年的收入目标。图 15-5 显示了覆盖在条形图上的散点图。请注意,条形图低于 1990 年的散点标记,这意味着该年未达到收入目标,因为总收入低于收入目标。另一方面,在 1995 年,总收入超过了收入目标,因为该年的条形图高于散点图。

img/504530_1_En_15_Fig5_HTML.jpg

图 15-5

散点图显示覆盖在堆叠条形图上的收入目标,显示电子产品和软件的实际收入

有些布局允许您在行和列的网格中组织多个图表。此类别中的一些布局要求您手动指定哪个图表进入网格的哪个单元格,而其他一些布局则根据一些规则自动用图表填充网格。假设您想要可视化一家汽车公司生产的不同车型的销售情况,您可以使用一个简单的条形图。但是,您可能希望比较不同国家和年份的不同型号的销售情况。因此,您可以使用数据点阵 3 布局,并对其进行配置,以自动为每个国家创建一行,为每年创建一列,从而为每对国家和年份显示一个单元格,而不是使用简单的条形图。您可以指定每个单元格应该自动显示相应国家和年份的条形图(显示型号的销售情况)。图 15-6 显示了显示每对国家和年份的条形图的数据点阵布局。显示不同型号的销售的简单条形图将允许两个变量(型号和销售)的可视化;数据网格布局允许您可视化另外两个变量:国家和年份。

img/504530_1_En_15_Fig6_HTML.jpg

图 15-6

每对鞋的销售数据格。格子中的每个单元格显示每个型号 4 的销售额

这些布局通常在后台执行许多计算,以实现所需的功能,如实现一行中各单元格的垂直轴范围的一致性,或实现一列中各单元格的水平轴范围的一致性。

选择

所有图表、图例和布局都以属性的形式向用户展示选项,这些属性可以设置为不同的值,以利用更多的功能或更好地控制输出。例如,您可以在散点图中使用适当的选项将符号更改为方形而不是圆形,或者您可以使用适当的选项将基于轴的图表的轴更改为对数刻度。选项的范围各不相同,从基本选项到高级选项,基本选项只带来表面上的变化,高级选项涉及复杂的计算,对可视化有重大影响。我们不会深入讨论细节,但鼓励您提高对不同可用选项的认识,因为通过使用正确的选项可以极大地增强从可视化中获得的洞察力。

交互式可视化

有些工具可以让您设计交互式可视化,从而更深入地探索数据或提供简单可视化无法实现的动态视图。让我们再次考虑我们之前讨论的显示汽车型号销售的简单条形图——每个汽车型号都表示为一个高度代表该型号销售的条形。您可以将动画添加到该可视化中,以显示模型的销售如何按月变化。在引擎盖下,可视化为每个月创建一个条形图(显示模型的销售),并按时间顺序快速连续显示它们。通过观察柱线如何随时间增加或减少,您可以清楚地计算出每个型号的销售额如何随时间变化。

另一个重要的交互特性是向下钻取特性。当您查看可视化时,您可能希望更深入地了解细节。假设您正在查看一个显示美国某零售连锁店区域销售额的条形图。 5 你可能想进一步分析某个特定地区的趋势,并查看该地区不同州的销售情况。您可能会决定更深入一个州,查看该州不同城市的销售情况。您可以通过向可视化添加一个向下钻取特性来实现这一点。当可视化被呈现时,它以显示区域销售的条形图开始。图 15-7 (A)显示了该条形图。然后,您可以选择某个区域的条形图,并选择深入查看该条形图;这导致可视化转到层次结构中的下一个级别,即,并显示该地区各州的销售额。因此,如果您选择向下钻取与图 15-7 (A)中突出显示的区域相对应的条形图,您将会看到图 15-7 (B)中的条形图。您可以进一步选择一个州的条形图,并深入查看下一个级别,该级别显示该州不同城市的销售额。图 15-7 (C)显示了如果您选择向下钻取纽约州纽约州时将显示的条形图。

img/504530_1_En_15_Fig7_HTML.jpg

图 15-7

零售连锁店销售的交互式深入分析。(A)区域销售,选择深入东部地区。(B) Statewise sales,选择深入到纽约州。(C)纽约州的城市销售

从可视化中获得洞察力

到目前为止,这些小节讨论了一些与数据可视化相关的一般方面。在本节中,我们将更详细地了解数据科学中经常使用的一些可视化技术,以及如何利用它们来获得有助于构建有效模型的见解。当我们讨论问题的类别时,我们已经看到了这种洞察力的一些例子。例如,在讨论第五章中的回归类问题时,我们看了一个散点图,揭示了目标和特征变量之间的线性关系。基于这种认识,我们决定创建一个线性回归模型来捕捉这种线性关系。类似地,我们也在第八章的异常检测中看到了箱线图。让我们再看一些例子。

柱状图

您可以使用直方图来查看数值变量的值的分布。直方图将整个数值范围划分为更小的区间,称为“仓”,并为每个仓显示一个条形,条形的高度表示落入该仓的数值数量。通过查看直方图,你可以得出几个结论。例如,如果所有条形的高度相似,则意味着每个条柱中的值的数量相似。换句话说,这些值或多或少均匀地分布在间隔或区间上。另一方面,如果你看一下图 15-8 ,它显示了一个班级中学生的体重直方图,你可以看到区间 30-35、35-40 和 40-45 的柱状图很高,而区间低于 30 或高于 45 的柱状图很小。这意味着许多学生的体重在 30-35、35-40 和 40-45 之间,很少有学生的体重在 30 以下或 45 以上。换句话说,绝大多数学生的体重在 30 到 45 之间。

img/504530_1_En_15_Fig8_HTML.jpg

图 15-8

班级学生权重直方图。大多数学生的体重在 30 到 45 之间

现在让我们看看如何使用直方图来获得构建 ML 模型的有用见解。比方说,您正在努力创建一个模型,该模型将部署在一个可穿戴设备上,并将根据一些健康参数(如体温、血压等)预测一个人是否患有心脏病。,它测量。为了构建这个模型,假设您已经获取了大约一千名正常人和一千名心脏病患者的健康参数值。您可以在数据准备步骤中以这样一种方式准备您的数据,即您为每个人准备一行,其中包含他们的参数值和一个标签,如果此人有心脏病,则标签值为有病,如果此人健康*,则标签值为健康参数对应的变量是你的特征,包含标签健康/患病的变量是你的目标。现在,您想要评估与特定参数相对应的特征对于预测心脏状况是否有用。为此,您可以绘制健康人的这一特征的直方图,并将其覆盖在患有心脏病的人的这一特征的直方图之上。图 15-9 显示了健康患病*类别的重叠直方图。x 轴显示特征值的间隔,y 轴显示人数。

img/504530_1_En_15_Fig9_HTML.jpg

图 15-9

“健康”类和“患病”类的重叠直方图

您可以看到,健康类的直方图具有从特征值 10 到 70 的条形,而患病类的直方图具有从值 50 到 130 的条形。因此,两个类别的直方图之间有很好的分离——健康类别的直方图相对于患病类别的直方图向左移动。注意,对于小于 50 的特征值,存在健康类别的高条,但是对于小于 50 的特征值,不存在疾病类别的条。因此,我们的数据表明,健康人的特征值通常低于 50,但心脏病患者的特征值似乎从未低于 50。因此,如果你遇到一个特征值低于 50 的病例,你可以推断这个人可能是健康的。同样,我们的数据表明,患有心脏病的人的值通常高于 70,但健康人的值似乎从未高于 70。因此,如果你遇到一个特征值高于 70 的病例,你可以推断这个人可能有心脏病。因此,我们可以看到,该特征的值可以给出关于一个人心脏状况存在的一些指示。因此,ML 模型可以学习使用该特征的值来尝试预测一个人是否患有心脏病。因此,在构建预测心脏状况的模型时,使用这一功能将是一个好主意。因此,您可以看到查看直方图是如何提示您哪些特征可以有效地构建您的预测模型的。

核密度估计图

另一种常用于分类问题的图是核密度估计图或 KDE 图。KDE 图估计并绘制变量的概率密度曲线。KDE 图中的 x 轴代表变量值,y 轴代表概率密度。不去深究数学细节,让我们专注于如何解读 KDE 图。图 15-10 显示了我们之前看到的变量的 KDE 图,该图包含一个班级学生的权重——x 轴代表权重,y 轴代表概率密度。KDE 曲线下两个体重值之间的面积代表学生体重落在这两个值之间的概率。

img/504530_1_En_15_Fig10_HTML.jpg

图 15-10

班级学生权重的核密度估计(KDE)图

从图中可以看出,重量 30 和 45 之间的曲线下面积比重量 30 以下的曲线下面积大得多。这意味着学生体重落在 30 到 45 之间的概率比体重落在 30 以下的概率大得多。这是因为我们在图 15-8 的直方图中看到,绝大多数学生的体重在 30 到 45 之间。因此,你可以看到 KDE 图就像一个平滑版的直方图。

当绘制多个分布图时,使用 KDE 图而不是直方图的好处变得很明显。让我们再来看一下这个特性,其健康人群和心脏病患者的分布是使用直方图绘制的,如图 15-9 所示。现在让我们将这 1000 名健康人的 KDE 图叠加到这 1000 名心脏病患者的 KDE 图上,而不是直方图,如图 15-11 所示。该图中的 x 轴表示特征值,y 轴表示概率密度。你可以看到图中叠加的 KDE 图看起来像图 15-9 中叠加直方图的平滑版本,但是你从 KDE 图中得到的好处是 KDE 图看起来不那么杂乱,比直方图更易读。如果将四个重叠直方图与相应的四个重叠 KDE 图进行比较,杂乱回波的减少会更加明显。

img/504530_1_En_15_Fig11_HTML.jpg

图 15-11

“健康”类和“患病”类的叠加核密度估计(KDE)图

现在让我们看看如何从 KDE 图中获得建筑模型的洞察力。我们可以在图中看到,两个类别的 KDE 图之间有很好的分离——健康类别的 KDE 图相对于患病类别的 KDE 图左移。注意,特征值 50 以下的健康曲线下的面积较大,而特征值 50 以下的患病曲线下的面积接近于 0。这意味着健康人的特征值小于 50 的概率很高,而患有心脏病的人的特征值小于 50 的概率几乎为零。因此,我们的图表明,健康人的特征值通常低于 50,而患有心脏病的人的特征值很少低于 50。因此,如果你遇到一个特征值为 40 的人,你可以推断这个人可能是健康的。类似地,特征值 75 以上的患病曲线下的面积较大,而特征值 75 以上的健康曲线下的面积接近于 0。因此,我们的曲线图表明,患有心脏病的人的特征值通常会高于 75,而健康人的特征值很少会高于 75。因此,如果你遇到一个特征值为 90 的人,你可以断定他们可能有心脏病。由于该特性的值为您提供了一些关于心脏状况存在与否的提示,因此您可以使用该特性来构建预测心脏状况的模型。因此,您可以通过查看 KDE 图来评估此功能对于构建模型的适用性。

库和工具

到目前为止,我们的讨论主要集中在数据可视化技术上。在这一节中,我们将讨论一些实现各种可视化技术的库和工具。

图书馆

有几个面向数据科学的可视化库。例如,在 Python 生态系统中,Matplotlib 是最古老的库之一,并且仍然非常流行。Seaborn 6 是数据科学家使用的另一个流行的 Python 库。在本章中,我们使用了这两个库来创建散点图、直方图和 KDE 图。

工具

数据可视化工具领域,也包括商业智能或可视化分析工具,是分析领域中最古老的领域之一。像 Tableau 这样的工具有着悠久的历史,可以追溯到世纪之交。在过去几年中,数据科学的发展见证了几个 BI 工具扩展了它们的功能,增加了对数据科学家所需的数据准备和数据可视化的支持,包括与 Python 的集成等。

根据我们的经验,Tableau 和 SAS Visual Analytics 是两种工具,代表了为数据可视化提供的广泛功能,在学术界和工业界的数据科学家中很受欢迎。其他流行的工具包括 PowerBI、Looker 等。–这是一个非常拥挤的空间,有许多流行的工具。 7

了解这一类工具将使您能够确定您的组织是否已经拥有可供数据科学家利用的工具(如 BI 工具)。这可以显著改善数据科学家和其他利益相关者之间的协作。这些工具还允许非常容易地将视图和仪表板嵌入到现有的 web 应用程序中,这对于将数据科学家创建的可视化整合到任何现有的内部运营门户中非常有用。 8

数据工程

如果数据科学团队正在处理可以在单台机器上运行的数据大小,并使用 Matplotlib、Seaborn 等可视化库。,那么数据可视化步骤不需要很多数据工程活动。

但是,当数据规模很大并且使用 Spark 等集群时,数据工程将确保支持高效的即席查询来实现数据可视化。

除了确保高效查询之外,当 BI 或可视化分析工具用于数据可视化时,通常还需要以下数据工程活动:

  • 为这些工具设置必要的服务器基础设施

  • 在这些工具中配置适当的数据源

  • 所需的任何定制,例如,任何用户定义的函数、定制 SQL 等。

最后,如果仪表板或应用程序要基于数据科学团队创建的可视化来实现,数据工程可以帮助快速启动原型应用程序,这些应用程序将数据科学家创建的可视化作为交互式仪表板的一部分来重用。这也可以使用像 Plotly Dash 或 Bokeh 这样的框架来完成——更多细节见第十八章。

结论

在本章中,我们试图强调数据可视化不仅仅是条形图和散点图。我们讨论了与数据可视化领域相关的一些一般方面,还讨论了我们如何从可视化中获得洞察力。这些见解可以帮助我们建立有效的 ML 模型,这是我们下一章的重点。

Footnotes 1

这纯粹是用合成的数据来说明一个树形图;这些数据并不代表任何提及的制造商的实际销售额。

  2

本章中用于所有身高/体重图的数据集来自 https://pypi.org/project/nhanes/ 的 NHANES 数据

  3

请注意,不同的库可能对此布局使用不同的名称。

  4

这纯粹是用合成的数据来说明一个数据点阵;这些数据并不代表提及的任何车型的实际销量。

  5

本例中使用的样本数据集来自 www.kaggle.com/rohitsahoo/sales-forecasting

  6

同样基于 Matplotlib。

  7

最近,Salesforce 收购 Tableau,Google 收购 Looker,这两个公司继续快速发展这一领域。

  8

这尤其适用于 DSI-Proc 项目;参见第二十三章。

 

十六、机器学习

正如我们所见,机器学习是数据科学过程的核心,因为正是在这一步中构建了实际的模型。本章致力于 ML 算法/技术,你可以用它来构建模型和实现这些算法的库。了解不同的 ML 算法并直观理解底层概念对于整个数据科学过程的成功至关重要。我们将从 ML 算法的一般分类开始,然后看几个流行的算法。然后,我们将讨论模型性能评估,它可以帮助您评估模型的有效性。这种评估可以帮助您从您可能已经构建的多个候选模型中选择最佳模型,并且还可以让您了解所选择的模型在部署到产品中时可能会有多好的性能。

机器学习算法的类别

最大似然算法可以大致分为三种类型:监督学习、非监督学习和强化学习。让我们试着理解每种类型的含义,并看看每种类型中常见的例子。

监督学习

正如你可能从名字中猜到的,监督学习算法需要人的监督。作为这种监督的一部分,你需要告诉算法对于现有的观察值来说什么是正确的标签。该算法学习这些观察和它们的标签之间的关系,然后能够预测新观察的标签。例如,如果您正在使用监督算法来构建一个模型,该模型可以预测新的数字支付交易是否是欺诈性的,您将不仅提供现有交易的详细信息(如交易地点、支付金额和方式等。)但是还需要向算法提供这些交易的标签欺诈/非欺诈。该算法建立的模型将能够根据交易的细节预测哪个新交易是欺诈性的。我们前面已经看到,与这些细节相对应的变量(如支付金额等。)被称为特征,对应于标签的变量被称为目标。让我们再来看看第四章的例子,我们试图根据一个感兴趣的客户的性别、年龄、职业和年收入来预测他最终是否会购买这辆车。图 16-1 显示了我们传递给机器学习算法的数据。请注意,我们不仅传递了过去客户的详细信息(如性别、年龄等。)传递给算法,但我们也传递了那些客户的标签(购买/未购买)。因此,我们在那个例子中使用的算法(决策树算法)是一个监督学习算法。该图还指出了这种情况的特征、目标变量和标签。

img/504530_1_En_16_Fig1_HTML.png

图 16-1

功能、目标和标签

线性回归、逻辑回归、决策树、k-最近邻、朴素贝叶斯、支持向量机和神经网络是监督学习算法的一些例子。监督学习算法可以进一步分为分类算法和回归算法。分类算法预测作为类别的标签(例如,欺诈/非欺诈),回归算法预测作为连续值的标签(例如,薪水)。朴素贝叶斯是一种流行的分类算法,线性回归是一种流行的回归算法。

无监督学习

无监督学习算法在没有人监督的情况下工作,也就是说,您不需要为观察值提供任何标签。该算法试图从未标记的数据中自己学习模式。聚类算法,比如我们在第七章看到的凝聚聚类,就是无监督学习算法的例子。聚类算法试图将未标记的观察值集合分成组或聚类,使得属于同一聚类的观察值比属于不同聚类的观察值更相似。例如,我们在第七章中看到,对客户数据运行聚类算法可以将具有相似特征的客户分组。另一个流行的聚类算法是 k 均值

一些异常检测算法,如我们在第八章看到的局部异常因子,也是无监督算法,因为它们旨在检测无任何标签的数据中的异常观察。流行的无监督异常检测算法的其他示例有隔离森林和单类 SVM。

值得注意的是,无监督学习算法对于 KDD/数据挖掘项目尤为重要——我们将在第二十三章重新讨论这个问题。

强化学习

我们已经在第十一章中看到了强化学习。这些旨在做出决策以优化长期结果的算法在本质上与监督和非监督算法有很大不同,因为它们与环境互动,并根据为其决策提供的奖励进行学习。

流行的机器学习算法

不要查看所有可用的 ML 算法,让我们只关注一些流行的算法,并尝试理解它们如何学习,如何预测,以及它们给出了什么样的见解。在第二十章中,了解 ML 算法的这些细节对于理解为什么数据科学家基于他们所属的文化(修道院与狂野西部)更喜欢某些算法也很重要。如果你不想在这一点上讨论所有这些最大似然算法的细节,你可以在后面的章节中提到这些算法的时候再回到这里。

线性回归

线性回归算法是最流行的回归机器学习算法之一。如前所述,该算法基于准备好的数据构建了一个线性回归模型,该模型是一个线性方程,解释了如何从特征值计算目标变量值。这是许多数据科学家的最爱,他们经常用线性回归模型开始回归问题的初步实验。线性回归算法创建的方程用于计算新观察值的目标值。该等式还提供了对目标变量如何与特征相关的洞察。

让我们通过重温回归问题类 1 中的示例,来尝试理解线性回归算法是如何工作的,其中的目标是基于特征值性别、年龄和吸烟状况来预测目标索赔金额。图 16-2 显示了该示例的准备数据。回想一下,在性别特征中男性被表示为 1 ,女性被表示为 0 ,在吸烟状态特征中吸烟者被表示为 1 ,而非吸烟者被表示为 0

img/504530_1_En_16_Fig2_HTML.png

图 16-2

准备好的数据传递给线性回归算法

还记得当我们可视化这些数据时,我们注意到线性关系,因此决定使用线性回归算法。当线性回归算法接收到这个准备好的数据时, 2 它试图建立一个线性方程,将目标变量值表示为特征值加上常数项的加权和。那就是:

索赔金额= b 0 + b 1 ×性别+ b 2 ×年龄+ b 3 ×吸烟状况

其中 b 1 、b 2 和 b 3 分别是特征性别、年龄和吸烟状况的权重,b 0 是常数项(也称为截距项)。根据这个等式,该算法将性别= 0、年龄= 40、吸烟状态= 0 的客户的索赔金额预测为

b0+b1×0+b2×40+b3×0

图 16-3 中的预测索赔金额栏显示了算法使用该等式为现有客户预测的索赔金额。现有客户的预测误差是预测索赔金额与该客户实际索赔金额之间的差异。该图中的预测误差栏显示了现有客户的预测误差。请注意,该列中的值只是列中的预测索赔金额减去列中的索赔金额的值。

img/504530_1_En_16_Fig3_HTML.png

图 16-3

现有客户的预测索赔金额和预测误差

对单个客户的预测误差求平方,然后将它们相加,得到跨客户的总体预测误差。因此,总预测误差由下面的表达式表示,该表达式是列预测误差 中表达式的平方和:

…+(b0+b1×0+b2×40+b3×0–9.2)2+(b0+b1×1+b2×50+b3×0–14.9)【t

该算法试图估计总体预测误差最小的 b 0 、b 1 、b 2 和 b 3 。换句话说,它试图通过使用类似梯度下降的技术来计算 b 0 、b 1 、b 2 和 b 3 的值,对于这些值,先前的表达式具有最小值。在这种情况下,发现当 b 0 = -6.9,b 1 = 2.1,b 2 = 0.4,b 3 = 2.9 时,表达式会有最小值。一旦算法因此聚焦于权重和截距项的正确值,它就使用这些值来具体化原始方程

索赔金额= b 0 + b 1 ×性别+ b 2 ×年龄+ b 3 ×吸烟状况

到…里面

理赔金额= -6.9 + 2.1 ×性别+ 0.4 ×年龄+ 2.9 ×吸烟状况

重新排列几项后,等式为

理赔金额= 0.4 ×年龄+ 2.1 ×性别+ 2.9 ×吸烟状况- 6.9

这就是我们在第 5 (图 5-4 中看到的等式,我们已经提到过它是由线性回归算法产生的。我们刚刚看到算法是如何得出这个等式的。该等式将用于根据新客户的年龄、性别和吸烟状况来预测其索赔金额。正如我们之前所讨论的,由线性回归算法产生的线性方程也让我们了解目标变量和特征之间的关系。我们在前面看到,根据这个等式,我们可以知道索赔额随着年龄的增长而增加 0.4K。我们还可以看出,男性(性别= 1)的索赔金额比女性高 2.1K。吸烟者(吸烟状态=1)倾向于比不吸烟者多索赔 2.9K。

逻辑回归

就像许多数据科学家用线性回归开始回归问题的实验一样,逻辑回归 3 是分类问题初始实验的最爱。让我们用一个类似于上一节中保险例子的例子来理解逻辑回归。然而,这一次,我们的目标是只预测新客户是否会提出索赔,而不是预测索赔金额。假设我们有来自不同保险公司的数据,其中包含每个现有客户的性别、年龄和吸烟状况,就像上一节中的数据一样。但是,数据包含的不是索赔金额,而是一个名为索赔状态的变量,根据客户是否提出索赔,该变量的客户值是索赔未索赔*。现在,我们将尝试使用逻辑回归算法来构建一个模型,该模型可以根据特征性别、年龄和吸烟状态的值来学习预测目标变量索赔状态的值。 4 图 16-4 显示了来自这家新保险公司的数据。*

img/504530_1_En_16_Fig4_HTML.png

图 16-4

逻辑回归的特征和目标变量

逻辑回归算法不是直接预测客户是否会提出索赔*,,而是学习预测指示客户基于性别、年龄等的值提出索赔的可能性的概率。为此,该算法创建了一个线性方程(就像线性回归算法一样),解释了如何根据客户性别、年龄等的加权和来计算客户提出索赔的概率。然而,简单的加权和可能大于 1 或小于 0。该算法使用一个名为的逻辑函数*将加权和转换为 0 到 1 之间的值,使其成为有效概率。

图 16-5 显示了逻辑函数是如何定义的,图中的蓝色曲线绘制了该函数在不同输入 x 值下的值。正如图中所示,x = 0 时该函数的值为 0.5。这是因为函数定义中的 e -x 项在 x = 0 时变为 1,导致函数的整体值为 1/(1+1)或 0.5。随着 x 向大的正值增加,e -x 项开始变得接近 0,导致总函数值变得接近 1。随着 x 向大负值减小,e -x 项开始变得非常大,导致总函数值变得接近 0。所以函数值保证在 0 到 1 之间。

img/504530_1_En_16_Fig5_HTML.jpg

图 16-5

物流功能

如前所述,逻辑回归算法使用此逻辑函数将特征值的加权和转换为 0 到 1 之间的值,该值表示客户提出索赔的概率。这可以表示为一个等式:

p 索赔 = f(b 0 + b 1 ×性别+ b 2 ×年龄+ b 3 ×吸烟状况)

其中 p 索赔 是客户提出索赔的概率,

f 是逻辑函数,

b0是截距项,

b 1b 2b 3 为特征的权重。

使用此等式,算法将预测性别= 1、年龄= 50、吸烟状态= 0 的客户提出索赔的概率为

f(b0+b1×1+b2×50+b3×0)

该算法还可以通过从 1 中减去提出索赔的概率来预测不提出索赔的概率。这可以表示为

pno _ claim= 1–pclaim= 1-f(b0+b1×性别+ b 2 ×年龄+ b 3 ×吸烟状况)

其中pno _ claim是客户不索赔的概率。

使用此等式,算法将预测性别= 0、年龄= 30、吸烟状态= 0 的客户不提出索赔的概率为

1-f(b0+b1×0+b2×30+b3×0)

该算法必须预测实际提出索赔的现有客户提出索赔的高概率(p claim ),并预测没有提出索赔的现有客户不提出索赔的高概率(p no_claim )。图 16-6 中的 P 列显示了已经提出索赔的现有客户的预计索赔概率(p 索赔)和没有提出索赔的现有客户的预计不索赔概率(p no_claim )。正如我们刚才提到的,所有这些值(列在 P 栏中)都必须高。所以算法会尝试查找 b 0 、b 1 、b 2 、b 3P 列值高的值。 5 算法将使用前面提到的技术来实现这一点。

img/504530_1_En_16_Fig6_HTML.png

图 16-6

列 P 包含现有客户的 p 索赔或 p 无索赔

假设算法发现 b 0 = -80,b 1 = 10,b 2 = 2,b 3 = 10 是权重和截距项的最优值。它将使用这些值来具体化等式

p 索赔 = f(b 0 + b 1 ×性别+ b 2 ×年龄+ b 3 ×吸烟状况)

到…里面

p 索赔 = f(-80 + 10 ×性别+ 2 ×年龄+ 10 ×吸烟状况)

现在,这个等式表示逻辑回归模型,可用于预测为新客户提出索赔的概率。例如,37 岁的男性吸烟者(性别= 1,年龄= 37,吸烟状态= 1)提出索赔的概率由下式给出

p 索赔 = f(-80 + 10 ×性别+ 2 ×年龄+ 10 ×吸烟状况)

= f(-80 + 10 × 1 + 2 × 37 + 10 × 1)

= f(14)

所以这个客户提出索赔的概率等于 f(14)。我们可以在前面的逻辑函数 f(x)的图中看到,输入值为 14 的逻辑函数的值(即 f(14) )接近于 1。所以这个客户提出索赔的概率接近 1。一旦我们有了为一个新客户提出索赔的概率,我们就可以通过比较这个概率和一个截止值来预测他是否会提出索赔。如果提出索赔的概率高于截止值,我们预测客户会提出索赔。如果概率低于截止值,我们预测客户不会提出索赔。例如,如果我们为我们的逻辑回归模型选择 0.5 的临界值,我们将预测前面讨论的 37 岁男性吸烟者将提出索赔,因为他提出索赔的概率被预测为接近 1,高于 0.5 的临界值。另一方面,如果我们有一个模型预测概率为 0.3 的客户,我们会预测该客户不会提出索赔,因为他的预测概率低于选择的截止值 0.5。

就像线性回归一样,如果您希望不仅仅是预测目标变量的值,而是希望深入了解数据和生成这些数据的底层流程,那么逻辑回归模型非常有用。让我们看看我们之前讨论的逻辑回归模型给了我们什么启示。让我们再来看看这个模型的等式:

p 索赔 = f(-80 + 10 ×性别+ 2 ×年龄+ 10 ×吸烟状况)

我们可以看到,对于更大的年龄值,内部表达式的值(它是该等式中逻辑函数的输入)也将更大。前面讨论的逻辑函数图告诉我们,随着输入值变大,逻辑函数值也会变大。因此,年龄越大,索赔的概率就越大。这意味着老年人更有可能提出索赔。类似地,对于吸烟者(吸烟状态= 1),内在表达增加 10。随着内在表达价值的增加,逻辑函数的价值也增加了。因此,吸烟者提出索赔的概率更高。换句话说,吸烟者更有可能做出声明。你同样可以分析性别对做出声明的可能性的影响。

让我们进一步分析模型的方程,以找到更多的见解。在此讨论中,我们将假设模型概率截止值为 0.5。现在,假设我们对分析女性不吸烟者(性别= 0,吸烟状况= 0)组感兴趣。将性别和吸烟状况的值代入模型的等式中,我们得到

p 索赔 = f(-80 + 10 × 0 + 2 ×年龄+ 10 × 0)

这相当于

p 索赔 = f(2 ×年龄- 80)

这个简化的方程给了我们为女性非吸烟者群体提出索赔的可能性。对于该组中的任何客户,我们将预测只有当她提出索赔 p 索赔的概率大于临界值 0.5 时,她才有可能提出索赔。当该简化方程右侧的逻辑函数值大于 0.5 时,这将是正确的。从逻辑函数图中,我们可以看出,当输入值(本例中为“2 ×年龄–80”)大于 0 时,逻辑值大于 0.5。这种情况发生在我们这个年龄大于 40 岁的人身上。简而言之,对于任何不吸烟的女性(也就是这个群体中的任何顾客),我们最终预测,如果她的年龄超过 40 岁,她很可能会提出索赔。因此,这有效地传达了一个信息,即女性不吸烟者如果超过 40 岁,很可能会宣称吸烟。我们可以从男性吸烟者、女性吸烟者等其他群体中获得类似的见解。

支持向量机

支持向量机(或 SVM)是另一种机器学习算法,数据科学家经常用于分类问题,尽管它也可以用于回归问题。我们将使用一个非常简单的分类示例来尝试和理解该算法。

假设我们的数据包含两个特征 f1f2 以及一个目标变量 t ,其值为 N (代表类)或 P (代表类)。该数据如图 16-7T16 所示。

img/504530_1_En_16_Fig7_HTML.png

图 16-7

具有两个特征和目标的简单数据

如图 16-8 所示,让我们在散点图上将阳性观察值(其目标值为 P)绘制为红色方形标记,将阴性观察值(其目标值为 N)绘制为绿色圆形标记。每个标记的 x 坐标基于相应观测的 f1 值,y 坐标基于 f2 值。你可以在视觉上想象一条线,似乎把积极和消极的观察分开。这条假想线在图上显示为虚线。现在你可以自己用这条想象的线很容易地对一个新的观察结果进行分类。您将首先根据 f1 和 f2 的值在散点图上绘制新的观察值。然后,您将检查新的观察结果属于虚线的哪一侧。如果它落在包含红色标记的一边,您将预测新的观察值一定是正的(即,您将预测目标值为 P)。如果它落在绿色标记的一侧,您将预测新的观察值一定是负的(即,您将预测目标值为 N)。这是 SVM 算法的基本思想。

img/504530_1_En_16_Fig8_HTML.jpg

图 16-8

简单数据和假想分隔线的散点图

SVM 算法通常试图在 n 维空间(对应于 n 个特征)中找到一个超平面,该超平面将一个类别的现有观测值与另一个类别的观测值分开。让我们称一个类为正,另一个类为负 。因此,SVM 试图找到一个超平面,将积极的观察和消极的观察分开。如果新的观察值落在包含正观察值的超平面的那一侧,则新的观察值将被预测为正*。而如果新的观察结果落在另一边,SVM 会预测它属于类。当数据只有两个特征时,超平面只是一条直线,就像上图中假想的分隔线一样。如果数据有三个特征(即数据是三维的),超平面就是一个平面,以此类推。*

上图中显示的数据(有两个要素)是线性可分的,这意味着可以找到一条直线来分隔这两个类。一般来说,当你在处理具有 n 个特征的数据时,如果有可能在 n 维特征空间中找到一个将两个类分开的超平面,你会说数据是线性可分的。您可以使用一个线性 SVM 来为线性可分数据找到这个超平面,然后可以使用它来预测新观察的类别。

然而,数据并不总是线性可分的。让我们看一个流行的玩具例子来理解这一点。图 16-9 显示了这个玩具数据,只有一个特征 f1 和目标 t ,其值可以是 P (正)或 N (负)。图 16-10 显示了该数据的曲线图,其中您可以看到数据不是线性可分的,因为您找不到一个分离正负观察值的超平面。对于数据不能线性分离的情况,您可以使用一个非线性 SVM 来分离类。

img/504530_1_En_16_Fig10_HTML.jpg

图 16-10

玩具示例数据的绘图

img/504530_1_En_16_Fig9_HTML.png

图 16-9

玩具示例数据

我们自然希望了解非线性 SVM 如何能够在数据不是线性可分的情况下分离类别。让我们以前面讨论的不可线性分离的单一特征数据为例。假设您将一个派生特征 f2 添加到该数据集,其值只是 f1 值的平方(即 f2 = f1 2 )。图 16-11 显示了添加了衍生特征的玩具数据,图 16-12 显示了其散点图。你可以看到,现在有可能在二维空间中找到一个超平面(散点图上以虚线表示),它将类别分开。要预测新观测值的类别,您可以使用 f1 值导出其 f2 值,并使用这两个值在二维空间中绘制新观测值,以便检查它落在超平面的哪一侧。因此,我们可以看到如何将特征(如我们刚刚看到的衍生特征)添加到不可线性分离的数据中,从而有可能找到分离超平面。一个非线性 SVM 可以通过使用一种叫做内核技巧的技术来实现添加这些特性的效果(实际上并不需要添加它们)。由于这种技术给出了添加那些特征的效果,非线性 SVM 可以分离数据中的类,否则这些类是不能线性分离的,因此可以相应地对新的观察结果进行分类。不用说,还有很多关于 SVM 的变化和细节我们没有涉及到。但是前面的讨论试图解释支持向量机工作背后的一般原理。

img/504530_1_En_16_Fig12_HTML.jpg

图 16-12

具有衍生特征玩具数据的散点图

img/504530_1_En_16_Fig11_HTML.png

图 16-11

具有衍生特征 f2 = f1 2 的玩具数据

决策图表

决策树算法是另一种流行的监督机器学习算法,用于分类和回归问题。在讨论分类问题时,我们已经看到了决策树的一个例子。让我们用另一个例子来更详细地理解决策树算法。比方说,你正在为你组织的员工开发一个应用程序,它可以监控他们的健康状况,并在各种疾病发作时及时发出警告。这个应用程序的一个功能是指示用户是否有患心脏病的风险。在幕后,该应用程序将使用机器学习模型来预测用户是否有可能患有心脏病。你的工作是利用现有的数据来建立这个模型,这些数据包含了大致相同数量的健康人和心脏病患者。图 16-13 显示了我们将用于构建该预测模型的成人数据快照。表中性别吸烟状况直截了当*。体重类别列可以有三个值之一:正常(表示该人处于其身高和性别的正常体重范围内)体重不足(表示该人低于正常体重范围)超重(表示该人高于正常体重范围)。锻炼栏显示该人是否定期锻炼。健康状况栏显示该人是否健康或有心脏病。我们将尝试构建一个简单的模型,该模型基于其他四列的值来预测目标变量健康状态*的值,这四列是我们在本例中的特性。实际上,您可能希望使用更复杂的功能来构建一个非常精确的模型。

img/504530_1_En_16_Fig13_HTML.png

图 16-13

预测心脏病的数据快照

如果我们把这些特征和目标变量赋予决策树算法,它将建立一个决策树模型。决策树模型只是一棵树 6 ,其中非叶节点检查特征值,叶节点预测目标值。图 16-14 显示了决策树算法为之前的数据建立的决策树模型的局部视图。可以看到,模型检查第一个非叶节点中的行使特征的值,如果值为则向右 7 前进,如果值为则向左前进,如果值为则检查另一个非叶节点中的特征吸烟状态的值。如果吸烟状态的值是吸烟者,向右,如果值是不吸烟者,向左到一个叶节点。该叶节点预测目标值为健康。其他非叶节点和叶节点可以被类似地解释。

img/504530_1_En_16_Fig14_HTML.jpg

图 16-14

预测心脏病的决策树模型的局部视图

为了对新的观察结果进行预测,模型将简单地从根节点开始,沿着树向下遍历。在每个非叶节点,它将检查新观察的特征值,并采取相应的分支。它将继续这样做,直到它到达一个叶节点,并将最终预测对应于该叶节点的值。假设我们想要对一个不锻炼也不吸烟的超重男性员工进行预测(性别=男性,体重类别=超重,锻炼=否,吸烟状态=不吸烟)。图 16-15 中的红色箭头显示了该员工如何遍历树进行预测。模型将从根节点练习开始,走左侧8分支对应号。它将再次从节点吸烟状态中取出对应于非吸烟者的左分支,并从节点体重类别中取出对应于超重的最右分支。因此到达叶节点心脏病(在图中被红色矩形包围)并因此为雇员预测心脏病

img/504530_1_En_16_Fig15_HTML.jpg

图 16-15

遍历决策树以预测雇员的心脏病

让我们后退一步,理解为什么当一个人到达红色矩形内的这个叶节点时,模型会预测到心脏病。该模型从树结构中知道,如果一个人到达这个叶节点,那么他一定属于不锻炼、不吸烟的超重人群。该模型观察到,在提供的数据中,这一组中的所有人都患有心脏病。 9 所以模型很有信心地预测这个人有心脏病。类似地,如果一个人到达绿色矩形内的叶节点,模型知道他们一定属于锻炼的不吸烟人群,并且数据中该人群中的所有人都是健康的。因此模型自信地预测这个人是健康的。此处需要注意的重要一点是,在第一种情况下,模型自信地预测目标值为心脏病,因为他到达的叶节点对应于一个组(不运动、不吸烟的超重人群),该组在提供的数据中心脏病患者占非常高的优势。在第二种情况下,模型自信地预测目标值为健康,因为他到达的叶节点对应于一个组(锻炼的不吸烟的人),该组在提供的数据中健康的人占非常高的优势。因此,我们可以看到,为了能够自信地预测目标值,重要的是叶节点应该对应于一个类别(健康或心脏病)具有非常高优势的组。或者我们可以简单地说,叶节点需要有一个类的非常高的优势。

该算法使用像熵这样的度量来评估一个节点是否在一个类别中具有非常高的优势。正如前面提到的,红色和绿色矩形内的叶节点对应于特定的组,树中的每个节点对应于特定的组。例如,根节点右侧的节点对应于一组锻炼者。如果一个节点对应于一个组,在该组中,数据中 PH部分人是健康的,PHD部分人患有心脏病,则该节点的熵被定义为

熵=-PH×log2PH-PHD×log2PHD

如果一个节点具有非常高的健康人群优势,P H 将接近 1,P HD 将接近 0。由于 P H 接近 1,log 2 P H 接近 0,因此“-PH×log2PH接近 0。同样由于 P HD 接近 0,“-PHD×log2PHD”也接近 0。因此,熵接近于 0。如果一个节点具有非常高的心脏病患者优势,P HD 将接近 1,P H 将接近 0。使用熵方程很容易看出,在这种情况下,熵也将接近于 0。这意味着,当某一类占很大优势时,熵接近于 0。我们来看看没有一个类是占优的时候熵值是多少,也就是说,对于节点对应的组,数据中健康人的数量大致等于心脏病人的数量。因此,对于这种情况,P H 和 P HD 都接近 0.5,因此,我们可以使用熵方程计算熵:

熵=-0.5×log20.5-0.5×log20.5

= - 0.5 × -1 - 0.5 × -1

= 1

所以当没有阶级占优势时,熵接近于 1。因此,我们可以得出这样的结论:当一个类别占优势非常高时,熵非常低(接近 0),而当没有一个类别占优势时,熵非常高(接近 1)。因为我们希望叶节点具有非常高的一类优势,所以我们希望叶节点的熵非常低。

现在我们终于可以看看算法是如何创建树的了。该算法从对应于“所有”人的组的根节点开始,在我们的数据中,健康人和心脏病患者的数量大致相等。所以在根节点中没有一个类是主要的。然后,它将该特征上的根节点从特征集合中分离出来,对于该特征集合,子节点具有一个类别的高优势。因此它将挑选子节点具有最低熵的特征。然后对每个子节点重复这一过程,也就是说,它使用导致一个类别的高优势(或最低熵)的子节点的特征来进一步分割每个子节点。它继续这样做来建造这棵树。因此,该算法不断分裂,以创建一类具有高优势的节点。因此,当它到达叶节点时,将会有一个类的非常高的优势。这就是为什么先前红色矩形中的叶节点具有非常高的等级优势心脏病(如我们先前看到的,对应于该叶节点的人群只有心脏病患者,没有健康人),并且先前绿色矩形中的叶节点具有非常高的等级优势健康(如我们先前看到的,对应于该叶节点的人群只有健康人,没有心脏病患者)。正如我们前面看到的,一个类别在一个叶节点中非常高的优势使模型有信心预测该类别作为在预测期间到达该叶节点的人的目标值。

决策树模型还提供了对数据趋势和底层流程的洞察。例如,您可以通过查看决策树来判断,如果一个人锻炼并且不吸烟,决策树将预测此人是健康的,而不管此人的性别和体重类别。更具体地说,我们得到的重要认识是,如果一个超重的人锻炼并且不吸烟,他也可能是健康的。

决策树算法也很受欢迎,因为它适用于人们可能遇到的许多不同的场景。我们之前看到的示例没有任何数字特征,但是决策树算法也可以使用数字特征进行预测。我们在第四章看到了一个这样的例子,算法创建了一棵树,使用数字特征年龄来预测哪些感兴趣的客户可能会购买汽车*。*还有,本节我们刚刚看到的例子是分类问题,但是决策树算法也可以用于回归问题。

随机森林

决策树算法的近亲是随机森林算法。随机森林算法也可以用于分类以及回归问题。我们看到由决策树算法创建的模型仅仅是一棵决策树。另一方面,由随机森林算法创建的模型是决策树的森林。因此,随机森林算法不是相信单个决策树的预测,而是形成一个由多个决策树组成的团队,每个决策树都对新的观察结果做出预测。来自所有树的预测被认为达到了新观察的最终预测。

对于分类问题,森林中的每棵决策树预测它认为新观察值可能属于的类别。换句话说,每棵树为新的观察推荐一个类。由最大数量的树推荐的类别被选为最终预测的类别。假设我们将上一节中健康人和心脏病患者的数据提供给随机森林算法,该算法构建了一个森林树。图 16-16 显示了这些树是如何合作预测一名新员工是否患有心脏病的。你可以看到 80 棵树认为这位新员工健康,20 棵树认为这位员工有心脏病。由于大量的树认为雇员是健康的,所以模型预测雇员是健康的。

img/504530_1_En_16_Fig16_HTML.jpg

图 16-16

新员工的随机森林预测

对于回归问题,森林中的每棵树都为新观察值预测一个数值。该模型对所有树的预测值进行平均,并将平均值作为新观测值的最终目标值返回。

如果您深入了解决策树算法从数据中学习并构建树的方式,您就可以理解为什么决策树经常过度拟合它所学习的数据。这意味着决策树通常能够很好地预测它用于学习的那些观察值的目标值,但是对于新的看不见的观察值可能不能很好地执行。随机森林算法解决了这个问题,并通过参考多个决策树来提高新数据的性能。

要查询多个决策树,随机森林算法需要首先从提供给它的单个观察和特征数据集创建多个决策树。该算法通过在构建每棵树时改变观察值和特征来做到这一点。对于每棵树,该算法从原始数据集中随机选择具有替换的观察值,直到创建与原始数据集具有相同数量的观察值的新数据集。由于算法是用代替,原始数据集中的一些观察值可能会被选择多次,而原始数据集中的一些观察值可能根本不会被选择。因此,新数据集将具有相同的大小,但包含不同于原始数据集的一组观察值。该算法重复这一过程来创建许多不同的数据集,每个数据集用于构建一棵树——这种技术被称为引导聚合打包。在类似的线路上,该算法还试图在构建每棵树时改变特征。当算法为任何树中的分割决定最佳特征时,它只查看特征的随机子集,并从该子集中挑选最佳特征,而不是查看所有特征。这进一步导致每棵树在其分裂中使用不同的特征。这个故事的关键是,每棵树都是以不同的方式构建的,因为每棵树都从不同的数据集学习,并为其分裂使用不同的特征。并且多个这样的不同树协作来提高性能。

梯度增强树

梯度提升树是另一种利用多决策树的流行算法。让我们在此讨论中仅关注回归问题,以了解该算法如何工作以及它与随机森林算法有何不同。随机森林算法构建多个相互独立的树,其中每个树学习预测数字目标值本身。对于新的观察,每棵树都试图预测目标值,并且对所有树的预测进行平均,以得到该观察应该预测的最终目标值。梯度提升树算法则按顺序创建树,其中第一棵树学习预测数字目标值,每个后续树学习预测前一棵树产生的误差。在预测新的观察值时,第一棵树预测一个数字目标值,随后的每棵树预测前一棵树产生的误差。这个想法是,如果您可以预测数字目标值,并且如果您事先知道预测中的错误,您可以针对这些错误进行调整以改进您的预测。

让我们看一个具体的回归例子来更详细地理解这一点。假设我们示例中的数据包含三个特征 f1、f2 和 f3 以及一个连续值目标变量 t ,如图 16-17 左上表所示。注意,存在 f1 为 5、f2 为 7、f3 为 2 并且对应的目标值 t 为 10 的观察值。我们的目标当然是建立一个模型,使用这三个特性的值来精确预测 target t 的值。如果我们将这些数据传递给梯度提升树算法,它将像前面提到的那样依次构建树。图 16-17 显示了一个简单的场景,其中梯度提升树算法使用该数据构建了两棵树。该算法采用准备好的带有特征和目标的数据(图中左上角的表格),并在左侧构建第一棵树,该树学习使用特征值预测目标值*。该算法现在使用第一棵树来预测现有观测值的目标值,这些值显示在左下表格预测 _t 列中。*您可以在此表中看到,第一个树预测现有观察的目标值为 8,其 f1 为 5,f2 为 7,f3 为 2,而实际目标值为 10。所以第一棵树在这次观察中产生了 2 (= 10 减 8)的误差。

img/504530_1_En_16_Fig17_HTML.jpg

图 16-17

两棵树的梯度增强树

该算法现在构建第二个决策树,该决策树可以预测第一个树在预测目标值时将产生的误差。为此,该算法计算第一树对于每个现有观察值产生的误差,该误差是实际目标值和第一树预测的目标值之间的差(即,左下表格中的 t 减去预测 _t )。右上方的表格显示了第一棵树(在列error _ 1ST_ tree10)产生的误差,以及传递给第二棵树的现有观测值的特征值。该数据中的一行告诉第二棵树,当 f1 为 5,f2 为 7,f3 为 2 时,第一棵树产生的误差为 2。第二棵树使用这些数据来学习预测第一棵树将会犯的错误。一旦第二棵树学会了,就可以用它来预测第一棵树犯的错误。右下表格中的附加栏预测 _ 误差 _ 1ST_ tree显示了第二棵树预测的第一棵树对现有观测值产生的误差。例如,对于 f1 为 5、f2 为 7、f3 为 2 的观测值,第二棵树预测第一棵树将产生 1.7 的误差,而第一棵树产生的实际误差为 2。

现在树已经构建好了,预测新观测值的目标值就很简单了。假设我们有一个新的观察结果,它与原始数据中的现有观察结果非常相似(显示在上图的左上角表格中)。对于这个新的观察结果,f1 是 5,f2 是 7,f3 是 2。让我们看看梯度增强树如何使用这个新观测值的特征值来预测目标值,注意接下来解释的这个预测方法如何试图使预测的目标值接近这个新观测值的实际目标值(我们将假设新观测值的实际目标值也是 10,就像现有观测值一样,因为新观测值与现有观测值非常相似,但是这个实际目标值在实际场景中显然是未知的)。现在,对于这些特征值,第一棵树将预测目标值为 8(我们可以从上图的左下角表格中看出这一点)。现在用第二棵树来改进这个预测,使它更接近实际目标值。对于这些特征值,第二棵树将预测第一棵树的误差为 1.7(我们可以从上图右下角的表格中看出这一点)。现在将使用由第二树预测的第一树的误差来校正来自第一树的预测目标值,以获得将为该观察预测的最终目标值。因此,由第二树(1.7)给出的预测误差被添加到来自第一树(8)的预测目标值,以获得最终针对该观察预测的校正目标值(9.7)。因此,最终的预测目标值接近实际目标值(如前所述,我们假设其为 10)。

让我们看看如何进一步改进预测。我们在右下角的表格中看到,当 f1 为 5,f2 为 7,f3 为 2 时,第一棵树产生的实际误差为 2,但第二棵树预测的误差为 1.7。这意味着第二棵树本身对于这些特征值具有 0.3 的误差。因此,您可以配置算法来构建第三棵树,它可以预测第二棵树的错误。如图 16-18 所示。在图中可以看到,第三棵树从传递给它的数据中得知,当 f1 为 5,f2 为 7,f3 为 2 时,第二棵树产生的误差为 0.3。当第三棵树依次被要求预测第二棵树对这些特征值产生的误差时,它预测 0.25,如图所示。一旦建立了三棵树,当我们对新的观察值(其 f1 为 5,f2 为 7,f3 为 2)进行预测时,第一棵树将预测目标值为 8,第二棵树将预测第一棵树将产生 1.7 的误差,第三棵树将预测第二棵树将产生 0.25 的误差。因此最终预测目标值将等于来自第一树的预测目标值(8)加上第二树预测的第一树的误差(1.7)加上第三树预测的第二树的误差(0.25),等于 9.95。因此,第三棵树进一步帮助我们使最终的预测目标值更接近实际目标值(我们假设为 10)。

img/504530_1_En_16_Fig18_HTML.jpg

图 16-18

三棵树的梯度增强树

您可以配置算法,以类似的方式按顺序使用越来越多的树。甚至当你有许多树时,当预测一个新的观察值时,所有树的预测值相加,得到的和被预测为最终的目标值。这可以表示为一个简单的等式:

最终预测目标值=第 1 棵预测+第 2 棵预测+第 3 棵预测+第 4 棵预测+第 5 棵预测+ …

人工神经网络

人工神经网络(ANNs),或简称为神经网络,是最受谈论和赞美的机器学习算法之一,它基于大脑中生物神经元的功能方式。它们被用来解决最复杂的问题,也是全球广泛研究的目标。深度学习,正如我们在第一章看到的,是基于神经网络的。建立有效的数据科学实践的旅程可能会经历评估对人工神经网络的需求和建立专业知识的阶段。还存在特殊种类的人工神经网络,如卷积神经网络(CNN)、递归神经网络(RNN)等。,每一种都有一些独特的特征,使其特别适合于特定类型的问题。我们不讨论所有种类的人工神经网络,而是在这一节中着重于理解人工神经网络背后的一般原理,这将有助于我们理解它们与其他最大似然算法相比的优势和局限性。

我们的大脑由数十亿被称为神经元的相互连接的神经细胞组成。每个神经元从其他神经元接收信号,处理它们,并产生自己的信号,该信号进一步传递给其他神经元。类似地,人工神经网络由几个相互连接的人工神经元组成。每个这样的人工神经元从其他神经元接收输入,并进行一些计算以产生输出,该输出被传递给其他人工神经元。让我们重温一下我们在第六章中讨论的问题,我们的目标是根据邮件正文推断/预测邮件的类别。图 16-19 显示了我们在那一章中准备的数据的局部视图,其中包含每封电子邮件的一行。您可能记得,这些准备好的数据包含词汇表中每个基本单词的一个特征,还包含目标变量类别。电子邮件的特征值等于相应的基本词在该电子邮件中出现的次数。并且电子邮件的目标变量的值明显地指示了该电子邮件的类别。

img/504530_1_En_16_Fig19_HTML.png

图 16-19

电子邮件数据的功能和目标

我们将把单个目标变量类别转换成三个目标变量,分别对应于三个可能的类别:产品开发、研究工作和培训。图 16-20 显示了准备好的数据 11 已经被转换 12 为三个目标变量,可以在最后三列中看到。如果电子邮件属于某个类别,则该电子邮件对应的目标变量的值为 1,其他两个目标变量的值为 0。例如,图中第一封邮件属于类别产品开发,因此目标变量产品开发的值为 1,目标变量研究工作的值为 0,目标变量培训的值也为 0。现在让我们构建一个人工神经网络,它可以使用特征值来预测三个目标变量的值。

img/504530_1_En_16_Fig20_HTML.png

图 16-20

功能和新的目标变量

我们将建立一个具有简单和通用架构的神经网络,它由多层组成,每层包含一些人工神经元。一层中的神经元通常接收来自前一层神经元的输入,对其进行一些计算,并将结果传递给下一层中的神经元。图 16-21 显示了我们设计的神经网络,用于根据特征值预测三个目标变量。你可以在图中看到我们的神经网络有四层。输入层中的神经元将获取电子邮件的特征值,输出层中的神经元将预测该电子邮件的三个目标变量的值。通过使用更高级的功能/技术,可以在许多方面改进这个神经网络,但是如前所述,我们将主要关注基本原理,并省略这些细节。让我们通过这个神经网络来更深入地理解它。

img/504530_1_En_16_Fig21_HTML.png

图 16-21

我们预测电子邮件类别的神经网络

该图中的第一列是输入层,包含每个特征的神经元。注意有一个神经元用于特征上下文,一个神经元用于特征安全、等等。这一层中的每个神经元简单地接收电子邮件的相应特征值,并输出相同的值而不改变它。输入层中每个神经元的输出(正如我们刚刚看到的,它只是一个特征值)被馈送到隐藏层 1 中的所有神经元。因此,第一隐藏层中的每个神经元接收所有特征值作为输入。

隐层 1、隐层 2、输出层中的神经元与输入层中的神经元不同。这三层中的每一个神经元所做的事情与我们在逻辑回归中看到的类似。它计算其输入的加权和,加上偏差,并使用 sigmoid 函数将结果值转换为 0 到 1 之间的值。这可以表示为一个等式:

输出= f(b0+b1×IP1+b2×IP2+b3×IP3+…)

其中输出是神经元的输出,

f 是 sigmoid 函数,其定义与逻辑函数相同,

b0是偏置,

ip 1ip 2IP3…是对神经元的输入,

b 1b 2b3…是输入的权重。

因此,我们可以说,这三层中的每个神经元使用其权重列表(包括偏差)对其输入进行一些计算,以产生输出。并且将第一隐藏层中每个神经元的输出传递给第二隐藏层中的所有神经元。第二隐含层中每个神经元的输出传递给输出层中的所有神经元。注意,输出层有三个神经元,对应于三个目标变量。所以输出层的每个神经元输出邮件对应目标变量的预测值。

简而言之,我们可以说,神经网络在输入层获取电子邮件的特征值,并使用神经元的权重对这些特征值执行多次计算,以便在输出层预测三个目标变量的值。但是神经网络如何知道神经元中的什么权重值将从特征值中产生正确的目标值呢?神经网络从我们提供的数据中学习这一点,这些数据包含现有电子邮件的特征和三个目标变量。

让我们更详细地理解这一点。神经网络首先将所有神经元的权重初始化为某个值。 13 然后它会查看所提供数据中的第一封邮件,并将其特征值传递给输入层。将使用神经元的权重对不同层中的这些特征值进行计算,以产生三个预测的目标值。图 16-22 左侧显示第一封邮件的特征值,右侧显示网络的预测目标值。然后,神经网络通过将这些预测的目标值与从所提供的数据中已知的该电子邮件的实际目标值进行比较,来测量该电子邮件的预测误差。然后,它调整网络中神经元的权重,以减少这封电子邮件的错误。该图还描述了测量误差和调整权重的这些步骤。让我们仔细看看调整权重的过程。此邮件的预测误差取决于实际目标值和预测目标值。预测的目标值本身取决于该电子邮件的特征值和神经元的权重。因此,我们可以说,误差取决于特征值、神经元的权重以及电子邮件的实际目标值。由于该电子邮件的特征值和实际目标值在数据中是固定的,因此该电子邮件的误差最终是神经元权重的函数。 14 因此,神经网络可以使用类似于梯度下降的技术将权重从其当前值改变为新值,从而减小误差。

img/504530_1_En_16_Fig22_HTML.png

图 16-22

调整第一封电子邮件的权重

然后,神经网络执行这些调整权重的步骤,以减少所有其他电子邮件的错误(它对第一封电子邮件执行了该步骤)。有了新的权重,神经网络在预测现有电子邮件的目标值时应该会犯更少的错误。然后,神经网络再次重复调整所有电子邮件权重的整个过程,以进一步减少误差。它继续重复整个过程很多次,直到现有电子邮件的错误已经最小化。在这个阶段,对于现有的电子邮件,神经网络能够预测接近实际目标值的目标值。图 16-23 显示,如果你输入第一封邮件的特征值,神经网络现在预测的目标值接近实际目标值。因此,对于第一个现有电子邮件,网络预测目标变量产品开发的值接近151,研究工作的值接近 0,的值接近 0,培训的值接近 0。然而,真正的好处来自这样一个事实,即神经网络现在能够相当好地预测甚至是以前没有看到的新邮件的类别。 16 例如,如果新收到的电子邮件具有与第一封现有电子邮件相似的文本(因此具有相似的特征值),神经网络仍将预测目标变量产品开发的值接近 1,研究工作的值接近 0,培训的值接近 0。换句话说,神经网络将能够正确预测新收到的电子邮件属于类别产品开发。**

img/504530_1_En_16_Fig23_HTML.png

图 16-23

神经网络学习后对第一封电子邮件的预测

就像我们刚刚看到的,神经网络可能会在正确预测新收到的电子邮件类别方面做得很好。然而,与我们之前讨论的其他一些模型不同,网络并没有给我们一个简单的描述它是如何进行预测的。如果您还记得我们关于线性回归的讨论,您可能还记得线性回归模型为您提供了一个简单的等式,它解释了如何使用特征值计算目标变量的值。这个等式给出了许多关于潜在过程的见解。然而,对于神经网络,我们所知道的是许多神经元正在进行大量的计算,以达到预测的目标值。我们没有一个简单的图片来解释目标值与特征值之间的关系。

最后,让我们谈一谈神经网络的设计。对于这个问题,我们选择在我们的网络中有两个隐藏层。如果您决定使用神经网络来解决您的问题,您将需要决定您的网络应该有多少个隐藏层以及每个隐藏层应该有多少个神经元。我们不会在这方面做更多的讨论,但是建议研究一下用来决定合适的隐藏层和神经元数量的方法。

卷积神经网络

我们讨论了人工神经网络,并且在前面的章节中提到了几种特殊的人工神经网络。在本节中,我们将谈论一种特殊的网络,即*卷积神经网络(CNN)。由于 CNN 的设计方式它们对与图像相关的问题非常有效(如图像分类),*但最近发现它们对图像以外的问题也很有用。CNN 与我们之前看到的常规神经网络的主要区别在于它在常规神经网络的通常层之前放置了额外的层。

假设您的公司生产监控摄像机,现在您想要构建一个模型来判断摄像机近距离拍摄的照片属于人、动物还是车辆。这是一个图像分类问题,因为这里的目标是预测摄像机拍摄的图像属于三类(人、动物、车辆)中的哪一类。这个问题类似于上一节中的问题,我们希望预测电子邮件属于三个类别(产品开发、研究工作、培训)中的哪一个类别。因此,您可以构建一个常规的神经网络(类似于我们在上一节中看到的网络)来预测图像的类别。当您将输入层中图像的特征值传递给这个神经网络时,它也会在输出层中输出预测。但是如何获得图像的特征值呢?显然,您需要一些机制来从图像中提取特征值,以便您可以将它们传递给常规神经网络,让它进行预测。

或者你可以使用一个卷积神经网络(CNN) ,它不需要你明确地从图像中提取特征值。CNN 本身有额外的层,从图像中提取特征值,然后传递给常规的神经网络进行预测。图 16-24 显示了我们为预测监控摄像机拍摄的图像类别而设计的 CNN 的高级视图。CNN 将图像作为输入,通过卷积层和池层传递,如图所示。卷积层将包含权重的过滤器应用于图像——每个过滤器使用其权重来计算图像的一部分的像素值的加权和,从而产生该部分的计算值;该滤波器对图像的所有部分都这样做,从而产生一个计算值矩阵(如所解释的,包含图像每个部分的计算值),该矩阵被称为特征图。池化图层可缩小要素地图的大小-这通常是通过仅保留要素地图每个小块的最大值或平均值来实现的。图中的下一步是展平,将生成的特征图展平/转换成特征值的一维向量。如图所示,该特征值向量被传递到常规神经网络,后者在其最终(最右侧)层输出预测。

img/504530_1_En_16_Fig24_HTML.jpg

图 16-24

用于预测由监控摄像机拍摄的图像的类别的 CNN

这个 CNN 使用一个类似于我们之前讨论的常规神经网络的学习过程来学习正确预测图像的类别。CNN 将需要一组现有的图像和一个标签,以表明图像所属的类别。然后,它将计算这些值并将其分配给滤波器权重和神经元权重,从而为现有图像产生正确的预测。有了这些适当的滤波器权重和神经元权重值,CNN 也可以正确地预测新的看不见的图像的类别。这是跳过许多细节的学习过程的 10000 英尺视图。

由于除了常规神经网络的通常层之外,CNN 还有几层,因此在设计 CNN 时,您需要考虑一些额外的设计方面。参考 Chollet (2018)对这些方面的报道。你也可以探索现有的标准架构 17 ,看看是否有适合你的问题的。

评估和调整模型

我们之前讨论的 ML 算法从数据中学习来建立模型。现在让我们把注意力转向科学方法中的一个关键步骤:评估模型的性能。这也被称为模型测试。

实际上,模型评估和调优通常是齐头并进的。在这一节中,我们来看看如何评估和调整模型。

评估模型

为了客观地确定一个模型是否表现良好,我们需要检查它在不可见的数据上的表现,也就是说,不用于创建模型的数据。为了实现这一点,我们从原始数据集中留出一些数据用于测试;留出的数据称为测试数据,通常表示为总数据集的百分比。除了测试数据之外的所有数据都被 ML 算法用于训练模型,并被称为训练数据。因此,如果你听到类似“70-30 分割”或“我们留出 30%用于测试”,这意味着

数据集= >训练数据(70%) +测试数据(30%)

这样在训练数据上训练的模型被用于预测测试数据中观察值的目标值。通过检查这些预测目标值与实际目标值的接近程度来评估模型在测试集上的性能。例如,对于分类问题,我们可以检查测试集中有多少部分观察值具有与实际目标值相同的预测目标值。这被称为模型的精度。对于分类问题,还有许多其他度量来评估模型的性能,如精度、召回率、F1 分数、AUC、等。类似地,也有回归问题的度量标准,如均方误差、平均绝对误差、R 平方等。

这种训练-测试分裂是如何发生的,是确保数据科学过程(即科学方法)被正确和成功应用的最重要因素之一。我们已经看到了几个案例,声称已经创建了一个好的模型,但是该模型在生产中表现不佳——主要原因之一是在训练测试分割中忽略了一些东西。

根据数据的具体情况和要解决的问题,在如何进行训练测试分割时,可能需要仔细考虑几个方面。以下是一些常见的注意事项和细微差别:

  • 数据的分布:当训练测试分割完成时,确保测试集中数据的分布与原始数据集相似是很重要的。例如,考虑基于性别、吸烟状况等预测健康状况的例子。,我们在本章前面已经看到了。现在假设这个数据集中健康人的百分比是 80%,那么测试集中也有 80%的健康人是很重要的。然后,您可以依赖测试集作为真实世界数据分布的代表。

  • 数据分组:假设作为调查的一部分,你与不同的人进行了互动,其中你与每个人进行了一对一的临床会话。在每个会话中,您已经捕获了该人的多个语音记录,以及一个指示该人整体情绪(积极与消极)的标签。某个会话的标签适用于该会话中该人的所有录音,因此您的数据实际上包含录音及其标签。你现在的目标是根据一段录音来预测情绪,也就是它的调性。现在,如果你简单地做一个训练-测试分离,有可能给定一个人,这个人的一些记录将进入训练集,其他的进入测试集。当一个模型用这个训练集进行训练,并在这个测试集上进行评估时,你实际上是在测试那些用于训练的人。在这个测试集上的高性能并不保证在生产中的高性能,在生产中它会遇到不在我们的数据集中的新人。在这种情况下,重要的是一个人的所有记录完全在训练集中或完全在测试集中,也就是说,记录根据个人被分组,而被分配给训练和测试集。

在当今这个拥有高级 ML 库的时代,构建初始模型是相当快速和容易的。而是对数据的深刻理解,数据是如何收集的,等等。必须确保模型性能测试——科学方法的基石——得以正确进行。我们想重申的是,这些观点不仅仅与业余数据科学家有关;在需要实现业务成果的业务环境中,即使是大型团队中经验丰富的数据科学家也可能会忽略其中的一些内容。

调整模型

ML 算法通常提供各种“旋钮”来调整它们如何构建模型。例如,随机森林算法允许您指定树的数量、树的最大深度等。

用于指定训练应该如何进行的算法的“旋钮”或参数被称为超参数。并且确定导致最佳模型性能的超参数值的正确组合被称为超参数调整。例如,您可能会发现,在您的场景中,对于超参数值的组合(其中树的数量为 30,树的最大深度为 8,等等),随机森林具有最佳性能。

执行超参数调整的最简单方法是使用训练集训练具有各种超参数值组合的模型,并确定其模型在测试集上表现最佳的组合。并且选择对应于最佳组合的模型作为最终模型。然而,使用这种方法,我们最终通过看到测试集来选择最终模型——这严重违反了要求测试集是“看不到的”的科学方法。

为了解决这个问题,训练集通常被进一步分割以创建一个“验证集”,如图 16-25 所示。

img/504530_1_En_16_Fig25_HTML.jpg

图 16-25

训练-验证-测试分割

通过这种训练-验证-测试分离,我们将使用训练集和验证集(而不是测试集)来确定如前所述的超参数值的最佳组合。并且使用如此确定的最佳组合训练的模型最终在测试集上被评估性能。这确保了测试集上的最终模型性能实际上是基于看不见的数据。

请注意,在训练-测试分割过程中需要注意的许多方面也适用于训练-验证分割:例如,验证集中数据的分布是否适当等。

交叉验证

创建训练验证分割的概念可以进一步推广。例如,在创建了训练测试分割之后,让我们将训练数据分割成多个部分,称为“折叠”图 16-26 显示了这种产生三个折叠的分割。

img/504530_1_En_16_Fig26_HTML.jpg

图 16-26

将列车组拆分为三个折叠

然后,我们训练模型,依次将每个折叠视为验证集。也就是说,我们首先使用来自折叠 1 和折叠 2 的数据以及超参数值的各种组合来训练模型,并确定这些组合相对于折叠 3 作为验证集的表现如何。对于第二次和第一次折叠,我们重复这一步骤两次以上,每次使用选定的折叠进行验证,剩余的两次折叠用于训练。

然后,我们将知道哪种超参数值组合在所有三种情况下表现一致,并可以选择这种超参数值组合作为最佳组合。这种技术被称为交叉验证,并在更大程度上确保最佳超参数值的选择是通用的(即,不限于单个验证集)。

在交叉验证的情况下,重要的是确保折叠被适当地创建,因为每个折叠也将用于验证(即评估),例如,数据在所有折叠中的分布是适当的,一组的所有观察是单个折叠的一部分,等等。

在实践中,交叉验证这个主题有几种变体。如果在前面的过程中只使用了超参数值的一个组合,就会出现最简单的变化——在这种情况下,交叉验证只用于模型测试。更复杂的嵌套交叉验证策略对验证和测试数据使用多重折叠。

库和工具

有许多 ML 库;我们将只列举 Python 社区中几个流行的例子。注意,R 社区对各种 ML 算法也有类似的支持。

Python 中的 ML 库:

  • Scikit-learn 是 Python 中最广泛采用的 ML 库之一——它通常用于除深度学习之外的所有 ML 算法。

  • XGBoost 是最流行的梯度增强树库之一。

  • Keras(使用 TensorFlow 2.0)和 PyTorch 是两个广泛使用的深度学习库。

深度学习库通常需要 GPU 或 GPU 集群进行模型训练。像亚马逊、Azure 和谷歌这样的云服务可以用来按需加速 GPU。像 Horovod 这样的框架对于简化分布式深度学习很有用。

像 Hyperopt 和 Ray Tune 这样的库在高效的超参数调整方面很受欢迎。

在第十八章中,我们将会看到一些其他的高级视觉工具——多模态 PAML 工具——可以用于 ML。

数据工程

当处理训练模型的大量数据时,主要需要数据工程。

某些最大似然算法可以在一群机器上运行,以便更快地进行训练;在这种情况下,通过高效访问数据来调整和维护这些集群属于数据工程的范畴。

在深度学习的情况下,经常使用 GPU 集群。在这种情况下,需要建立基础结构,以确保数据访问的延迟不会成为训练模型的瓶颈。这项活动也属于数据工程。

结论

我们在这一章讨论了最大似然算法的种类,并且详细地看了一些最大似然算法。我们讨论了这些算法如何工作,它们如何进行预测,以及它们提供了什么样的见解。我们还讨论了模型评估和调优,并提到了一些流行的 ML 技术。下一章关注在生产系统中部署和使用 ML 模型进行推理。

进一步阅读

关于 ML 技术的覆盖范围,请参考 James 等人(2013)。关于 Python 中 ML 的动手示例,请参考 Géron (2019)。具体到深度学习,推荐 Chollet (2018)。

参考

弗朗索瓦·乔莱。用 Python 进行深度学习。美国纽约:曼宁,2018。

盖伦,奥雷连恩。用 Scikit-Learn 进行机器学习,Keras & Tensorflow,第二版。加利福尼亚州塞瓦斯托波尔:2019 年,奥赖利。

詹姆斯、加雷斯等人统计学习导论。纽约:施普林格,2013 年。

Footnotes 1

第五章。

  2

我们已经跳过了对特性缩放的讨论,将重点放在线性回归的主要概念上。

  3

网上有很多有趣的内容,解释了为什么这种算法被称为“回归”,尽管它在分类问题上如此常用。

  4

我们已经跳过了对特性缩放的讨论,将重点放在逻辑回归的主要概念上。

  5

这是一个非常简单的解释,跳过了对算法试图最小化的实际函数的讨论。

  6

树是一种看起来像倒置的真实树的表示:顶部是根节点,底部是叶节点。

  7

读者说的对。

  8

读者的左边。

  9

尽管在图 16-13 所示的局部视图中看不到,但我们的数据确实如此。

  10

对于实际目标值小于预测目标值的行,误差将为负。

  11

我们已经跳过了对特征缩放的讨论,将重点放在人工神经网络的主要概念上。

  12

在第十四章中,当我们将分类变量转换成数字变量时,我们看到了类似的转换。

  13

例如,随机值。

  14

类似于线性回归中的总体预测误差是权重 b 0 、b 1 、b 2 和 b 3 的函数。

  15

为简单起见,图 16-23 显示产品开发的预测目标值为精确为 1。出于同样的原因,其他两个目标变量的预测目标值在图中显示为恰好为 0。

  16

假设从大量现有邮件中学习后的神经网络将对新邮件进行很好的概括。

  17

比如我们在第十章看到的 EfficientNet。

 

十七、推理

一旦在机器学习步骤中创建了模型,就需要将它们部署为现实世界流程和生产系统的一部分。这是在数据科学流程的推理步骤中完成的。

在推理步骤中,我们执行将模型推送到生产系统所需的任务,以便其他应用程序可以使用它们,并监控这些模型的性能。

图 17-1 展示了进入数据科学最后一英里的各种活动、技巧和技术。本章将详细介绍图 17-1 。我们首先介绍模型发布过程,在这个过程中,在内部实验中创建的模型被准备好推向生产系统。然后,我们介绍生产系统本身,包括模型是如何部署的,如何被应用程序用于预测/推理,以及如何被监控。我们将按照方框/箭头所示的数字顺序,从底部开始并向上移动,覆盖图表。在这样做的同时,我们将讨论每个活动中使用的各种组件、技巧和技术。然后我们将触及一些在选择开源和付费推理工具时要考虑的因素。最后,我们将提到推理中涉及的数据工程方面。

img/504530_1_En_17_Fig1_HTML.png

图 17-1

推论:步骤和组件;方框内的括号中提到了技术实例

模型发布流程(1)

当数据科学团队创建了一个模型并准备将其部署到生产环境中时,就会触发模型发布流程。这是推理步骤的起点。

模型发布过程将模型打包,以便它可以部署到生产系统中。让我们看一下模型发布过程中的每个组件和活动。

模型注册表

数据科学团队在机器学习步骤中创建的模型存储在模型注册表中。模型注册中心中的模型通常是版本化的。模型也有生命周期,例如,测试中的*、、生产中的、*等等。

MLFlow 是实现模型注册中心的一个流行的开源选择。它还允许将模型链接回创建模型的原始实验——这使得实验具有可追溯性和可再现性。

一些开发环境(参见第十八章)也提供了内置的模型注册中心。例如,Databricks 将 MLFlow 集成到其开发环境中。

模型转换器

数据科学团队创建的模型通常最初在他们使用的技术堆栈中表示,例如,如果数据科学团队使用 Python 和 ML 库,如 scikit-learn ,那么 Python pickle 文件将表示 ML 模型。pickle 文件将捕获,比如说,决策树的结构或者线性回归模型的方程。这个 ML 模型通常需要被转换成适合部署到目标生产系统的形式。

Model converter 涉及将 ML 模型转换成 interexchange 格式或目标系统,如移动/web 应用程序。让我们简要地看一下这两个选项以及何时使用它们。

交换格式

在各种编程语言中存在几个 ML 库和平台——我们在第十六章中看到了其中的一些。为了实现这些之间的互操作性,机器学习社区开发了 interexchange 格式。交换格式

  • 指定一种对编程语言和 ML 库不可知的 ML 模型表示

  • 用 Java、Python 等各种流行的生产系统语言提供推理运行时库。,来调用模型

  • 激励 ML 库开发人员提供能够以 interexchange 格式保存模型的 API

使用 interexchange 格式的优点是,尽管数据科学家可以使用任何 ML 库用一种语言(比如 Python 或 R)构建模型,但转换后的模型可以使用适当的推理运行时库在各种生产技术栈(比如 Java、Python、JavaScript 或 Swift)中轻松调用。

经典的 PMML 2 和最近的 ONNX 3 是流行的交换格式的两个例子。根据我们的经验,ONNX 是目前的首选,因为它支持广泛的 ML 模型,并与多种语言(Python、R 等)的大量流行 ML 库 4 集成。).

目标系统

在某些情况下,一个模型可以被直接转换为针对一个特定的生产系统, 5 而不需要使用 interexchange 格式。如果 ML 库技术栈在数据科学和软件工程团队中是标准化的,这是可能的。例如,如果 TensorFlow 作为跨团队的标准,那么 TensorFlow 模型可以使用 *TensorFlow Lite、Tensorflow.js、等进行转换。、*针对移动/web 应用等系统,其中模型必须直接在用户的设备/浏览器上执行。 6

模型包装

模型 打包包括从转换后的模型中创建一个可部署的工件。工件的类型取决于模型是部署到服务器还是最终用户的系统(例如,移动应用程序/web 浏览器)。

  • 当一个模型被部署到推理服务器(1.1)时,那么工件的类型可以是 AWS Lambda 函数、Docker 容器等。

  • 当一个模型要被部署到一个移动或 web 应用程序(1.2)上,以便它在用户的移动设备或浏览器上运行时,那么工件将是一个可以在移动或 web 应用程序中使用的 Android/iOS/JavaScript 模块或库。

在这两种情况下,转换后的模型(例如,ONNX 模型)作为工件的一部分被包括。 7 这个工件然后被部署到生产系统(1.1,1.2)——模型然后可以被应用程序调用,我们接下来将会看到。

生产

数据科学团队创建的模型由生产系统中的应用程序使用。我们现在来看看这些应用程序通常如何调用已经部署的模型。

推理服务器(2)

最常见的场景是将模型公开为 REST APIs,这样任何应用程序都可以调用它们(2.1)。您还需要监视模型在生产中的表现,以确定模型的性能是可接受的还是随着时间的推移而恶化。我们将封装这些职责的组件称为推理服务器

让我们简要介绍一下推理服务器的这两项职责。

推理/预测服务

这指的是公开模型的服务(最常见的是 REST APIs)。通常,数据工程师或软件工程师可以很容易地在打包的模型上实现 REST API 层。

但是如果有大量的模型,或者如果您需要快速扩展到几千个并发请求的能力,等等。,你可能会考虑使用亚马逊 Sagemaker 推论、Seldon、Algorithmia 等服务。根据我们的经验,我们也发现无服务器技术相当合适。例如,Amazon API Gateway 与 AWS Lambda 的结合是一种经济高效的方式来部署可以轻松扩展的模型。

模型监控

要了解模型的有效性,您需要知道模型给出的预测何时证明是正确的或不正确的。让我们参考第四章中关于分类的例子——根据预期销售是否实现,我们可以确定模型给出的预测是否正确。通常生产中的模型会随着时间的推移开始漂移,也就是说,越来越多地开始给出不正确的预测。尽早发现这一点并修复/升级模型至关重要。

为此,需要存储模型生成的所有预测,以供数据科学团队将来分析。此外,每当我们知道真实的结果时,我们也应该存储它,以便可以检测到模型漂移。该数据还将有助于确定新的候选模型与旧模型相比如何。

模型监控通常与某种形式的 AB 测试相结合,也就是说,同时部署两个或更多的模型变体,并且将一定百分比的推理请求路由到每个变体。通过分析每个变体在生产中的表现,我们可以确定哪个变体是最好的,并将其用作主要模型,也就是说,将大多数推理请求路由到它。

图 17-1 中提到了一些专注于监控模型的云服务。

从模型监控中获得的数据也用于数据科学过程的进一步迭代中——我们将在“数据工程”一节中再次讨论这一点。

移动和网络应用(3)

这广义上是指由您的公司构建的应用程序以及希望使用您的模型的第三方应用程序。应用程序调用模型有两种典型的方式:

  1. 应用程序将调用推理服务器公开的 API,使用模型获得预测(2.1)。

  2. 这些模型被集成到您的移动或 web 应用程序(1.2)中,这样这些模型就可以直接在用户的移动设备/web 浏览器上运行。这些通常是需要低延迟和/或移动应用需要能够在没有互联网连接的情况下离线运行的情况。示例包括在在线会议期间实时抑制音频噪声 8 或者从用户移动设备上捕获的语音中检测用户的健康状况。

ML 操作

在生产中发布和维护模型的规程被称为 ML Ops。这在过去的几年中已经发展成为一门学科,并且广泛覆盖了模型发布过程推理服务器的模块。

相应地,专门的 ML Ops 角色也越来越多地出现在数据科学团队中——我们将在第二十一章中更详细地了解这一角色。

开源与付费

一些组织开始采用数据科学,并在将模型部署到生产系统时面临困难。因此,在这个快速扩张的空间中有大量的工具和云服务。

对于推理步骤,我们建议尽可能使用开源框架,或者使用具有开源策略的工具。

例如,您可以从使用 MLFlow 进行模型注册、使用 ONNX 进行模型转换、使用 Docker 进行模型打包以及使用简单的定制部署进行推理服务开始。

在早期阶段,您可以简单地将模型预测直接存储到数据湖或数据仓库中。在某个时候,你会开始有几个模型投入生产,并且大规模地部署和监控这些模型变得越来越重要。

一旦你到达一个阶段,一个更高级的工具似乎对所有这些活动更有效,你就可以考虑使用一个付费的工具,可能是一个开源策略。您可能希望从以增量方式为某些组件采用新工具开始。例如,你可以开始使用开源的谢顿 10 用于模型发布过程推理/预测服务,然后在适当的时机采用他们的企业解决方案 11 ,该解决方案也覆盖了整个推理服务器

数据工程

推理步骤中的所有活动都可以被认为是数据工程的一部分。当生产中的型号数量增加,团队壮大时,如果需要,可以分离出一个小型的专业 MLOps 组。详见第二十一章和第二十二章。

此外,从数据工程的角度来看,从模型监控中捕获的数据与其他数据是同等的,也就是说,模型监控系统是另一个数据源。在这里,我们回到数据科学过程的数据捕获步骤——关于模型给出的预测及其性能(根据真实结果评估)的数据用于数据科学过程的进一步迭代,以调整和升级模型。

结论

在这一章中,我们讨论了数据科学过程中推理步骤所涉及的各种活动。我们还涉及了一些工具和库,它们通常用于各种特定目的的活动中,并涵盖了一些与在开源和付费工具之间进行选择相关的要点。

生产中模型的预测和性能实际上是数据科学过程的数据捕获步骤的新数据源。这个循环形成了我们在第一章中首次看到的数据科学过程的最大迭代——从数据捕获到推理,再回到数据捕获。

Footnotes 1

在机器学习步骤中作为实验代码的一部分调用的 MLFlow API 实现了这一点。

  2

https://wikipedia.org/wiki/Predictive_Model_Markup_Language

  3

https://onnx.ai/

  4

比如我们在第十六章看到的那些。

  5

请参考“移动和 Web 应用程序”一节,了解何时适合这样做的示例。

  6

或者在物联网设备上。

  7

在(1.2)的情况下,偶尔会将转换后的模型直接集成,而不打包成模块。这取决于 app 的底层设计。

  8

通常使用深度学习模型来完成,该模型被训练成从嘈杂的音频中产生干净的音频。

  9

参见第十三章。

  10

那就是谢顿核心。

  11

那就是,谢顿的部署。

 

十八、其他工具和服务

在这一章中,我们将会看到各种各样的工具、库和服务。这些通常会贯穿我们在前面章节中看到的所有层,所以我们在本章中会单独讨论它们。

并非所有的工具总是必不可少的;我们在下面的列表中包括了基本的和有用的工具。重要的是从小处着手,通过添加更复杂、更先进的工具来提高生产力,从而逐步发展——在这一发展过程中,了解本章中各种类别的工具、库和服务将会很有帮助。

发展环境

数据科学家和数据工程师使用 dev 环境来编写数据科学过程中从数据捕获到机器学习的所有步骤的代码。如果你只是从一两个数据科学家开始,并且你能够以 CSV 文件的形式向他们提供数据,他们可以简单地在他们各自的机器上使用他们选择的 IDE 1 进行分析,例如 Spyder 或 RStudio。但是,数据科学团队通常在高度协作的环境中工作,在像笔记本这样的环境中编码,这些笔记本位于一个共享位置,以便与团队的其他成员进行讨论。理想情况下,笔记本还应该支持多名数据科学家同时进行协作编辑。

Jupyter 笔记本是数据科学家最常见的环境。其他流行的环境有 Databricks、Sagemaker Studio、JupyterHub 和 Zeppelin。其中一些允许在单个笔记本中混合使用 R/Python/SQL,如果您的数据科学团队混合使用这些技能,这将非常有用。

开发环境还应该允许数据科学团队注册通用的标准库,以确保整个团队使用不同库的相同版本。

在第十九章中,我们将会看到一个开发环境是如何与所有其他组件结合使用的。

实验注册

实验注册表是存储数据科学团队执行的所有实验的地方。实验注册中心需要支持以下内容:

  • 存储参数、图表、指标等。,其中包含一个实验的细节。

  • 使用标签/关键字等搜索实验。

  • 根据参数和结果比较多个实验。

  • 维护用于执行实验的笔记本/源代码版本的链接。这对于追踪血统和能够复制实验是至关重要的。

  • 将模型存储在模型注册表中2;模型注册表中的每个条目都将链接到原始实验,以允许将模型追溯到实验以及相应的源代码和数据。

MLFlow 是一个流行的开源实验注册表,它提供了上述功能。一些开发环境捆绑了一个实验注册表作为其产品的一部分。 3

实验注册中心充当组织中数据科学团队所有活动的中央长期存储库。因此,保持数据科学团队的业务连续性至关重要。通过存储所有实验和谱系的历史,它还通过允许实验的回顾和再现来帮助确保必要的科学严谨性。

计算基础设施

在数据科学团队的运营中,计算资源有三大用途:

  • 提供服务器来托管开发环境。例如,这包括一个 JupyterHub 服务器,它可以根据团队的需求和规模进行扩展。在云托管的环境中,如 Databricks,这可能由服务提供商负责。

  • 为执行数据科学团队编写的笔记本/脚本提供计算资源。这包括任何可扩展的集群(如 Spark 集群)、GPU 机器等。,用于数据科学过程中的数据准备和机器学习步骤。

  • 为托管可视化工具 4 (例如 Tableau)和 SQL 查询引擎 5 (例如 Presto)提供服务器。

计算资源可以属于以下任何类别:

  • 单独的机器(本地的物理机器,或者像 AWS Ec2 这样的云服务)。通常用于

    • 数据科学指数据可以放在一台机器上

    • 托管服务器或第三方工具

  • Spark 等计算集群(内部部署,或 Databricks 或 Amazon EMR 等服务)

  • GPU 机器(单个或多个 GPU)

  • 使用 Horovod 等框架的 GPU 集群

  • Amazon ECS 等容器托管服务。 6 通常用于打包为 Docker 容器或可使用 Docker 部署的工具/库的复杂 ML 作业

AutoML

人工智能的动机之一是自动化大量由人类完成的重复性工作。如果我们的目标是让数据科学家的工作自动化,会怎么样?这是 AutoML 的愿景。

从原始意义上来说,数据科学家是做什么的?他们仅仅尝试各种数据准备操作,并尝试具有不同参数设置的各种模型,以达到最佳模型。如果一个算法只是简单地强行尝试所有流行的模型,如 XGBoost、LinearRegression、NeuralNetworks、 7 等等,会怎么样?我们已经开始看到 AutoML 的基础了。

当然,运行各种模型和神经网络架构并不是一件容易的事情。AutoML 解决方案采用几种先进的技术和启发式方法来优化搜索,以获得一个好的模型。

AutoML 的目的

AutoML 有两个主要用途:

  • 民主化数据科学:AutoML 服务允许,比如说,软件工程师在不了解数据科学的情况下使用数据科学的力量。在某种程度上,AutoML 对于现在的数据科学,就像 SQL 对于 20 世纪 80 年代以来的数据处理一样。就像 SQL 允许编程技能较低的人以声明方式查询数据一样,AutoML 开始允许工程师通过自动化数据科学过程中的许多具有挑战性的步骤来将科学方法应用于数据。

  • 自动化数据科学家的重复任务:数据科学家需要做大量的手动调优和微小变化的重复实验。他们还经常执行模型扫描,即使用各种候选建模方法进行实验,以缩小有前途的继续研究的范围。在所有这些领域,AutoML 可以通过自动化这些重复的任务来帮助数据科学家。从这个意义上说,AutoML 对于数据科学家就像 SQL 对于软件工程师一样——软件工程师不需要声明性语言;他们可以编写查询数据所需的复杂程序。但是尽管如此,SQL 通过自动化高效查询多个表中的数据等重复性编程任务,使他们的工作变得更加容易。

小心翼翼

在使用 AutoML 时小心谨慎是很重要的。如果团队中有人正在使用 AutoML,那么他们知道如何评估模型性能是很重要的,这样他们就可以确定结果模型是否足够好。他们还需要完全理解输入 AutoML 的数据和问题本身的表述(哪些是目标变量,哪些是特征,等等。).拥有这些技能的人现在被称为 ML 工程师——更多细节请参考第二十一章。

AutoML 并没有减少对领域理解的需求——特别是在识别正确的特性和一些特定领域的数据准备步骤时。例如,您的目标可能是预测某个地区各个加油站的燃料库存何时需要补充,这样您就可以优化从主码头到加油站的燃料配送。在这种情况下,乍一看,我们似乎需要预测一个加油站的库存。但库存通常不会有一个明确的模式——更有可能有一个模式的是加油站的销售。销售可能取决于一周中的某一天、某一天是否是假日、天气等等。一旦我们有了一个可以预测销售的模型,我们就可以根据当前的库存和未来的销售来推断未来的库存。从未来的库存,我们可以确定什么时候库存会低,需要补货。即使一个人正在使用 AutoML,这种问题公式化仍然需要由数据科学家或 ML 工程师来完成。

虽然 AutoML 可以完成一些数据准备方面的工作,如标准化或缺失值处理,但 AutoML 的主要重点是自动化机器学习步骤。人类仍然需要执行数据科学过程的其他步骤。

工具和服务

AutoML 工具和服务有多种风格。我们在这里提到一个分类:

  • 开源库,如

    • Auto-sklearn,它构建在 scikit-learn 之上,提供 AutoML 功能

    • 亚马逊开源的自动增长

  • 亚马逊 Sagemaker Autopilot、谷歌云 AutoML、Azure 机器学习等云服务都支持 AutoML。除了机器学习步骤,它们还可以在不同程度上支持数据准备步骤,例如,文本、图像等的特征化。

一些工具可能以自动化的方式支持超参数调优,并将其称为 AutoML。由于术语 AutoML 在市场上没有明确的定义,因此检查声称提供 AutoML 的工具或服务的详细功能非常重要。

多模态预测分析和机器学习

多模态预测分析和机器学习(PAML) 8 工具提供高级功能,以支持大数据规模的端到端数据科学流程。这包括

  • 能够在可视化的无代码 UI 中定义数据准备和机器学习工作流。

  • 数据科学家和数据工程师将自定义代码插入可视化工作流的挂钩。

  • 为喜欢编码的数据科学家集成笔记本。

  • 能够与其他团队成员分享实验及其结果。这可能还包括各种角色,如编辑、审阅者等。

  • 跨实验跟踪数据谱系,以支持审核、实验的可重复性和可追溯性。

  • 无缝地将模型部署到生产环境中,而无需编写额外的代码。

  • 监控生产中的模型,AB 测试等。

一方面,多模式 PAML 工具在开箱即用方面有很大不同,另一方面,在多大程度上允许定制方面也有很大不同。

SAS 可视化数据挖掘和机器学习(VDMML)结合 SAS Viya 产品套件是目前市场上最全面的 PAML 工具之一,支持前面提到的所有功能。

KNIME Analytics Platform 是一个开源工具,支持为整个数据科学流程可视化地定义数据科学工作流。KNIME Server 是一个付费的企业工具,支持工作流的协作和交互执行。

如果有市民数据科学家 9 和数据分析师与数据科学团队一起工作,多模态 PAML 工具会特别有用。

根据我们的经验,虽然多模式 PAML 工具可以提高大多数常见实验流程的效率,但当涉及到实验设计中高度复杂的变化时,它们往往会成为一个障碍。采用多模态 PAML 工具的决定不容轻率——需要考虑各种因素,以确保它们提高生产力和协作,而不是减慢数据科学家的速度。这个决定通常是针对您的团队组成和业务需求的。如果您的团队确实需要低代码/无代码的数据科学工具,那么从像 KNIME Analytics Platform 这样的开源选项开始通常是一种谨慎的方法——基于其采用和有用性,可以考虑更昂贵和更高级的选项。

数据科学应用/工作流

人们通常认为数据科学团队是在孤岛中运作的。这种感觉通常是因为数据科学团队公开的主要成果是在数据科学团队之外无法轻松使用的模型,例如,当软件工程师甚至需要在模型之上构建原型应用程序来展示模型的功能时。

这种情况的主要原因是技术堆栈的不匹配——虽然数据科学家使用 R 和 Python 等语言,但创建原型应用程序来展示模型需要 JavaScript、web 服务器、REST APIs 等经典 web 应用程序技能。为了解决这个问题,我们在当今的行业中看到了几种方法 10 :

  • 使数据科学家或数据工程师能够使用他们熟悉的技术快速创建能够调用其模型/脚本的原型应用。Plotly Dash 和 Bokeh 就是这样的例子——它们允许只使用 Python 代码快速构建 web 应用程序的原型。 11 因此,数据科学家/工程师创建的任何模型/可视化都可以直接插入,以快速创建交互式 web 应用。

  • 对于使用可视化工作流工具的数据科学团队,可以使用引导式分析工作流来公开模型。数据科学家/工程师创建的这些工作流可以使用用户在 web 应用程序上的输入来交互执行。KNIME 服务器就是一个例子。

这些方法使数据科学团队能够将其他利益相关者、数据分析师和公民数据科学家纳入数据科学流程。

现成的人工智能服务和图书馆

有几个人工智能服务和库面向特定类别的问题:

  • 在某些情况下,比如时间序列预测或推荐系统,模型取决于你的特定数据——所以这些服务使用你的数据训练模型,然后提供用于推理的 API。

  • 在其他情况下,例如与处理图像、文本、语音等相关的问题。,这些服务直接提供了用于推断的 API,因为它们已经使用自己的数据训练了模型。这是因为,例如,文本的情感或人脸的情感普遍适用于任何数据集。这些库/服务通常也允许使用您的训练数据来定制模型。

表 18-1 中提到了一些流行的人工智能服务和库。

表 18-1

人工智能服务/库的例子

|

问题类别

|

服务/图书馆示例

| | --- | --- | | 时间数列预测法 | 先知,亚马逊预测 | | 推荐系统 | 亚马逊个性化,谷歌推荐 | | 自然语言处理 | 亚马逊理解,Azure 文本分析,谷歌自然语言 | | 计算机视觉 | Amazon Rekognition、Azure 计算机视觉、Azure 媒体视频分析器 | | 语音处理 | 亚马逊转录/Polly、Azure 认知语音服务、谷歌语音转文本 |

除此之外,还可以找到许多特定领域的库,如医学成像等。通常情况下,您会希望了解您的领域中是否存在这样的库/服务——最好是开源的——供您利用。

有效使用这些 AI 服务和库所需的技能与使用 AutoML 所需的技能类似。因此,ML 工程师——我们在前面的 AutoML 部分遇到过——通常也是利用 AI 服务/库的理想人选。

何时使用

如果你正在构建一个涉及到表 18-1 中所包含的一类问题的应用程序,谨慎的做法可能是从使用一个相应的服务开始。与您自己从头开始构建模型相比,这可能需要更少的投资。它还可以加快您的上市时间,让您专注于将应用程序的基本功能提供给用户。如果您希望使用前面提到的一些功能来自动化您组织中的一些流程,这同样适用。

虽然我们可以在很大程度上依赖这些服务,因为它们被几个组织使用,但不能保证它在您的特定业务和领域中的表现如何。因此,在任何情况下批判性地评估模型的性能都是很重要的。

如果您的产品或应用程序旨在通过利用您自己的领域专业知识和数据在市场中脱颖而出,那么创建您自己的模型是有意义的。在这种情况下,使用前面提到的服务作为基线基准仍然是有用的。

对于云服务来说,最后一个需要考虑的方面是安全性。阅读细则很重要——一些云服务可能会使用您的数据来不断改进他们的服务,您可能需要明确选择退出。

开源与付费

正如我们在前面章节中看到的,数据科学领域很大程度上基于开源库和框架。

虽然付费工具可以提供各种好处,但不要被某个工具或供应商所束缚,这对数据科学来说尤其重要。这样做会降低运营的灵活性,还可能限制你招聘的人才库。

选择一个构建在开源技术之上的工具通常是一个很好的折中方案。这使您能够限制供应商锁定的程度,同时使用付费工具的功能来提高生产率。Databricks 平台就是一个做得非常好的工具。

  • Databricks 笔记本可以轻松地从开源 Jupyter 笔记本导出/导入。

  • Databricks 计算集群基于开源的 Spark。

    • Databricks 查询引擎使用开源的 SparkSQL。
  • Databricks 集群预装了流行的开源 ML 库。

  • Databricks Delta 基于开源存储层 Delta Lake。

  • Databricks 中的实验和模型注册基于开源的 MLFlow。

各种其他工具在不同程度上遵循类似的开源策略。如果您决定选择没有开源战略的付费工具,那么这是一个重大的战略决策,需要强有力的支持,具体到您的业务和数据科学团队。

结论

在本章中,我们看到了在数据科学流程的多个步骤中使用的各类工具。

在这一章中,我们总结了技巧、工具和技术。在下一章中,我们将看到一个参考架构,它说明了到目前为止,第三部分中讨论的各种技术是如何在执行整个数据科学过程中结合在一起的。

Footnotes 1

集成开发环境。

  2

我们在第十七章中讨论了模型注册。

  3

例如,Databricks 将 MLFlow 集成到其环境中。

  4

包含在第十五章中。

  5

包含在第十三章中。

  6

弹性集装箱服务。

  7

搜索神经网络的各种结构以确定最佳结构被称为神经结构搜索或 NAS。我们在第十章看到的 EfficientNet 系列型号是 NAS 的成果。

  8

这个术语是 Forrester 创造的。

  9

参见第二十一章了解公民数据科学家的角色。

  10

如果您碰巧正在使用一个高级工具,比如 SAS VDMML,那么这已经很容易得到了。所以,你不需要这些方法。

  11

R 生态系统中的对等物是闪亮的。

 

十九、参考架构

到目前为止,我们已经介绍了数据科学团队用来执行数据科学流程各个步骤的各种工具和技术。在本章中,我们现在将了解一个参考体系结构,该体系结构可以定制并用于您的数据科学团队的运营。该参考体系结构汇集了我们迄今为止看到的各种工具和技术,使数据科学流程能够进行快速试验和部署。

图 19-1 显示了参考架构。我们已经在第三部分的前几章中介绍了各个组件——本章将介绍它们是如何组合在一起的。

需要注意的是,并非所有的块都是必要的,这取决于数据科学项目的种类和数据科学文化,不同的块会随着时间的推移而发展。但是最终一旦你的团队达到一个成熟的水平,几乎所有这些模块都是需要的。

在高层次上,数据科学有两个方面,如图 19-1 所示:支持数据科学实验活动的系统和使用数据科学团队创建的模型的生产系统。

在本章中,我们将详细浏览图 19-1 。我们将首先看实验方面,然后是从实验到生产的过渡。一般来说,我们将按照方框/箭头所示的数字顺序浏览各个模块。

img/504530_1_En_19_Fig1_HTML.png

图 19-1

支持数据科学运营的参考架构

实验

在本节中,我们将介绍与数据科学团队的实验活动相关的各种组件。

开发环境(1)

我们在第十八章中简要介绍了开发环境。在这里,我们将了解更多关于开发环境如何与参考体系结构中的所有其他组件一起使用的细节。

(1.1)开发环境应允许无缝访问核心基础架构:

  • 数据湖/数据仓库中的所有数据都应该可以使用 SQL、pandas、Spark 等常见机制进行访问(通过访问控制)。

  • 数据科学家应该能够根据需要扩展计算能力。这包括扩大/缩小单台机器,也可能包括一个机器集群,具体取决于数据大小和分析类型。

  • 数据科学家应该能够轻松地在实验注册表中注册他们的实验,以及数据的候选模型和谱系。

(1.2)如果您有一个使用 SparkSQL 或 Presto 等查询引擎的大数据设置,那么数据科学团队应该能够使用该查询引擎运行 SQL。

(1.3)如果数据科学团队使用简单的应用程序或工作流向其他内部利益相关方公开一些模型,那么最好能够在开发环境和这些应用程序/工作流之间实现集成。例如,KNIME Server 可以像我们在第十八章中看到的那样用于此目的,它允许使用 REST APIs 调用工作流——这样的 API 可以从开发环境中调用来执行工作流。

(1.4)数据科学团队可能需要在云上访问 AutoML 服务,如亚马逊 Sagemaker Autopilot、谷歌云 AutoML 等。

数据来源(2)

可能有几个相关的内部和外部数据源。我们已经在第十三章中讨论过这些。

来自这些多个数据源的数据被摄取(3)到中央数据湖/数据仓库(如 4 所示)中,供数据科学团队进行分析。

摄入(3)

我们已经在第十三章中探讨了与摄入相关的方面。摄取的目标是让数据在数据湖或数据仓库中以合理组织的形式可用(在 4 中)。

核心基础设施(4)

这是实验沙盒基础设施的核心,所有其他系统都基于它。概括地说,这包括数据存储、计算和实验注册组件。

我们已经在第十三章中介绍了数据存储,即数据湖、数据仓库和共享文件系统。

我们已经在第十八章中介绍了计算基础设施和实验注册。

分析(5)

数据科学家的大量数据分析可能会在使用核心基础架构(4)的开发环境(1)中进行。但是,在处理大数据的规模稍大的团队中,开始感受到以下需求:

  • 如果团队中有一名数据分析师或公民数据科学家 1 可能没有很好的编程技能,使用可视化分析工具可以提高生产率。使用这些工具创建的可视化可以使用查询引擎或直接从数据湖/数据仓库(4.1)获取数据。我们在第十五章中讨论了数据可视化和 BI 工具。

  • 数据工程师或数据科学家可能会编写批处理作业,自动执行从数据准备到机器学习的步骤。这些可以产生转换的数据或分析结果,这些数据或分析结果被写回到数据湖/数据仓库(4.1)。批处理作业也可以执行 ML 实验,在这种情况下,实验细节被写入实验注册表(也是 4.1)。

  • 如果您的基础架构不包括数据仓库,而您的数据科学家/分析师更喜欢使用 SQL,那么可能需要一个查询引擎来提供 SQL 支持。查询引擎能够从数据湖和数据仓库(4.1)中的多个数据集过滤/聚集数据。我们已经在第十三章中看到了查询引擎。

数据科学应用/工作流(6)

我们在第十八章中介绍了数据科学应用/工作流。注意到

  • 这些应用程序/工作流中使用的模型通常从模型注册中心(6.1)获取。

  • 通常使用分析查询引擎(5.1)访问应用程序/工作流所需的任何数据。

  • 可视化分析也可以嵌入到数据科学应用程序/工作流中(5.1)。

自动语言(7)

AutoML 服务包含在第十八章中。所使用的 AutoML 服务需要访问用于训练 AutoML 模型的数据。

如果您计划使用 AutoML 服务,但拥有本地核心基础架构设置(4),您的 IT 团队可能需要帮助您的数据科学团队从他们的开发环境中使用 AutoML(1.4)。

讨论了实验方面之后,现在让我们看看需要哪些步骤/组件来确保数据科学家创建的模型能够作为生产系统的一部分出现。

从实验到生产

当数据科学团队创建的模型将被部署到生产系统时,模型发布过程(8)被触发。在第十七章中,我们已经介绍了这个模型发布过程以及随后的推理服务器(9)和移动/网络应用程序(10)。

模型生成的预测将被存储回我们的数据湖(9.1)中,用于监控和未来分析——这也在第十七章中有所涉及。

人工智能服务

人工智能服务(11),如语音处理、计算机视觉、时间序列预测等。,都包含在第十八章中。这些服务通常以 API 和 SDK 的形式公开,可以直接从移动或 web 应用程序中调用(10.1)。

通常,数据科学团队 2 会进行一些实验,以评估人工智能服务在用于生产之前是否适合您的特定用例——这就是为什么我们将人工智能服务组件描述为跨越实验和生产系统。

结论

在本章中,我们介绍了一个可以根据您的特定需求进行定制的参考体系结构。我们还讲述了如何使用该参考体系结构中的各种组件来支持数据科学流程。

我们将在第二十三章中再次讨论参考架构——在那里,我们将了解数据科学项目的类型如何影响对参考架构各个模块的需求。

Footnotes 1

数据分析师和公民数据科学家将在第二十一章中介绍。

  2

可能是 ML 工程师,参见第二十一章。

 

二十、僧侣与牛仔:实践

在第三章中,我们首先看了数据科学的两种文化,以及如何确定哪种文化可能与手头的问题和您的总体业务更相关。现在,我们已经介绍了数据科学过程的各个步骤中使用的各种技术,我们准备好了解两种文化在实践数据科学的方式上有什么不同。这是本章的重点。

理解实践中的这些文化差异在三个方面是有用的:首先,这可以使您确定您的数据科学团队将会并且应该使用哪些技术来符合期望的文化-这将在本章稍后的图 20-1 中说明。

第二,当你建立团队时,你可以试着加入数据科学家,他们倾向于你的企业所期望的文化;本章总结的文化差异将有助于确定候选数据科学家主要属于的文化。在组建数据科学团队的背景下,我们将在第二十二章中再次讨论这个方面。

第三,在可解释性的背景下,对本章所涵盖的目标和技术的更深入的理解对于法规遵从性也是有用的。我们将在第二十三章中讨论这一点。

因此,在这一章中,我们将详细阐述这两种文化如何在实践中进行建模——这主要与数据科学过程的机器学习步骤有关,在某种程度上,也与数据准备步骤有关。在实践中,主要的区别就在于这两个步骤。

我们将从创建数据科学模型的目标的简要、稍微正式的概述开始。然后,我们将总结各种 ML 技术如何实现这些目标,以及每种文化认为相关的目标。这有效地提供了一个框架来确定两种文化通常偏好的技术。最后,我们将对表 3-1 进行扩展,以包括两种文化在实践中看到的差异。

请注意,在本章的其余部分,我们会提到第十六章中涉及的各种 ML 技术。您可能会发现,在需要时回顾该章会有助于加深您对某项技术或其某些细节的理解。

建模的目标

回想一下第三章,模型的主要目的是

  • 通过估计潜在的真相来解释观察结果:这可以进一步分解为两个粒度目标,简单表示归因。

  • 预测未来观测值:这可以进一步分解为两个粒度目标,预测的可解释性预测的准确性。

在这一节中,我们将通过几个例子来描述这四个目标,这些例子展示了各种技术是如何帮助实现每一个目标的。

估计真相:简单的表现

真理总是在简单中被发现,而不是在事物的多样性和混乱中。

——艾萨克·牛顿爵士

我们倾向于更喜欢——并且相信——更简单的想法和表述,因为它们更接近事实。对物理学中的“统一场论”或“大统一理论”的追求是这种永恒的人类渴望简化的旗舰例子——对自然界中不同种类的物理力有不同的理论表明了“多样性”和“混乱”,并乞求、要求简化。

E = mc 2F = ma 这样的单个方程是最简单的表示,它的优雅给我们留下深刻印象。线性/逻辑回归等技术旨在实现这种简单性——为了实现这种简单性,数据科学家通常甚至愿意牺牲预测的准确性。类似地,多项式方程,以及更一般地,任何表示曲线(或 n 维中的曲面)的方程,都是优雅、简单的表示。

让我们来看看其他一些表现:

  • 线性 SVM 也相当简单,就简单性而言,非常接近线性回归,其中真实值由分隔观察值的单线 2 表示。另一方面,非线性 SVM 是一种更复杂的表示。

  • 决策树是一种简单但有点混乱的表示;当我们查看需要遍历的各种节点时,会有一种“多样性”的感觉。–我们不会像看一个等式那样获得优雅简洁的效果。

  • 随机森林等。,是相当复杂的——我们在表现中感觉到多重性和混乱,这是由树的随机性和大量造成的。

  • 深度神经网络是最复杂的表现形式——数百个神经元和数千个权重向试图理解这一切的人类大脑传达了一种强烈的多样性和混乱感。虽然可以说,从数学上来说,神经网络只是一组方程, 3 它的层数越多,看起来就越复杂。当我们添加具有更复杂表示的层时,如 CNN、RNN 等,这种复杂性进一步增加。

估计真相:归因

当观察值由几个属性/特征的值组成时,“真实”的一个基本方面是理解那些属性中哪些是最重要的,也就是说,哪些属性在确定目标变量的值时是最重要的。我们将这一目标称为归因。 4 回想一下,我们在表 3-2 中看到过病因学;归因是确定病因的技术基础。

让我们回顾一下我们在第十六章中看到的几个归因示例:

  • 线性回归:如果一个特性的系数/权重在线性方程中为零,这显然意味着目标值不受该特性值的影响。换句话说,这个特性的值对于确定目标变量的值没有用。我们还可以从等式中看到,如果所有特征具有相同的值范围(例如,使用最小-最大缩放),则具有较高权重 6 的特征可以被认为对目标变量的值具有较大的影响,因此更重要。

  • 决策树:回想一下,使用子节点在一个类别中具有较高优势的可用特征集合中的那个特征来分割每个节点,也就是说,从子节点具有最低熵的集合中挑选那个特征。这意味着决策树能够比较特征,并确定哪个特征更好或更重要。这种能力可以提供一种机制,根据特性的重要性对其进行排序。

  • 随机森林:我们刚刚讨论了一种机制,它可以帮助我们确定决策树中特征的重要性。我们可以考虑随机森林的所有决策树中每个特征的重要性,以得出随机森林中特征的整体重要性。

  • 深度学习:对于如何衡量功能的相对重要性,没有直观的概念。最近的发展,特别是在名为“可解释的人工智能”的领域,可以帮助确定重要的特征——但这些方法本身可能相当复杂,而且不太直观。如果它变得极其复杂和不直观,那么它通常就不像是“真理”

请注意,在所有这些情况下,基于用于创建模型的 ML 算法,数据科学家采用一些概念来确定特性的重要性。然后他们得出归因的结论,也就是说,宣布一些特征是“重要的”正如我们所看到的,这只是一个相对的重要性概念——它可能因此感觉像是一个有点武断的归因基础,除非归因机制既直观又严谨。实现这种直觉和严谨可能是一项艰巨的任务,但幸运的是,正如我们在第三章中看到的,许多现实世界的业务问题并不需要病因和归因。

预测:可解释性

这个目标指的是我们人类需要能够理解和解释模型是如何为一个新的观察产生一个特定的预测。换句话说,作为人类,我们需要能够解释一个模型从输入观察值达到目标预测所采取的每一步。让我们看几个例子:

  • 方程的解释,如线性回归模型的解释,是非常简单的。

  • 在决策树的情况下,我们可以查看该树,并基于某个特征的值来理解新的观察结果在每个节点处将遵循哪个分支,以便进行预测。因此,这种模型给出的预测具有高度的可解释性。

  • 在随机森林的情况下,要详细查看大量的树木以了解它们如何做出预测并相应地解释最终预测是极其困难的。因此,即使随机森林可以给出哪些特征是重要的一些概念(即,支持属性),它们也不是可解释的。

  • 我们在第十六章中看到,神经网络并没有给我们一个简单的描述它是如何进行预测的画面——这样的模型是最难解释的模型之一。

预测:准确性

这仅仅是指我们希望我们的模型能够准确预测未来未知观测的目标变量的值。请注意,这个目标不包括我们作为人类是否能够理解(解释)为什么模型预测某事的任何概念——它只谈到正确预测的目标。在写这篇文章的时候,就准确预测的能力而言

  • 深度学习技术似乎优于其他技术,尤其是对于与感知相关的问题,如 NLP、计算机视觉等。

  • 随机森林和梯度提升树 7 一般来说似乎是所有其他类型问题的首选技术。我们在第十六章中看到了这些算法如何改进他们的预测。

看了四个目标和一些技术如何实现这些目标的例子,我们可以看一个更正式的“分级”矩阵来捕捉所有技术的这些概念——这个矩阵也有助于确定每个文化通常更喜欢哪些技术。

分级 ML 技术

在上一节中,我们讨论了如何将建模的每个目的分成两个目标,从而得到建模的四个目标。我们还讨论了一些例子,说明各种技术如何与这些目标相冲突。我们在图 20-1 中给出的等级 8 概括了这一点——该图还显示了两种文化在实现这些目标的方式上有何不同,以及这如何决定了他们通常更喜欢的技术。我们在第三章中已经看到,修道士文化关注这两个目的,所以所有四个目标都与修道士同等相关,如表中所示。西部文化只关注于预测价值的目的,所以表格底部的目标与牛仔更相关。因此,由于向左的 ML 技术在所有四个目标上都有很高的分数,这些技术在修道文化中更受欢迎。类似地,向右的技术对底层目标有很高的分数,因此在西部文化中更受欢迎。

img/504530_1_En_20_Fig1_HTML.png

图 20-1

一些 ML 技术为建模的每个目标分级,以及这些等级如何影响两种文化的首选技术

以下是几个案例背后的(有些主观的)推理示例:

  • 随机森林在预测的准确性方面获得了较高的等级(A+),但在属性方面获得了稍低的等级(A)。这是因为虽然算法确实识别了重要的特征,但可能存在这些特征不可靠的情况——参见 Efron (2020)中的一个例子。

  • 深度学习在预测的准确性上得了高分(A+),在归因上得了低分(C)。对于预测的可解释性,它得到了一个有点模糊的 B/C 等级,因为

    • 可解释性因神经网络的复杂性而异。

    • 在解释/解释深度学习预测的这一领域正在取得进展,例如,CNN 的类激活图等。这些解释可能不够清晰明了,不足以获得 A,但它们足够有用,偶尔可以获得 b。

虽然我们在本书中只提到了一些技术,但是图 20-1 的结构和框架可以用来对任何 ML 技术进行分级,并确定它在多大程度上适合特定的目标,从而适合特定的文化(并因此适合手头的业务问题)。

ADVANCED NOTE: OTHER TECHNIQUES

以下是一些我们在书中其他地方没有涉及到的经典修道技巧:

  • 统计检验:t 检验、卡方检验等统计检验。僧侣们在寻找潜在真理的旅途中经常使用。例如,可以使用统计测试来确定哪些特征是重要的。

  • 赤池信息准则和贝叶斯信息准则:通常被称为 AIC 和 BIC,用于在一组候选模型中选择最佳模型。为此,他们考虑了模型对训练数据的性能和模型的复杂性。具有更多参数的复杂模型会受到惩罚。

我们将在下一节中引用这些技术。

文化差异

表 20-1 总结了两种文化之间的所有差异——它详细阐述了表 3-1 中的几个要点,并根据我们在本章前面的报道增加了几个新的要点。

表 20-1

修道院与狂野西部:最终版

|

因素

|

修道文化

|

西部文化

| | --- | --- | --- | | 心态 | 找到导致观察的潜在的、永恒的真理(自然) | 现在就找到有效的方法。可以经常更新。经验主义是唯一永恒的真理 | | 目的 | 对观察结果背后的真相进行评估,从而实现预测和更深入、准确的因果洞察 | 预测准确性是首要目标因果往往是一种损失。因果洞察力要么是不相关的,不太准确的,要么只是有好处的 | | 估价 | 我的估计有多接近事实? | 我得到的预测是否如我所愿的那样准确? | | 评估——评估什么 | 估计的“真相”包括归因以及模型的可解释的和准确的预测。此外,具有更简单表示的模型是优选的 | 主要关注模型预测的准确性。预测和归因的可解释性有时是好的 | | 领域专业知识 | 对领域的理解极大地影响了特性的制作;这是因为属性是一个主要目标,所以被很好理解的特性是首选 | 当使用自动化特征提取的技术时,较少的领域专业知识通常就足够了;例如,使用 CNN,从图像中自动提取相关特征 | | 有多少特征用于建模 | 尽量避免“维数灾难”找到包含大部分信息的几个要素-这降低了模型的复杂性并有助于归因 | 任何附加信息都有助于提高预测的准确性,因此非常有用。深度学习、梯度提升树等技术。,甚至可以与数百个功能一起使用 | | ML 技术 | 优先选择图 20-1 中所有目标的高分 | 首选图 20-1 中“预测准确度”为 A+的 | | 属性 | 统计测试,ML 模型确定的重要特征 | ML 模型确定的重要特征 | | 模型性能评估 | 统计测试,AIC/BIC,交叉验证9 | 交叉验证 | | 型号升级频率 | 创建模型可能需要更长时间。但是一旦创建,因为它代表了一个长期的真理,升级就不那么频繁了 | 随着新数据的获得,模型通常被快速创建并通过快速迭代进行升级 |

UNSUPERVISED LEARNING AND THE TWO CULTURES

我们的报道主要集中在文化差异相当显著的监督学习技术上。但是这种差异偶尔可以在一些无监督的技术中看到,例如异常检测技术。

结论

在本章中,我们详细阐述了在第三章中首次介绍的两种数据科学文化之间的差异。

当谈到从数据中创建模型时,Leo Breiman 首先强调了两种文化的存在。他的原始论文、D.R. Cox 和 Brad Efron 的评论以及 Breiman 的回应都在 Breiman (2001)中。用我们的术语来说,我们会说 Breiman 显然是第一个离开修道院,冒险进入西部荒野的僧侣。在那里从事数据科学多年后,包括对 random forest 等技术的贡献,他不仅带着一套新技术,还带着一个新的视角回到了修道院——前面提到的文章详细描述了 Breiman 的旅程以及他回到修道院时受到几名僧侣的欢迎。

我们对这两种文化的描述很大程度上是基于我们的个人经历。这两种文化在过去被赋予了不同的名称——根据记录,我们的“修道士”文化有点类似于 Breiman 的“数据建模”文化,我们的“狂野西部”文化有点类似于 Breiman 的“算法建模”文化。然而,值得注意的是,自 Breiman 的原始论文以来,这两种文化如何实践数据科学的含义和细节已经发生了变化,特别是在大数据时代(大约从 2006 年至 2010 年开始)和深度学习革命(大约从 2013 年开始)。

Efron (2020)对这两种文化进行了更近期的调查。这篇论文,以及前面提到的 Breiman 的讨论,帮助我们对这两种文化的观察有了一些结构。Efron (2020)也提供了我们所采用的非常有用的术语“归因”。

在第二十二章中,我们将看到本章中涵盖的各种因素在构建数据科学团队时是如何有用的。

在第二十三章中,我们将看到文化的选择如何受到数据科学项目类型的影响。我们还将在可解释性的背景下重新审视建模和数字 20-1 的目标。

第三部分摘要

在第 12 到 18 章中,我们介绍了数据科学过程中使用的各种技巧和技术。在第十九章中,我们看到了它们如何在一个参考架构中融合在一起,以支持数据科学团队的运营。最后,在这一章中,我们讨论了两种数据科学文化在实践数据科学的方式上如何不同的更多细节,特别是关于他们对 ML 技术的选择。

到目前为止,我们已经讨论了在构建数据科学实践中需要考虑的业务和技术方面。在接下来的最后一部分,我们将着眼于建立数据科学团队和执行数据科学项目的实践方面。

参考

布雷曼,利奥。"统计建模:两种文化."统计科学 2001:199–231。

埃夫隆,布拉德利。"预测、估计和归因."美国统计协会杂志2020:636–655。

Footnotes 1

来源于牛顿项目“关于启示的无标题论文(第 1.1 节)”<www.newtonproject.ox.ac.uk/view/texts/normalized/THEM00135

  2

或者更一般地,超平面。

  3

也就是将每个神经元的输入映射到输出的方程。

  4

这似乎还不是行业中的标准术语,但我们发现它相当合适。

  5

参见第十四章。

  6

重量的绝对值更精确。

  7

尤其是 XGBoost。

  8

不同的数据科学家可能会给出稍微不同的分数。

  9

包含在第十六章中。

 

二十一、技能框架

回想一下第一章中的概念,即*使用软件将科学方法应用于数据被称为数据科学。*因此,数据科学从根本上说是处于数据分析和软件工程尖端的跨学科活动。作为团队领导,您需要定期确定您的团队所必需的角色,并确保拥有数据分析和软件工程技能的合适团队成员能够胜任该角色。

图 21-1 显示了数据科学团队中常见的各种角色,以及这些角色所需的各类技能的程度。

img/504530_1_En_21_Fig1_HTML.png

图 21-1

技能框架。角色被描述为三个方面所需技能的组合:数据分析、软件工程和领域专业知识

如图所示,除了数据分析和软件工程这两个维度,还有第三个维度——领域专业知识,由气泡的大小表示。不同的角色在不同程度上需要这些技能的组合。在本章的其余部分,我们将涵盖技能的三个方面,然后是各种角色及其职责。

技能的三个维度

数据科学项目所需的三种技能是数据分析、软件工程、领域专业知识。让我们看一看每一个问题,以理解它们所包含的内容。

数据分析技能

数据分析简单来说就是从数据中获取洞察的能力。这可以从简单的报告(例如,销售趋势)到统计技术(例如,相关性分析以找出哪些产品通常一起销售)和机器学习算法。

从概念上讲,进入数据分析的思维过程并不一定需要软件技能——事实上,今天数据科学家使用的许多技术在 20 世纪上半叶就已经很好地建立起来了,而且早于计算机。虽然软件工具有助于更快、更准确地进行数据分析,使用这些工具并不一定需要软件工程技能——例如,几十年来,Microsoft Excel 等工具一直是数据分析的默认选择,甚至是金融领域的 quants 所做的高级分析。

软件工程技能

软件工程本身当然是一门庞大的学科。在数据科学的特定上下文中,需要软件工程技能来对数据科学过程的各个步骤进行编码。一些相关方面包括

  • 分析算法的设计和有效实现:有几个用于数据科学的开源库。但是偶尔需要实现一个适合您需求的算法或者修改一个开源算法。

  • 数据准备:整理、清理和准备大规模数据集,包括数据管道。

  • GPU 和深度学习:最先进的深度学习算法和神经网络需要 GPU 集群和微调的数据流范式来进行高效的模型训练。这种设置中的几个性能调整方面需要软件工程技能。

  • 生产 ML 模型:将模型部署到生产中需要软件工程技能来将模型大规模集成到生产技术栈中。

对于有效的端到端数据科学解决方案,这些软件工程技能是不可或缺的。

领域专业知识

深入了解领域以及数据与领域的关系,对于制定正确的问题陈述、确定解决问题的数据科学方法以及最终评估解决方案的正确性至关重要。几个数据科学问题都是面向自动完成由金融、零售、医疗保健等领域的专家执行的日常工作。–在这些情况下,这些人的领域专业知识对数据科学团队的成功至关重要。

有关领域专业知识需求如何依赖于数据科学文化的讨论,请参考第二十章。

因此,一个有效的数据科学团队需要这三种技能:数据分析、软件工程和领域专业知识。现在,我们将了解数据科学团队中的典型角色,以及这些角色如何需要结合这三个方面的技能。

数据科学团队中的角色

参考图 21-1 ,图中显示了各种角色以及每个角色通常需要的三个方面的技能水平。我们现在将介绍数据科学团队中的每个角色及其职责。

需要注意的是,这些是“角色”而不是个人——一个人可能会扮演其中的几个角色,尤其是在团队的孵化阶段。我们将在下一章中围绕团队的建立和结构化来讨论这些方面。

公民数据科学家

公民数据科学家是公司中最重要的领域专家。他们知道业务流程以及数据如何映射到现实世界。

鉴于他们的领域知识,公民数据科学家通常会确定数据科学项目的范围,并影响公司的数据战略 1 。它们还使首席数据科学家和其他人能够更加深入地理解该领域。

他们与首席数据科学家密切合作,制定问题陈述,并积极参与数据科学流程迭代,特别是从领域角度设计实验和评估模型性能。

虽然拥有该领域的专业知识,但他们通常不具备高度的数据分析或软件工程技能。因此,他们依赖于先进的工具 2 ,这使得像他们这样的人更容易使用他们的领域知识创建初始基线模型。然后,数据科学家在数据科学流程的进一步迭代中以此基线为基础进行构建。

数据分析师

这是大多数组织中的传统角色,您可能对此很熟悉。数据分析师是该领域的专家。他们通常使用 BI 工具和 SQL 等查询语言,但他们的编程技能可能有限。他们可以使用各种可视化和统计技术从数据中提取见解。

如果你的公司已经有一个数据分析师,让他们参与到咨询中来会很好。鉴于他们在产品和业务流程领域的专业知识,他们通常最适合评估生产系统中的模型性能,以及将数据科学模型纳入组织运营的业务影响。

数据科学技术员

这个术语是我们为那些中等编程水平并且了解 scikit-learn、Keras、Matplotlib 等库的人创造的。,用于数据科学过程。因此,他们可以快速执行实验并评估模型性能。另一方面,他们还没有获得独立设计新实验的科学专业知识——从这个意义上说,他们可以被视为见习数据科学家。

在大型数据科学团队中,数据科学技术人员对于快速准确地执行实验至关重要;这使得数据科学家能够专注于实验设计和创新新技术。

ML 操作

ML Ops 既需要了解数据科学团队创建的模型,也需要了解工程/IT 团队创建和维护的生产系统。这是一个利基角色,主要面向数据科学过程的推理步骤。

ML Ops 负责生产系统中模型的部署、维护和监控。

通常,ML Ops 成员需要熟悉第十七章中提到的技术和工具。

数据工程师

数据工程师执行数据科学过程的数据工程步骤。因此,他们负责存储、跟踪、转换、评估和维护供整个数据科学团队使用的数据资产。数据工程师通常履行以下职责:

  • 执行数据科学流程的数据捕获步骤中的大部分活动。这包括从领域专家和数据科学家确定的数据源中获取数据,并方便对数据的访问。

  • 自动化可重复的数据准备和数据可视化步骤,这些步骤通过数据科学流程的多次迭代而具体化。

  • 确保机器学习步骤的数据无缝可用,可能包括使用大数据的分布式学习。

  • 在小团队中扮演 ML Ops 的角色。

  • 维护任何 BI 或 PAML 3 工具以及其余的数据基础设施。

数据架构师

数据架构师负责决定符合预算限制的整个数据和计算基础架构。这包括选择最适合数据科学团队的工具。对于跨学科团队,数据架构师需要确保架构能够在数据科学流程的各个步骤中实现所有角色之间的顺畅协作。

我们在第十九章中看到了数据科学团队的参考架构。数据架构师负责根据您组织的特定需求和约束来定制该参考体系结构。

ML 工程师

在过去的几年里,人工智能服务在云和 AutoML 上出现了巨大的增长。我们在第十八章中讨论了这些。正如我们在那一章中看到的,工程师可以使用这样的服务或库来创建模型,例如,预测商店的库存需求。为此,他们需要了解领域和数据,但不需要知道数据科学过程的细节,ML 技术等。在模型的创建过程中。

这就产生了一个相对较新的 ML 工程师角色——一个对领域有很好理解的工程师,他可以使用这些服务和库,并评估生成的模型以确保它们满足预期的目标。

与数据科学技术人员角色相比,ML 工程师需要的数据分析技能较少,因为他们不需要完全了解数据科学流程。但是 ML 工程师需要有更强的工程技能来有效地使用 AutoML 库和云服务。

软件工程师可以很容易地升级为 ML 工程师,只需接受最少的 ML 基础培训,如模型性能评估,并结合 AI/AutoML 服务和库的知识。

如果您正在遵循狂野西部的方法,或者需要在大量投资雇佣数据科学家之前对现有云服务进行快速 POC,那么用 ML 工程师来引导团队可能是个好主意。

数据科学家

正如我们从图 21-1 中看到的,数据科学家在所有三个方面都有很好的技能组合。通常,数据科学家擅长应用适合其工作领域的科学方法。相应地,他们与领域专家密切合作,以获得对业务和领域的深刻理解。

在一个小团队中,他们可能与首席数据科学家合作,帮助设计实验并执行它们。在大型团队中,数据科学家可能会专注于与首席数据科学家一起设计实验,并将执行任务委托给数据科学技术人员和 ML 工程师。他们还与数据工程师合作,定义数据管道的要求。随着数据准备和数据可视化步骤变得越来越可重复,数据科学家与数据工程师一起自动执行这些步骤,以实现快速迭代。

数据科学家通常对算法有深刻的理解——因此他们可以在必要时修改现有的开源实现。一些数据科学家也可以根据需要创建新的算法和技术。

首席数据科学家

首席数据科学家最终负责整个数据科学团队。他们在所有三个方面都有混合技能,这使得他们能够顺利地在数据分析、软件工程和领域/业务方面移动。

他们是制定要解决的问题、设置所需的数据和实验策略、定义路线图以及在其他角色的支持下执行路线图的主要负责人。我们将在下一章更详细地讨论首席数据科学家的角色。

技能上的偏差

图 21-1 中对一些角色的描述代表了我们的理想主义观点,在实际场景中偏离这些观点并不少见;特别是,这里描述的理想数据科学家和首席数据科学家通常被认为是独角兽。在许多团队中,其他角色通常会补充和填补这些主要角色技能中的任何不足,例如,如果(首席)数据科学家的软件工程技能较少,那么其他工程师(如数据架构师、数据工程师或 ML 工程师)会填补这一不足。

文化的选择(修道士或狂野西部)也可能会影响数据科学家的主要技能(数据分析或软件工程)。例如,一个僧侣的软件工程技能可能不如这里描述的理想。

结论

在这一章中,我们讨论了一个技能框架,以解释组成跨学科数据科学团队的各种角色。团队中需要哪些角色取决于数据科学文化和业务的具体情况,我们在每个角色的描述中涵盖了一些方面。

在下一章,我们将着眼于建立和组织由这些角色组成的数据科学团队。

Footnotes 1

数据战略是指围绕捕获和利用数据的总体愿景,旨在实现业务目标。

  2

例如,多模态 PAML 工具,如 SAS VDM ml–参见第十八章。

  3

参见第十八章。