分类是具有一定智力水平的动物在进化过程中普遍掌握的一项技能。例如,非洲草原上的狮子,可以在奔跑的猎物中辨别出其中体弱而不善于奔跑的,优先进行捕杀;天空自由翱翔的鸟儿回巢时可以在空中准确地区分出众多鸟巢中哪个是自己的家;作为万物之灵的人类,分类能力就更加强大,识别不同类的食物、选择不同的衣服、区分性格后和喜欢的人交友、工作中将各种事务分门别类进行处理等都是在进行分类。
尝试让计算机学习人类的“分类”能力,使得机器能够对特定数据实现分类,这就是分类问题。人工智能领域的大量问题最后都归结为某种形式的分类问题,所以分类问题是人工智能领域中最重要的一类问题。关于它的研究历史很长,在此过程中,各种基础的分类算法不断改进旧版本的不足,提升分类效率,演化出众多新的算法。本教材将着重介绍其中几种原理简单,但是依然很流行、很有效的基本分类算法。追本溯源,众多分类算法的核心思想其实并不复杂,掌握了其中的基本想法,今后学习基于此演化出的新算法也就不难了。
首先以电商客户数据为例,介绍描述分类问题需要的基本概念。
(1)特征属性
通常特征属性有很多个,也称为变量或者维度,每个特征属性相当于示例表格中的一列,特征属性的取值称为属性值,属性值可以是具体数字,也可以是描述性的文字。
(2)样本
样本相当于表格中的一行,包含很多属性值。
(3)类别标记
类别标记是对包含属性值的样本进行鉴别后给出的这个样本所属的类别。类别标记在表格中也是一列,表明各个样本属于哪一类。
(4)训练数据
通常分类问题是通过具有类别标记的数据来解决的,这样的数据称为训练数据。在训练数据中除了记录每个样本的属性值,还标明了每个样本所属的类别,训练数据是对未知数据进行分类的数据基础。
(5)分类
利用训练数据构建一个模型,这个模型可以在给出特征属性取值而没有给出类别标记的情况下,自动得到相应样本的类别标记,从而实现分类的目的。
表3-1
表3-1是某电商平台的用户数据,一共有10条。其中有3个特征属性,分别为消费频率(消费次数/注册天数)、平均消费金额(总消费金额/消费次数)以及是否接收广告。表格最后一列为类别标记,即客户包括优质客户和非优质客户两类。每一行数据都是一个样本,这10个样本构成了用来训练分类模型的训练数据。表3-1中,特征属性的取值都是用文字来描述的。例如,第1条数据的消费频率取值是“低”。这与我们熟悉的数据也许有些不同,但要习惯这种数据形式,并非只有数字才是数据。
使用这个示例数据进行分类指的就是根据上述训练数据训练分类模型,从而可以根据特征属性的取值对未知类别的客户进行鉴别,把他们分成优质和非优质两类。一般分类问题的类别数量各有不同,分成两类的问题称为二分类问题,类别数量更多的问题称为多分类问题,但二分类问题的算法是多分类问题算法的基础。
分类方法有很多种,也许复杂,也许简单,但是哪一种方法更适用于特定问题?如何评价各种分类方法的好坏?例如,使用上表中的数据可以建立如下所示的一个非常简单的分类模型。
如果消费频率=高
则客户类别=优质
如果消费频率=中或者低
则客户类别=非优质
即使通过直观经验来判断,也知道这个模型非常粗糙,并不是一个好的分类模型。那么如何通过量化的方式对模型进行评价呢?下面介绍几种分类模型的评价指标。对于二分类问题,为了给出评价指标的严格定义,首先要根据评价结果建立如表3-2所示的表格,这个表格称为混淆矩阵。
表3-2 混淆矩阵
表格中各记号的含义是这样的。把二分类的两个类别分别记为正(positive)和反(negative),分类模型的预测结果也有两种,即对(True)和错(False)。类别和预测结果有以下四种组合方式。
真正例(TP,True Positives):正类样本(称为正例)被正确预测为正例;
真负例(TN,True Negatives):负类样本(称为负例)被正确预测为负例;
假正例(FP,False Positives):负例被错误预测为正例;
假负例(FN,False Negatives):正例被错误预测为负例。
例如,在客户分类问题中,以优质客户为正,那么如果优质客户被错误预测为非优质客户就是一个假负例。混淆矩阵中的数值之间显然存在如下关系。
TP+FN+FP+TN=P+N=P'+N'=样本总数
建立了混淆矩阵后,就可以使用它来计算一些分类器的评价指标了。
(1)准确率
准确率是最常用的评价指标,指分类正确的样本数占样本总数的比例。即
通常情况下,当然是正确率越高的分类器,分类性能越好。
(2)错误率
错误率是对应于准确率的另一个常用指标,指分类错误的样本数占样本总数的比例,显然正确率和错误率的和等于1,即
错误率越高的分类器,当然性能越差。
(3)精度
精度(precision)又叫查准率,表示预测为正例的样本中真正例所占的比例。一般认为查准率越高,模型的性能越好。
(4)灵敏度
灵敏度又叫查全率、召回率(recall)、真正率(TPR),表示所有正例中被正确预测为正例的比例。灵敏度越高,模型性能越好。
(5)假正率
假正率表示被错误预测为正例的样本(实际为负例)占所有负例的比例。假正率越高,模型性能越差。
(6)假负率
假负率表示被错误预测为负例的样本(实际为正例)占所有正例的比例。假负率越高,性能越差。显然它等于1-TPR,即:
评价一个分类器的好坏,除了上述指标,还需要考虑算法收敛的速度、使用分类器进行预测的速度、对于数据异常的鲁棒性、分类器的扩展性、分类结果的可解释性等,还可以使用TPR和FPR分别作x轴和y轴的坐标绘出ROC曲线再进行评价,这里不再一一介绍。
在这些评价指标中,正确率当然是很常用、很有效的评价指标,但其他指标在不同问题中同样可以起到重要的评价作用。当两个类别中正负样本数量差距悬殊时,仅使用正确率进行评价就是很糟糕的选择。例如,使用监测数据进行地震预报,发生地震为正,没发生地震为负。假设在所有监测数据中,发生地震的情况只占1%。如果有一个分类器,使用任意数据进行预测时,都会预测为不发生地震(即所有数据都判定为负例),它的准确率是99%,分类准确率很高,但是这样的模型显然性能非常糟糕,造成的后果也是非常严重的。对于这种正样本很少出现的情况,同时采用精度和灵敏度进行评价会更有效。
还有一点需要说明,一个分类器通常不能使各个评价指标都达到最优,甚至某些指标是互相冲突的,一个变好,而另一个一定会变差。所以需要在各个指标之间进行平衡,并且根据具体问题确定哪些指标更重要,而在设计算法时优先考虑重要的指标。例如,在上述地震预报问题中,精度和灵敏度显然更重要。在设计分类算法时,对训练数据的处理和评价指标的选取是个复杂的问题,读者可通过实践逐渐掌握其中的技巧。
本节最后,针对客户分类的简单模型计算这些评价指标,以便读者熟悉其计算方式。首先建立该模型对应的混淆矩阵,以优质客户为正,非优质为负,如表3-3所示。
表3-3
举例说明一下上述混淆矩阵的具体计算方法。例如,假负例(FN),即判断为非优质,但是其实为优质客户的数量。按照前述模型的分类方式,因为第2,4,6条数据的消费频率不高,所以都会被判断为非优质客户,但是它们其实都属于优质客户,所以FN=3。其他的计算是类似的,请读者自行验证。
有了混淆矩阵,各个指标的计算就很容易了。
从评价结果看,虽然这个模型还不够准确,但是也超过了随机指定分类的正确率(50%),它的精度甚至达到了100%。