TensorFlow机器学习(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.2 数据表示和特征

数据是机器学习的一等公民。计算机只不过是复杂的计算器,所以我们输入给机器学习系统的数据必须是数学对象,如标量、向量、矩阵和图。

所有表现形式的基本主题都是特征,即对象的可观察属性:

  • 向量具有扁平和简单的结构,是大多数现实机器学习应用程序中数据的典型表示方式。标量是向量中的单个元素。向量有两个属性:一个自然数表示的向量维度和一个类型(如实数、整数等)。整数二维向量的例子是(1,2)和(-6,0)。类似地,标量可以是1或者字符a。三维实数向量的例子是(1.1,2.0,3.9)和(∏,∏/2,∏/3)。你会有这样的想法:一组类型相同的数字。在使用机器学习的程序中,向量测量了数据的属性,如颜色、密度、响度或相似度——任何你可以用一系列数字描述的东西,每个数字代表被测量的东西。
  • 此外,向量的向量是一个矩阵。如果每个特征向量描述了数据集中一个对象的特征,矩阵则描述所有的对象。外部向量中的每一项都是一个节点,它是一个对象的特征列表。
  • 另一方面,更有表现力。图是一个对象(节点)的集合,可以用来连接,以表示一个网络。图形结构可以表示对象之间的关系,例如,朋友圈或地铁系统的导航路线中对象间的关系。因此,它们在机器学习应用程序中更难处理。在本书中,我们的输入数据很少涉及图结构。

特征向量是对现实世界数据的实用性简化,现实世界的数据可能过于复杂而难以处理。使用特征向量代替关注数据项的每一个小细节是一种实用的简化。例如,现实世界中的一辆汽车远不止是用来描述它的文本。汽车推销员是想把车卖给你,而不是口头或书面的无形语言。这些词是抽象的概念,类似于特征向量对数据的总结。

下面的场景进一步解释了这个概念。当你在市场上购买新车时,密切关注不同品牌和型号的每一个小细节是必不可少的。毕竟,如果你要花几千美元,那么你应该做这个工作。你可能会记录下每辆车的特点,并比较这些特点。这里被列出的特征列表就是特征向量。

在购买汽车时,你可能会发现关注里程数要比关注那些与你的兴趣不大相干的事情(如重量)更实惠。要跟踪的特征的数量也必须是合适的——不能太少,否则就会丢失你所关心的信息,也不能太多,否则跟踪起来会很麻烦和费时。选择测量项的数量以及选择关注哪些测量项这个浩大工作被称为特征工程特征选择。随着你选择的特征的不同,系统的性能可能会有很大的波动。选择跟踪正确的特征可以弥补学习算法的不足。

例如,当训练一个模型来检测图片中的汽车时,如果你首先将图片转换为灰度图,你将获得巨大的性能和速度的提升。通过在预处理数据时加入一些自己的预判,你最终帮助了算法,因为它在检测车辆时并不需要学习不重要的颜色。算法可以专注于识别形状和纹理,这将比尝试处理颜色学习得更快。

ML中的一般经验法则是,数据越多结果越好。但却并不一定拥有更多的特征。也许与我们的直觉相反,如果你跟踪的特征数量过多,性能可能会受到影响。随着特征向量维数的增加,用有代表性的样本填充整个样本空间需要指数级增加的数据。因此,如图1.6所示,特征工程是ML中最重要的问题之一。

维度诅咒

为了准确地模拟现实世界的数据,我们显然需要不止一两个数据样本。但是到底需要多少取决于很多因素,包括特征向量的维数。添加过多的特征会导致描述样本空间所需的数据量呈指数级增长。这就是为什么我们不能设计一个100万维的特征向量来穷尽所有可能的因素,然后期望算法学习一个模型。这种现象被称为维度诅咒。

你可能不会马上意识到这一点,但当你决定要关注哪些特征时,就会发生一些重要的事情。几个世纪以来,哲学家们一直在思考身份的意义,你可能不会立即意识到,通过选择特定的特征,你已经得到了身份的定义。

图1.6 特征工程是为任务选择相关特征的过程

想象一下,编写一个机器学习系统来检测图像中的人脸。假设脸的一个必要特征就是有两只眼睛。毫无疑问,脸现在被定义为有眼睛的东西。你意识到这个定义会给你带来多大的麻烦吗?如果一个人的照片显示他在眨眼,你的探测器就检测不到一张脸,因为它找不到两只眼睛。当一个人眨眼时,该算法将无法检测到人脸。人脸的定义一开始就不准确,从较差的检测结果可以明显看出。

如今,特别是随着智能汽车和自动驾驶无人机等技术的飞速发展,ML中身份标识的偏差或简单的误差,正成为一个大问题,因为这些能力如果弄糟了,可能会导致人类生命的损失。设想一辆从未见过坐轮椅的人的智能汽车,因为训练数据从未包含这些例子,因此当轮椅进入人行横道时,智能汽车不会停车。如果为你递送包裹的公司的无人机训练数据从未看到过女性戴帽子,而所有其他训练样本中看起来像帽子的东西都是可以降落的地方,那又会怎么样?这顶帽子——更重要的是,这个人——可能正处于严重的危险之中!

对象的标识被分解为组成它的特征。如果你跟踪的一辆车的特征与另一辆车的相应特征相匹配,那么从你的角度来看,它们可能是无法区分的。你需要在系统中添加新的特征来区分汽车;否则,你会认为它们是同一件物品(就像无人机降落在可怜的女士的帽子上)。当手工确定特征时,你必须非常小心,不要陷入这种哲学上的身份困境。

练习1.3

假设你正在教一个机器人如何叠衣服。感知系统看到一件衬衫摆在桌子上,如下图所示。你想用特征向量来表示衬衫,这样你就可以将它与不同的衣服进行比较。决定哪些特征是最有用的。(提示:线上零售商会用什么词来描述他们的服装?)

一个机器人正在试着叠一件衬衫。衬衫应该取什么特征?

答案

折叠衣服时,宽度、高度、x对称度、y对称度、平整度是好的观察特征。颜色、布料纹理和材质都是无关紧要的。

练习1.4

现在,你不再探测衣服,而是雄心勃勃地决定探测任意物体,下图显示了一些示例。能轻易区分物体的显著特征是什么?

这里有三个物体的图片:一盏灯、一条裤子和一只狗。哪些特征可以很好地比较和区分它们?

答案

观察亮度和反射可以帮助区分灯和其他两个物体。裤子的形状通常遵循一个可预测的模板,所以形状是另一个需要跟踪的好特征。最后,纹理可能是区分狗的图片与其他两个类的显著特征。

特征工程是令人耳目一新的哲学追求。对于那些喜欢以发人深省的方式探索自我意义的人来说,我觉得你完全可以思考特征选择,因为这仍然是一个开放的问题。幸运的是,对于其他人来说,为了平息广泛的争论,最近的技术发展已经使自动特征选择成为可能。在第7章中你可以自己尝试这个过程。

现在考虑这样一个问题:医生看着一组N 244×244(宽×高)的鳞状细胞图像(如图1.7所示),试图确定它们是否显示存在癌症。一些图像明确显示是癌症,另外一些没有。医生可能有一些历史的病人图像,他可以检查并随着时间不断学习,这样当他看到新的图像时,他就展示出了自己判断癌症的模型。

图1.7 机器学习的过程。从左到右,医生试图通过细胞活组织检查的图像确定病人是否患有癌症

特征向量用于学习和推理

如下图所示,学习和推理之间的相互作用构成了一幅机器学习的完整画面。第一步是用特征向量表示现实世界的数据。例如,我们可以用对应像素强度的数值向量来表示图像。(我们将在以后的章节中更详细地探讨如何表示图像。)我们可以在每个特征向量的旁边显示学习算法的ground-truth标签(如鸟或狗)。有了足够的数据,该算法就会学习得到一个模型。我们可以把这个模型应用在其他现实世界的数据上,对未知标签进行预测。

特征向量是现实世界数据的一种表示,用于机器学习的学习和推理组件。算法的输入不是直接的现实世界图像,而是其特征向量。

特征向量是现实世界数据的表示,用于机器学习的学习和推理。算法的输入不是直接的现实世界的图像,而是它的特征向量。

在机器学习中,我们试图模仿这个模型的构建过程。首先,我们从历史患者数据中提取N幅244×244的鳞状癌细胞图像,并将图像与相关标签(癌症或无癌症)对应起来,为此问题做好准备。我们称这个阶段为机器学习的数据清洗和准备阶段。下面是识别重要特征的过程。特征包括图像像素强度,或每个xyc或(244, 244, 3)的值,它们是图像的高度、宽度和三通道颜色红/绿/蓝(RGB)。模型在这些特征值和图像的标签之间创建映射:是否有癌症。