4.1.1 分类问题

如何才能判定某个问题是否属于分类问题呢?答案取决于两个主要因素:你试图解决的问题和解决该问题所需要的数据。当然,可能还会存在其他因素,但是上述两个因素是最重要的。

如果你的目的是要创建一个模型,对于给定一些输入,该模型的响应或输出结果是用来区分两个或多个不同的类别,那么你的问题就是分类问题。例如,以下都是一些分类问题:

·给定一张图片,指出图片中包含的数字(区分10个类别:0~9位数字)。

·给定一张图片,指出图片中是否包含一只猫(区分两个类别:是或否)。

·给定一系列关于温度的读数,确定属于哪个季节(区分四个类别:四季)。

·给定一条推文,确定其情绪的类别(区分两个类别:积极或消极)。

·给定一个人的图像,确定这个人的年龄类别(区分五个类别:<18、18~25、26~35、35~50、>50)。

·给定一只狗的图像,确定它的品种(根据国际公认的品种,一共有120个品种类别)。

·给定一个完整的文档,确定该文档是否被篡改(区分类别:真实的或被篡改的)。

·给定光谱辐射计的卫星读数,确定该地理位置是否与植被的光谱特征相匹配(区分类别:匹配或不匹配)。

从列表中的示例可以看出,不同类型的问题对应有不同类型的数据。我们在这些例子中看到的这种与问题相关的数据称为带标签数据

无标签数据非常常见,但是如果没有经过某种关于类别属性的处理而使其能够匹配到某个类别,则很少将这些数据用于解决分类问题。例如,可以对未标记的数据使用无监督聚类,将数据分配到特定的聚类(如组别或类别),在这一点上,无标签数据通过某种数据技术层面上的处理成为“带标签数据”。

从这个列表中需要注意的另一个要点是可以将分类问题划归为两个大的基本类型:

·二元分类:仅用于对任何两个类别之间进行分类。

·多元分类:在两个以上的类别之间进行分类。

乍看起来,这种分类类型的划归方式好像比较武断,但是其实并非如此。事实上,分类的类型将限制你可以使用的学习算法类型和预期的算法性能。为了更好地理解这一点,让我们分别讨论这两种分类问题。

1.二元分类

二元分类通常被认为是一个比多元分类更加简单的问题。事实上,如果我们能解决二元分类问题,那么就可以从技术上通过某个确定的策略将多元分类问题分解成几个二元分类问题,从而实现对多元分类问题的求解(Lorena,A.C.et al.,2008)。

人们认为二元分类问题更加简单的原因之一在于二元分类学习算法背后的相关算法和数学基础。假设有一个二元分类问题,例如第3章中介绍的Cleveland数据集。这个数据集包括每个病人的13个医学观察数据——可以称之为。对于每个患者记录,都有一个与之相关的标签,表明该患者是否患有某种类型的心脏病(+1)或(-1)——我们将其称为。因此,一个包含N个样本的完整数据集D,可以定义为如下数据和标签的集合:

第1章中,学习的目的是使用某个算法,找到一种模型分别将D中所有的样本输入数据x映射到其正确的标签,并(希望)能够进一步对样本集合D以外的样本实现正确的映射。我们使用感知机模型及感知机学习法(PLA)进行学习,目的是要找到能满足以下条件的参数:

对于所有样本。然而,正如我们在第1章中所讨论的那样,如果数据是非线性可分的,则不存在满足上述等式的参数。在这种情况下,虽然可以得到一个近似值或预测值,但那不一定是期望的结果,通常将该预测值记为

因此,学习算法的全部意义就变成了减少期望的目标标签y值和预测值之间的差异。在理想情况下,我们希望对于所有,都成立。在的时候,必须对学习算法做出适当的调整(即对模型进行训练),通过寻找新的更好的参数(w,b)来避免在未来犯这样的错误。

这些算法背后的科学依据因模型而异,但最终目标通常是相同的:

·在每次学习迭代中减少错误预测的数量。

·在尽可能少的迭代(步骤)中学习模型参数。

·尽可能快地学习模型参数。

由于大多数数据集需要处理的是线性不可分问题,因此,人们通常忽略PLA而倾向于使用其他算法,以便进行更快的收敛和更少的迭代。很多机器学习的模型训练算法都是通过采取特定的步骤来调整参数以减少误差,参数调整的依据主要是所选择的参数关于误差可变性和参数选择的导数。因此,(至少在深度学习领域)最为成功的模型训练算法主要是基于某种梯度下降策略的训练算法(Hochreiter,S.,et.al.,2001)。

现在,让我们来讨论最基本的梯度迭代策略。对于给定数据集D,假设我们想要学习的模型参数是。我们将不得不对关于该问题的表达式进行一些简化,使用表达式隐含地表达。唯一可行的办法是令:

通过这种简化处理,我们只需简单地搜索参数w,因为其中也蕴含着对参数b的搜索。基于固定学习率的梯度下降算法步骤如下:

1)将权值初始化为零(w=0),将迭代计数器初始化为零(t=0)。

2)当时,进行下列操作:

①计算关于的梯度,并将其存储在

②更新w:

③迭代计数器加1,并返回到①

这里有一些需要解释的要点:

·梯度的计算不是一件无关紧要的事情。对于一些特定的机器学习模型,可以通过分析机器学习模型特点来确定梯度的计算方法,但是在大多数情况下,必须使用一些最新算法来进行相应的数值计算

·仍然需要定义误差是如何计算的,这将在下一节进行讨论

·学习率η也需要明确,这本身就是一个问题

关于最后一个要点的求解思路是通过找到使误差最小化的参数w,我们需要学习率参数η。现在,使用梯度下降法的时候要适当考虑对学习率参数η搜索。然而,如果这样的话,可能会陷入死循环。关于梯度下降算法和它的学习率,我们不会深入到更多的相关细节,因为如今的梯度下降算法通常包括一些自动计算功能或者自适应调整功能(Ruder,S.,2016)。

2.多元分类

分类到多个类别可能会对学习算法的性能产生重要影响。一般来说,模型的性能会随着需要识别的类型数量增加而下降,除非有大量的数据和很强的计算能力,用于克服数据集中样本类别分布不平衡问题所带来的局限。你可以估计大量的梯度,并进行大规模的计算和模型更新。计算能力在未来可能不会成为一个问题,但目前它还是一个制约条件。

多元分类问题可以通过使用诸如一对一一对多的策略来解决。

在一对多策略中,你本质上拥有一个专门的二元分类器,它非常擅长从所有模式中识别出某一个特定的模式,通常采用级联策略实现。例如:

下面是关于这个策略的图解说明。如图4.1所示,假设有关于一年中四个季节的二维数据。

二维随机数据的例子中,有四个分别与一年四季相对应的类别,二元分类器不能直接处理这种数据。然而,可以训练专门针对某个特定类别的专门二元分类器,而不是对所有其他类型进行分类。如果用一个简单的感知机训练一个二元分类器来判断某个数据点是否属于Summer类别,那么可以得到如图4.2所示的分类超平面。

同样,还可以训练关于其他类别的专门分类器,直到有足够的证据来检验整个假设为止,也就是说,直到能够区分所有的类别为止。

图4.1 随机的二维数据可以告诉我们一些一年四季的数据

图4.2 PLA在区分Summer季节数据和其他季节数据方面是专家级的

另一种选择是使用可以同时处理多个输出的分类器;例如,决策树或集成学习方法。对于深度学习和神经网络的情形,指的是在输出层可以包含多个神经元的神经网络,如第1章中图1.8和图1.10描述的神经网络。

多输出神经网络的数学表达式与单输出神经网络相比,只有一些细微的变化。多输出神经网络的输出不再是类似于如的一组二元值,而是由独热编码值组成的向量,例如,其中表示集合C的大小,集合C包含了所有不同的类别标签。对于上述示例,集合C中包含了以下内容:。每个类别的独热编码如下:

·Summer:

·Fall:

·Winter:

·Spring:

目标向量中的每个元素都对应于四个神经元期望输出中的一个。我们还应该指出,数据集定义要显示样本输入数据和标签数据都是向量:

另一种处理多元分类问题的方法是使用回归分析方法