这里的内容主要包括:性能度量、比较检验和偏差与方差。在上一篇文章中,我们解决了评估学习器泛化性能的方法,即用测试集的"测试误差"作为"泛化误差"的近似,当我们划分好训练/测试集后,那如何计算"测试误差"呢?这就是性能度量,例如:均方差,错误率等,即"测试误差"的一个评价标准。有了评估方法和性能度量,就可以计算出学习器的"测试误差",但由于"测试误差"受到很多因素的影响,例如:算法随机性或测试集本身的选择,那如何对两个或多个学习器的性能结果做比较呢?这就是比较检验。最后偏差与方差是解释学习器泛化性能的一种重要工具。
一、性能度量
1.1 最常见的性能度量
在回归任务中,即预测连续值的问题,最常用的性能度量是"均方误差(mean squared error)",另外还有常用的性能度量分别为,平均绝对误差(MAE, mean absolute error), 均方根误差(RMSE, root mean square error), R平方。
在分类任务中,即预测离散值的问题,最常用的是错误率和精度,错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例,易知:错误率+精度=1。
后面的内容我们都来说明分类问题的性能度量。
1.2 查准率/查全率/F1
错误率和精度虽然常用,但不能满足所有的需求。例如:在推荐系统中,我们只关心推送给用户的内容用户是否感兴趣(即查准率),或者说所有用户感兴趣的内容我们推送出来了多少(查全率)。因此,使用查准率/查全率更适合描述这类问题。对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:
对于混淆矩阵每种取值的详细解释如下:
根据混淆矩阵可以得到的一些度量指标有:
- Precision(P):精确度,查准率,预测为正样本中判断正确的比例
- FDR(False Discovery Rate):判断为正样本的样本中,负样本所占比例
- Recall(R, Sensitivity, TPR-True Positive Rate):召回率,查全率,敏感性,真正率,预测正确的所有正样本占实际所有正样本的比例
- TNR(True Negative Rate, Specificity):特异度,真负率,预测正确的所有负样本占实际所有负样本的比例。
- FPR(False Positive Rate):假正率,预测误判为正样本的负样本数据量占实际所有负样本的比例
- FNR(False Negative Rate):假负率,预测误判为负样本的正样本数量占实际正样本的比例
- Accuracy:正确率,所有实验中预测正确的样本数占所有样本数量的比例
- Error Rate:错误率,所有实验中预测错误的样本数占所有样本数量的比例。
���������=����+�����=����+��=1−���������������=�����������=���=����+�����=�����������=����+�����=����+�����=����+��=1−��������������=��+����+��+��+�����������=��+����+��+��+��=1−��������
特别地,将查准率与查全率再次列出,查准率P与查全率R分别定义为:
正如天下没有免费的午餐,查准率和查全率是一对矛盾的度量。例如我们想让推送的内容尽可能用户全部感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,查全率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样查准率就很低了。
"P-R曲线"正式描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是"正例"的样本排在前面,最不可能是"正例"的排在后面,按此顺序逐个把样本作为"正例"进行预测,每次计算出当前的P值和R值。如下图所示:
P-R曲线如何评估呢?若一个学习器A的P-R曲线被另一个学习器的P-R曲线完全包住,则称:B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了"平衡点"(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。
P和R的指标有时会出现矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-measure,又称F-score。F-measure是P和R的加权调和平均,即:
特别的,当 �=1 ,也就是常见的F1度量,是P和R的调和平均,当F1较高时,模型的性能越好。
有时候我们会有多个二分类混淆矩阵,例如:多次训练或者在多个数据集上训练,那么估算全局性能的方法有两种,分为宏观和微观。简单理解,宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R 值macro-R,再算出 �� 或F1,而微观则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出��或F1。
1.3 ROC与AUC
如上所述:学习器对测试样本的评估结果一般为一个实值或概率,设定一个阈值,大于阈值为正例,小于阈值为负例,因此这个实值得好坏直接决定了学习器得泛化性能,若将这些实值排序,则排序得好坏决定了学习器的性能高低。ROC曲线正是从这个角度出发来研究学习器的泛化性能,ROC曲线与P-R曲线十分类似,都是按照排序的顺序逐一按照正例预测,不同的是ROC曲线以"真正例率(True Positive Rate, 简称TPR)"为横轴,纵轴为"假正例率(False Positive Rate, 简称FPR), ROC偏重研究基于测试样本评估值的排序好坏"。
简单分析图像,(0,0)表示将所有的样本预测为负例,(1,1)则表示将所有的样本预测为正例,(0,1)表示正例全部出现再负例之前的理想情况,(1,0)则表示负例全部出现在正例之前的最差情况。
现实中的任务通常都是有限个测试样本,因此只能绘制出近似ROC曲线。绘制方法:首先根据测试样本的评估值对测试样本排序,接着按照以下规则进行绘制。
同样地,进行模型的性能比较时,若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。ROC曲线下的面积定义为AUC(area under roc curve),不同于P-R的是,这里的AUC是可估算的,即ROC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。
1.4 代价敏感错误率与代价曲线
上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的。例如:将无疾病->有疾病只是增多了检查,但有疾病->无疾病却是增加了生命危险。以二分类为例,由此引入了"代价矩阵"(cost matrix)。
在非均等错误代价下,我们希望的是最小化"总体代价",这样"代价敏感"的错误率为:
同样对于ROC曲线,在非均等错误代价下,演变成了"代价曲线",代价曲线横轴是取值为[0,1]之间的正例概率代价,式中p表示正例的概率,纵轴是取值为[0,1]的归一化代价。
代价曲线的绘制很简单:设ROC曲线上一点的坐标为(TPR, FPR),则可相应计算出FNR,然后再代价平面上绘制一条(0, FPR)到(1, FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如图所示:
1.5 ROC与AUC详解
AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"
ROC
曲线由两个变量TPR和FPR组成,这个组合以FPR对TPR,即是以代价(cost)对收益(benefits)
- x轴是假阳性率(FPR):在所有的负样本中,分类器预测错误的比例
- y轴为真阳性率(TPR):在所有的正样本中,分类器预测正确的比例
为了更好的理解ROC曲线,我们使用具体的实例说明:
如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。
不难发现,这两个指标之间是相互制约的。如果某个对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端地情况下,他把所有的样本都看作有病,那么第一个指标达到1,第二个指标也为1.
我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。
我们可以看出,左上角的点(TPR=1, FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全是蒙的,蒙对一半,懵错一半;下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。
假设如下就是某个医生的诊断统计图,直线代表阈值。通过改变不同的阈值1.0->0,从而绘制出ROC曲线。下图为未得病人群(蓝色)和得病人群(红色)的模型输出概率分布图(横坐标表示模型输出概率,纵坐标表示概率对应的人群的数量)。阈值为1时,不管你什么症状,医生均未诊断出疾病(预测值都为N),此时FPR=TPR=0,位于左下。阈值为0时,不管你什么症状,医生都诊断结果都是得病(预测值都为P),此时FPR=TPR=1,位于右上。
曲线距离左上角越近,证明分类器效果越好。
如上,是三条ROC曲线,在0.23处取一条直线。那么,在同样的FPR=0.23的情况下,红色分类器得到更高的TPR。也就表明,ROC越往左上,分类器效果越好。我们用一个标量值AUC来量化它。
AUC
AUC定义:
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
AUC=1,是完美分类器。绝大多数预测的场合,不存在完美分类器。
0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC=0.5,跟随机猜测一样,模型没有预测价值。
AUC<0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
注:对于AUC小于0.5的模型,我们可以考虑取反(模型预测为positive,那我们就取negative),这样就可以保证模型的性能不可能比随机猜测差。
以下为ROC曲线和AUC值得实例:
AUC的物理意义:
AUC的物理意义正样本的预测结果大于负样本的预测结果的概率。所以AUC反映的是分类器对样本的排序能力。
另外值得注意的是,AUC 对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
下面从一个小例子解释AUC的含义:小明一家四口,小明5岁,姐姐10岁,爸爸35岁,妈妈33岁建立一个逻辑回归分类器,来预测小明家人为成年人概率,假设分类器已经对夏明的家人做过预测,得到每个人为成人的概率。
1.AUC更多的是关注对计算概率的排序,关注的是概率值的相对大小,与阈值和概率值的绝对大小没有关系。
例子中并不关注小明是不是成人,而关注的是,预测为成人的概率的排序。
- 问题1:以下为三种模型的输出结果,求三种模型的AUC。
模型 | 小明 | 姐姐 | 妈妈 | 爸爸 |
---|---|---|---|---|
a | 0.12 | 0.35 | 0.76 | 0.85 |
b | 0.12 | 0.35 | 0.44 | 0.49 |
c | 0.52 | 0.65 | 0.76 | 0.85 |
AUC只与概率的相对大小(概率排序)有关,和绝对大小没关系。由于三个模型概率排序的前两位都是未成年人(小明,姐姐),后两位都是成年人(妈妈,爸爸),因此三个模型的AUC都等于1.
1.AUC只关注正负样本之间的排序,并不关心正样本内部,或者负样本内部的排序。这也体现了AUC的本质:任意个正样本的概率都大于负样本的概率的能力。例子中AUC只需要保证(小明和姐姐)(爸爸妈妈),小明和姐姐在前2个排序,而不会考虑小明和姐姐谁在前,或者爸爸和妈妈谁在前。
问题2:以下已经对分类器输出概率从小到大进行了排列,哪些情况的AUC等于1,哪些情况的AUC等于0(其中背景色表示True value,红色表示成年人,蓝色表示未成年人)。
易得,D模型,E模型和F模型的AUC值为1,C模型的AUC值为0(爸妈为成年人的概率小于小明和姐姐,显然这个模型预测反了)。
AUC的计算:
- 法1:AUC为ROC曲线下的面积,那我们直接计算面积。面积为一个个小的梯形面积之和。计算的精度与阈值的精度有关。
- 法2:根据AUC的物理意义,我们计算正样本预测结果大于负样本预测结果的概率。取n1n0(n1为正样本数,n0为负样本数)个二元组,比较score(预测结果),最后得到AUC。时间复杂度O(N*M)。
- 法3:我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=n0+n1,n0表示负样本个数,n1表示正样本个数),其次为n-1.那么对于正样本中rank最大的样本,rank_max,有n1-1个其他正样本比它score小,那么就有(rank_max-1)-(n1-1)个负样本比它score小。其次为(rank_second-1)-(n1-2),直到最后排序在最后面的正样本rank_min, 有0个其他正样本比它score小,那么就有rank_min - 1个负样本比它score小。最后我们得到正样本大于负样本的概率为
时间复杂度为O(N+M)。
下面有一个简单的例子: