1.2 有监督学习
有监督学习算法的工作原理是从知识库(Knowledge Base,KB)中提取知识,KB包含我们需要学习的概念的标注实例的数据集。
有监督学习算法是两阶段算法。给定一个有监督学习问题,比如说一个分类问题,算法会在第一阶段尝试解决问题,该阶段称为训练阶段;在第二阶段对其性能进行评估,该阶段称为测试阶段。
如1.1节定义的三个数据集分割(训练、验证和测试)、两阶段算法,这应发出警报:为什么会有一个两阶段算法和三个数据集分割?
因为第一阶段(应该在完善的流水线中)使用两个数据集。我们可以将这些阶段定义为如下。
·训练和验证:该算法对数据集进行分析以生成一个理论,该理论对它所训练的数据及它从未见过的项目均有效。
因此,该算法试图发现和概括一个概念,该概念将具有相同标签的示例与示例本身联系起来。
直观地说,如果你有一个标注了猫和狗的数据集,你希望你的算法能够区分它们,同时能够对带有相同标签的示例可能具有的变化(例如颜色、位置、背景等各不相同的猫)具有鲁棒性。
在每个训练阶段结束时,应使用验证集上的度量指标进行性能评估,以选择在验证集上达到最佳性能的模型,并调整算法超参数以获得最佳结果。
·测试:将所学的理论应用于在训练和验证阶段从未见过的标注示例。这使我们能够测试算法如何在从未用于训练或选择模型超参数的数据上执行,这是一个真实的场景。
有监督学习算法是一个广泛的范畴,它们都有共享标记数据集的需求。不要被标签的概念所迷惑:标签不一定是一个离散值(猫、狗、房子、马),事实上,它也可以是一个连续值。重要的是数据集中存在关联(例如,数值)。更正式地讲,该示例是预测变量,而数值是因变量、结果或目标变量。
根据期望结果的类型,有监督学习算法可以分为两类如图1-5所示。
图1-5 有监督学习–目标变量定义要解决的问题
·分类:标签是离散的,目的是对示例进行分类并预测标签。分类算法的目的是了解分类边界。这些边界是将示例所在的空间划分为多个区域的函数。
·回归:目标变量是连续的,目的是通过示例学习回归连续值。
在接下来的章节中,我们将会看到一个回归问题,一个脸部周围的边界框角坐标的回归。人脸可以在输入图像中的任何位置,并且该算法已学会对边界框的八个坐标进行回归。
参数和非参数算法用于解决分类和回归问题。最常见的非参数算法是k-NN算法。它是用于介绍距离和相似性的基本概念。这些概念是每个ML应用程序的基础。下面我们介绍k-NN算法。
1.2.1 距离和相似性——k-NN算法
k-NN算法的目标是找到与给定元素相似的元素,使用相似度对它们进行排序,然后返回找到的前k个相似元素(按相似度排序的前k个元素)。
为此,需要度量将数值分数分配给两个点的函数所需的相似度:分数越高,元素的相似度越高。
由于我们将数据集建模为n维空间中的一组点,因此我们可以使用任何Lp范数或任何其他得分函数(即使它不是度量标准)来度量两点之间的距离,并考虑紧密相接的相似元素和相距很远的相异元素。范数/距离函数的选择是完全任意的,它应该取决于n维空间的拓扑结构(这就是为什么我们通常会降低输入数据的维度,并且尝试在低维空间中度量距离,这样维度诅咒给我们带来的麻烦会更少)。
因此,如果要度量维度为D的数据集中元素的相似度,给定一个点p,则必须度量并收集从p到其他每个点q的距离:
前面的示例显示了在连接p和q的距离向量上计算通用p范数的一般情况。实际上,令p=1表示曼哈顿距离,令p=2表示欧氏距离。无论选择什么距离,该算法都是通过计算距离函数并按接近度排序来衡量相似度的。
当k-NN应用于分类问题时,通过其k个相邻点的投票对点p进行分类,其投票结果就是其类别。因此,以特定类别分类的对象取决于它周围的元素的类别。
将k-NN应用于回归问题时,算法的输出为k-NN的平均值。
k-NN只是近年来发展起来的非参数模型的一种,但是参数模型通常表现出更好的性能。我们将在下面介绍。
1.2.2 参数模型
在本书中我们描述的ML模型均为参数模型,这意味着可以使用一个函数描述一个模型,该函数的输入输出都是已知的(这一点在有监督学习的情况下是显而易见的),目的是更改模型参数,以便在给定特定输入的情况下,使模型产生预期的输出。
给定一个输入样本x=(x0,x1,…,xn–1)和期望的结果y,ML模型是参数函数fθ,其中θ是在训练过程中要更改的模型参数集,以便拟合数据(或者换句话说,生成一个假设)。
我们可以用来阐明模型参数概念的最直观、最直接的示例是线性回归。
线性回归试图通过将一个线性方程拟合到观测数据,从而对两个变量之间的关系建模。线性回归模型的方程式为:
这里,x是自变量,y是因变量,参数m是比例因子或斜率,b是截距。
因此,在训练阶段必须更改的模型参数为θ={m,b}。
我们在讨论训练集中的一个例子,但是这条线应该是最适合训练集中所有点的一条线。当然,我们对数据集做了一个很强的假设,由于模型的性质,我们使用的模型是一条线。因此,在尝试将线性模型拟合到数据之前,我们应该首先确定因变量和自变量之间是否存在线性关系(通常使用散点图是有用的)。
拟合回归线方程最常用的方法是最小二乘法。该方法通过最小化从每个数据点到该线的垂直偏差的平方和来计算观测数据的最佳拟合线(如果点正好位于拟合线上,则其垂直偏差为0)。正如我们将在第2章中看到的那样,观测数据与预测数据之间的这种关系称为损失函数。
因此,有监督学习算法的目标是迭代数据并迭代调整参数θ,使fθ能够正确地对观察到的现象进行建模。
然而,当使用更复杂的模型时(如神经网络中有大量可调整的参数),调整参数可能会导致不良结果。
如果我们的模型仅由两个参数组成,并且正在尝试对线性现象进行建模,那么就没有问题。但是,如果我们尝试对Iris数据集进行分类,则无法使用简单的线性模型,因为很容易看出,我们要学习的划分不同类别的函数并不是一条简单的直线。
在这种情况下,我们可以使用具有大量可训练参数的模型,这些模型可以调整其变量以使其几乎完全适合数据集。这听起来似乎很完美,但在实际中这是不可取的。事实上,该模型调整参数使其仅拟合了训练数据,几乎记住了数据集,因此失去了全部泛化能力。
这种现象被称为过拟合,当我们使用的模型过于复杂而无法为简单事件建模时,就会发生这种现象。当我们的模型对于数据集而言过于简单,因此无法捕获数据的所有复杂性时,会发生另一种情况,称为欠拟合。
每个ML模型都旨在学习并适应其参数,以使其对噪声和泛化具有鲁棒性,这意味着要找到一个合适的近似函数来表示预测变量与响应之间的关系。如图1-6所示。
图1-6 虚线表示模型的预测。左图可以看到,欠拟合是一个泛化性能非常差的模型。中图代表了一个很好的模型,与右图存储训练集并过拟合的模型相比,它可以很好地被推广
这些年来,已经开发了几种有监督学习算法。但是,这本书将集中于ML模型,该模型被证明具有更多的通用性,并且可以用来解决几乎所有有监督、无监督和半监督的学习任务:神经网络。
在训练和验证阶段的介绍中,我们讨论了尚未引入的两个概念:超参数和度量。
·超参数:当要完全定义的算法需要将值分配给一组参数时,需要考虑超参数。我们将定义算法本身的参数称为超参数。例如,神经网络中神经元的数量就是一个超参数。
·度量指标:是给出模型预测的函数。预期的输出会产生一个数字值分数,用于衡量模型的优劣。
度量指标是每个ML流水线中的关键组件。它们非常有用且功能强大,值得一个单独的章节来专门介绍。
1.2.3 评估模型性能——度量指标
在评估和测试阶段评估有监督学习算法是任何设计良好的ML流水线的重要组成部分。
在描述各种可用度量指标之前,有一件事值得注意:我们始终可以对每个数据集的分割进行模型性能测试。在训练阶段,通常是在每轮训练结束时,我们可以在训练集本身以及验证集上测试算法的性能。绘制曲线在训练过程中的变化方式,并分析训练和验证曲线之间的关系,使我们能够快速确定ML模型先前描述的病态情况——过拟合和欠拟合。
有监督学习算法的显著优势在于将算法的预期结果包含在数据集中,因此,本文提出的所有度量指标均使用标签信息来评估模型的“执行情况”。
有衡量分类器性能的指标和衡量回归模型性能的指标。显然,即使它们都是有监督学习算法家族的成员,将分类器作为回归器对待也没有任何意义。
用于评估有监督学习算法的第一个和最常用的度量指标是准确率。
1.准确率
准确率(accuracy)是做出的正确预测的数量与所有预测的数量之比。
准确率用于衡量多分类问题的分类性能。
给定yi作为标签,作为预测,我们可以定义第i个示例的准确率如下:
因此,对于一个包含N个元素的完整数据集,所有样本的平均精度如下:
在使用这个度量指标时,我们必须注意数据集D的结构。事实上,只有在属于每个类别的样本数量相等时,它才能很好地工作(我们需要使用平衡的数据集)。
在不平衡数据集的情况下,或者当预测错误类别的错误高于/低于预测另一个类别时,准确率不是使用的最佳度量指标。要了解原因,请考虑仅包含两个类别的数据集的情况,其中80%的样本属于类别1,20%的样本属于类别2。
如果分类器仅预测类别1,则此数据集中测得的准确率为0.8,但是,这当然不是衡量分类器性能的好方法,因为无论输入什么,它总是预测相同的类。如果使用40%的类别1样本和类别2的其余样本在同一测试集上测试同一模型,则度量值将降至0.4。
记住,度量指标可以在训练阶段用于衡量模型的性能,我们可以通过查看验证准确率和训练准确率来监控训练的执行情况,以检测我们的模型是否对训练数据过拟合或欠拟合。
如果模型可以对数据中存在的关系进行建模,则训练准确率会提高;如果不是,则模型过于简单,我们无法拟合数据。在这种情况下,我们必须使用具有更高学习能力(具有更多可训练参数)的复杂模型。
如果训练准确率提高了,我们可以开始查看验证准确率(总是在每轮训练结束时):如果验证准确率停止增长甚至开始下降,则该模型过拟合了训练数据,我们应该停止训练(这称为提前停止,是一种正则化技术)。
2.混淆矩阵
混淆矩阵是表示分类器性能的一种表格方式。它可用于总结分类器在测试集上的表现,且仅可用于多分类问题。矩阵的每一行表示预测类中的实例,而每一列表示实际类中的实例。例如,在二分类问题中,我们可以得到如表1-1所示的结果。
表 1-1
值得注意的是,混淆矩阵不是一个度量指标;事实上,矩阵本身并不能衡量模型的性能,但它是计算几个有用度量指标的基础,所有这些度量指标均基于真阳性、真阴性、假阳性和假阴性。
这些术语均指一个类,这意味着在计算这些术语时,必须将多分类问题视为二分类问题。给定一个多分类问题,其类别为A,B,…,Z,如下:
·(TP)A的真阳性:所有归类为A的A实例。
·(TN)A的真阴性:所有未归类为A的非A实例。
·(FP)A的假阳性:所有归类为A的非A实例。
·(TP)A的假阴性:所有未归类为A的A实例。
当然,这可以应用于数据集中的每个类,这样每个类就可得到这四个值。
我们可以计算的具有TP、TN、FP和FN值的重要度量指标是精度、召回率和F1分数。
精度
精度是正确的阳性结果数与预测的阳性结果数的比值:
该度量指标的名称本身就描述了在此处度量的内容:[0,1]范围内的一个数字,它表示分类器的预测准确率,此值越高越好。但是,就准确率而言,仅使用精度值可能会产生误导。高精度只是意味着,当我们预测正类时,我们对它的检测是精确的。但这并不意味着我们在不检测这个类时它也是准确的。
为了了解分类器的完整行为还应考虑的另一项度量指标是召回率。
召回率
召回率是指正确阳性结果的数量除以所有相关样本(例如,所有应该归类为阳性的样本)的数量:
与精度一样,召回率的范围是[0,1],表示正确分类的样本占该类所有样本的百分比。召回率是一个重要的度量指标,特别是在图像目标检测等问题上。
通过度量二分类器的精度和召回率,可以调整分类器的性能,使其按需运行。
有时候,精度比召回率更重要,反之亦然。因此,有必要花一小段时间来介绍分类器机制。
分类器机制
有时,将分类器机制置于高召回率体系中是值得的。这意味着我们希望拥有更多的假阳性,同时也要确保检测到真阳性。
在计算机视觉工业应用中,当生产线需要制造产品时,通常需要高召回机制。然后,在装配过程结束时,由人工控制整个产品的质量是否达到要求的标准。
由于生产线需要具有高的吞吐量,因此控制组装机器人的计算机视觉应用程序通常在较高的召回率机制下工作。将计算机视觉应用程序设置为高精度状态会经常中断生产线,从而降低总体吞吐量并导致公司亏损。
在现实场景中,改变分类器工作机制的能力是极其重要的,在该场景中,分类器被用作生产工具,应使其能够适应业务决策。
在其他情况下,则需要高精度的方案。在工业场景中,有一些计算机视觉应用程序过程很关键,因此,这些过程需要高精度。
在发动机生产线中,可以使用分类器来决定摄像机看到的哪个部件要在发动机中挑选和装配的正确部件。这种情况下需要一个高精度的机制,而不鼓励使用高召回机制。
F1分数是结合了精度和召回率的度量指标。
F1分数
F1分数是精度和召回率之间的调和平均值。此值的取值范围为[0,1],表示分类器的精度和鲁棒性。
F1分数的值越大,模型的整体性能越好:
ROC曲线下面积
受试者工作特征(Receiving Operating Characteristic,ROC)曲线下面积是衡量二分类问题最常用的度量指标之一。
大多数分类器产生[0,1]范围内的分数,而不是直接作为分类标签。分数必须用阈值来决定分类。一个自然的阈值是当分数高于0.5时将其归类为阳性,否则将其归类为阴性,但这并不总是应用程序希望的(考虑如何识别患有疾病的人)。
改变阈值将改变分类器的性能,改变TP、FP、TN、FN的数量,从而改变总体的分类性能。
可以通过绘制ROC曲线来考虑阈值变化的结果。ROC曲线考虑了假阳性率(特异性)和真阳性率(灵敏度):二分类问题是这两个值之间的权衡。可将这些值描述如下。
·灵敏度:真阳性率定义为被正确视为阳性的阳性数据点相对于所有阳性数据点的比例:
·特异性:假阳性率定义为被认为是阳性的阴性数据点相对于所有阴性数据点的比例:
AUC是ROC曲线下的面积,可通过更改分类阈值获得。见图1-7。
图1-7 通过更改分类阈值获得的ROC曲线。虚线表示随机猜测的期望
很明显,TPR和FPR的取值范围均在[0,1]范围内,通过改变分类器的分类阈值来绘制图像,以获得每个阈值的不同TPR和FPR对。AUC的取值也在[0,1]范围内,值越大,说明模型性能越好。
如果我们对度量回归模型的精度和召回率的性能感兴趣,并且从混淆矩阵收集的所有数据都是无用的,那么我们必须使用其他度量指标来度量回归误差。
3.平均绝对误差
平均绝对误差(MAE)是原始值和预测值之间的绝对差的平均值。由于我们现在对衡量回归器的性能很感兴趣,因此必须考虑yi和的值是数值:
MAE值没有上限,其下限为0。显然,我们希望MAE的值尽可能接近于0。
MAE为我们指出了预测与实际输出之间的差距,这个指标很容易解释,因为它的值也与原始响应值处于相同的范围。
4.均方误差
均方误差(MSE)是原始值与预测值之差的平方的平均值:
与MAE一样,MSE没有上限,下限为0。
相反,平方项的存在使度量指标不太容易解释。
最佳实践之一是同时考虑这两个度量指标,以便获得有关错误分布的尽可能多的信息。
MAE≤MSE关系成立,因此以下情况成立:
·如果MSE接近MAE,则回归器会产生较小的误差。
·如果MSE接近MAE2,则回归器会产生较大的误差。
度量指标可能是ML模型选择和性能衡量工具中最重要的组成部分:它们表示期望输出和模型实际输出之间的关系。这种关系非常重要,正是我们想要优化模型的原因,我们将会在第2章中看到,届时我们将会介绍损失函数的概念。
此外,由于我们在本书中处理的模型都是参数化的模型,因此我们可以在训练过程中/训练过程结束时计算度量指标,并保存达到最佳验证/测试性能的模型参数(以及模型的定义)。
使用参数化模型可以为我们提供这种灵活性——我们可以在模型达到所需性能时冻结其状态,然后继续进行训练,更改超参数并尝试使用不同的配置/训练策略,同时还具有了已存储了良好性能模型的确定性。
在训练过程中有度量标准和度量能力,再加上可以保存的参数化模型的使用,使我们有能力评估不同的模型,只保存最符合我们需求的模型。这个过程被称为模型选择,是每一个设计良好的ML流水线的基础。
我们把重点放在了有监督学习算法上,但当然,ML远远不止于此(即使是严格的有监督学习算法在解决实际问题时也有了最好的性能)。
我们将简要描述的下一类算法来自无监督学习家族。