1.3 性能度量

在对模型进行评估时,衡量模型推广能力的评价标准被称为性能度量。性能度量是与任务相关的。接下来就以有监督学习里的回归任务和分类任务为例,介绍它们相对应的性能度量。性能度量包括误差函数和其他度量。下图首先介绍一组数学符号。

数学符号

其中:

● 特征用x表示,标签用y表示。

● 第i组特征为x(i),第i个标签为yi,(i)在上标位置。将i用小括号括起来是为了避免和i次方混淆。

● 第i个样例用(xiyi)表示。

● 第j个特征用xj表示。

● 第i组中的第j个特征用表示。

本书中的数学符号都会遵循以上的表示方式。记住:样例看上标,特征看下标

1.3.1 误差函数

误差就是真实值与估计值之间的“差距”,它可以测量一个数据点,也可以测量多个数据点(常见用法)。下表中分别对单点误差和多点误差进行了举例。

上面对科比和C罗的身高估计都有误差,综合起来误差是0,这看上去有一点问题,如果取绝对值就没问题了,即误差=[|1.98-1.97|+|1.87-1.88|]/2=1。

一般,绝对值函数用于计算回归型误差,而0-1函数用于计算分类型误差。用hx)代表预测结果,用y代表真实标签,上面的误差描述可用误差函数来表现,如下表所示。

一个数据点上的误差函数被称作损失函数,多个数据点上的误差函数被称作代价函数。代价函数是损失函数的均值,从而使得多点误差和单点误差的比例一致。

在实际操作中,很少用绝对值函数和0-1函数作为误差函数,原因是这些函数不是处处可导的。有监督学习问题最终都会被转换成误差函数的优化问题,因此,我们要尽量保证函数是可导的。在1.3.2节和1.3.3节会介绍回归任务和分类任务中最常见的误差函数,以及一些有用的性能度量(见下表)。

1.3.2 回归度量

回归任务的误差函数用于评估在数据集D上,模型的连续型预测值hx)与连续型真实值y的距离,yhx)可以取任意实数。误差函数是一个非负实数值函数,通常使用ED[h] 来表示,如下表所示。

续表

在误差函数累加项中取出一项,以|y-hx)|为自变量画出损失函数曲线,如右图所示。

真实值y和预测值hx)是任意实数。在所有损失函数中都含有|y-hx)|这一项,且是它的增函数。

● 当yhx)的差别越小时,损失越小。

● 当yhx)的差别越大时,损失越大。

回归任务的损失函数

1.3.3 分类度量

分类任务的误差函数用于评估在数据集D上,模型的离散型预测值hx)与离散型真实值y的不一致程度。

惯例是yhx)取±1,比如正类取1,负类取-1。

在误差函数累加项中取出一项,以y×hx)为自变量画出损失函数曲线,如右图所示。

规定真实值y和预测值hx)只能取±1。所有损失函数中都含有y×hx)这一项,且是它的减函数。

y×hx)>0代表预测值和真实值一致,损失变小。

y×hx)<0代表预测值和真实值不一致,损失变大。

分类任务的损失函数

除上述损失函数外,在分类任务中还有很多其他有用的性能度量,具体介绍如下。

错误率:分类错误的样本数占样本总数的比例被称为错误率(Error Rate);相应地,分类正确的样本数占样本总数的比例被称为精度(Accuracy)。如果在10个样本中,有2个样本分类错误,则错误率为20%,而精度为80%。

查准率和查全率:错误率和精度虽然常用,但它们不能满足所有任务的需求,例如,用训练好的模型预测骑士队会赢。显然,错误率只能衡量在多少比赛中有多少比例是输的。但是若我们关心的是“预测出比赛中有多少比例是赢的”,或“赢的比赛有多少被预测出了”,那么错误率这个指标显然就不够用了,这时需要引进更为细分的性能度量,即查准率(Precision)和查全率(Recall)[4]

对于二分类问题,可将样例根据其真实类别与模型的预测类别的组合划分为真正类(True Positive,TP)、真负类(True Negative,TN)、假正类(False Positive,FP)假负类(False Negative,FN)

● 用预测类别的真假来描述“正类和负类”,预测为真=正类预测为假=负类

● 用真实类别和预测类别的同异来描述“真假”,相同=不同=

真正类=预测类别为真且和真实类别相同,真负类=预测类别为假且和真实类别相同。

假正类=预测类别为真但和真实类别不同,假负类=预测类别为假但和真实类别不同。

理想的情况是将所有真实类别为正类的都挑选出来,但“梦想太丰满,现实太骨感”,模型总会犯错误。模型选对了就是真正类,模型选错了就是假正类。一旦你理解了上面绕口的划分标准,则下图的意义不言而喻;如果没有理解,则希望下图能直观地帮助你理解。

查准率和查全率

混淆矩阵:在分类任务中,模型预测和标签不总是完全匹配的,而混淆矩阵就是用来记录模型表现的N×N表格(其中N为类别的数量),通常其中一个坐标轴为真实类别,另一个坐标轴为预测类别。以二分类任务为例(N=2),其混淆矩阵的一般形式和具体例子如下图所示。

混淆矩阵的定义和例子

查全与查准的权衡:查准率和查全率互为冲突,一般来说,当查准率高时,查全率往往低;而当查全率高时,查准率往往低。如右图所示,模型A的查全查准曲线完全在模型B的查全查准曲线之上,因此模型A好于模型B。理想的模型曲线是图中的(1,1)点,即查准率和查全率都是100%。

查全查准曲线

举一个简单的例子,在6个人玩《三国杀》游戏时,你是主公(假设有1个主公、1个忠臣、1个内奸和3个反贼):

● 当你的目标是不错杀任何忠臣时,那么最有把握的就是不杀任何人,因此查准率为100%,而查全率为0%。

● 当你的目标是杀掉所有反贼时,那么最有把握的就是杀了所有人,因此查全率为100%,但查准率为60%。

通常对于一些非常简单的任务或者当你作弊时,查准率和查全率才会都很高。比如,你知道每个人的身份,当然是一杀一个准,直到游戏结束,查准率和查全率都是100%。

F 1得分:是基于查准率和查全率的调和平均(Harmonic Mean)定义的:

与算术平均(Arithmetic Mean,P+R)和几何平均(Geometric Mean,)相比,调和平均更重视较小值。从上式的左部分可以看出,PR都在分母位置,其中较小值的变动比较大值的变动对F1得分的影响更大一些。用F1得分的一个弊端是对查准率和查全率的重视程度相同,但在实际的机器学习中,我们对查准率和查全率的重视程度不同。比如:

(1)当我们向用户推荐商品时,为了尽可能避免打扰用户,我们更希望推荐的内容是用户感兴趣的,此时查准率更重要。

(2)当警察追捕逃犯时,其更希望不漏掉逃犯,此时查全率更重要。

(3)当医生为病人诊断癌症时,如果跟一个没有得癌症的病人说他得了癌症(追求查全率),则病人的压力就会很大,而且会花费很多金钱和时间在检查上;如果跟得了癌症的病人说他没得癌症(追求查准率),则会影响病人的治疗。此时似乎查准率和查全率都很重要(笔者认为查准率更重要,毕竟生命比金钱更重要)。

目前还没有找到查准率和查全率都不重要的例子,如果二者都不被重视,那么还用机器学习干什么?

为了区分不同的重要程度,下面介绍一下F1得分的一般形式Fβ(其中β度量了查准率和查全率的相对重要性)。

● 当β=1时,Fβ公式退化成F1公式,此时查准率和查全率都重要,适用于癌症诊断。

● 当β>1时,查全率的影响更大,此时更希望查全,适用于警察追捕逃犯。

● 当0<β<1时,查准率的影响更大,此时更希望查准,适用于向用户推荐商品。

ROC曲线:Receiver Operating Characteristic,ROC,意思为受试者工作特征。该曲线类似查全查准曲线,但其图形的横坐标轴、纵坐标轴并不是查准率和查全率。ROC曲线反映在不同分类阈值上,真正类率(True Positive Rate)和假正类率(False Positive Rate)的关系。

● 真正类率是真正类和所有正类(真正类+假负类)的比率:真正类率=查全率。

● 假正类率是假正类和所有负类(假正类+真负类)的比率:假正类率=1-真负类率=1-特异率(Specificity)。

查全查准曲线和ROC曲线对比图如右图所示。ROC曲线和横坐轴之间的面积叫AUC,即Area Under the Curve。AUC将所有可能分类阈值的评估标准浓缩成一个数值,根据AUC的大小,我们得出

查全查准曲线和ROC曲线对比