1.3 性能度量
在对模型进行评估时,衡量模型推广能力的评价标准被称为性能度量。性能度量是与任务相关的。接下来就以有监督学习里的回归任务和分类任务为例,介绍它们相对应的性能度量。性能度量包括误差函数和其他度量。下图首先介绍一组数学符号。
数学符号
其中:
● 特征用x表示,标签用y表示。
● 第i组特征为x(i),第i个标签为y(i),(i)在上标位置。将i用小括号括起来是为了避免和i次方混淆。
● 第i个样例用(x(i),y(i))表示。
● 第j个特征用xj表示。
● 第i组中的第j个特征用表示。
本书中的数学符号都会遵循以上的表示方式。记住:样例看上标,特征看下标。
1.3.1 误差函数
误差就是真实值与估计值之间的“差距”,它可以测量一个数据点,也可以测量多个数据点(常见用法)。下表中分别对单点误差和多点误差进行了举例。
上面对科比和C罗的身高估计都有误差,综合起来误差是0,这看上去有一点问题,如果取绝对值就没问题了,即误差=[|1.98-1.97|+|1.87-1.88|]/2=1。
一般,绝对值函数用于计算回归型误差,而0-1函数用于计算分类型误差。用h(x)代表预测结果,用y代表真实标签,上面的误差描述可用误差函数来表现,如下表所示。
一个数据点上的误差函数被称作损失函数,多个数据点上的误差函数被称作代价函数。代价函数是损失函数的均值,从而使得多点误差和单点误差的比例一致。
在实际操作中,很少用绝对值函数和0-1函数作为误差函数,原因是这些函数不是处处可导的。有监督学习问题最终都会被转换成误差函数的优化问题,因此,我们要尽量保证函数是可导的。在1.3.2节和1.3.3节会介绍回归任务和分类任务中最常见的误差函数,以及一些有用的性能度量(见下表)。
1.3.2 回归度量
回归任务的误差函数用于评估在数据集D上,模型的连续型预测值h(x)与连续型真实值y的距离,y和h(x)可以取任意实数。误差函数是一个非负实数值函数,通常使用ED[h] 来表示,如下表所示。
续表
在误差函数累加项中取出一项,以|y-h(x)|为自变量画出损失函数曲线,如右图所示。
真实值y和预测值h(x)是任意实数。在所有损失函数中都含有|y-h(x)|这一项,且是它的增函数。
● 当y和h(x)的差别越小时,损失越小。
● 当y和h(x)的差别越大时,损失越大。
回归任务的损失函数
1.3.3 分类度量
分类任务的误差函数用于评估在数据集D上,模型的离散型预测值h(x)与离散型真实值y的不一致程度。
惯例是y和h(x)取±1,比如正类取1,负类取-1。
在误差函数累加项中取出一项,以y×h(x)为自变量画出损失函数曲线,如右图所示。
规定真实值y和预测值h(x)只能取±1。所有损失函数中都含有y×h(x)这一项,且是它的减函数。
● y×h(x)>0代表预测值和真实值一致,损失变小。
● y×h(x)<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,)相比,调和平均更重视较小值。从上式的左部分可以看出,P和R都在分母位置,其中较小值的变动比较大值的变动对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曲线对比