计算机视觉-分类任务常用评价指标
呐,下面我们先来看看分类任务有哪些可以使用的指标。作为一个Summary,我在下面写到的有准确率(Accuracy),精确率(Precision),召回率(Recall),P-R曲线(Precision-Recall Curve),F1-score,ROC曲线,AUC,混淆矩阵。
0. 样本定义
在开始之前,我们首先来说一说最后参与到指标计算中的样本会被分为哪几类。
- 真阳性(True Positive, TP):True表示分类器的行为是正确的,Positive表示分类器给出的结果是正样本,综合来看,TP表示被分类器预测正确的一个正样本。
- 假阳性(False Positive,FP):False表示分类器的行为出错了,Positive表示分类器给出的结果是正样本,综合来看,FP表示分类器预测出现了错误,把一个负样本预测成了正样本。
- 真阴性(True Negative,TN):True表示分类器的行为是正确的,Negative表示分类器给出的结果是负样本,综合来看,TN表示被分类器预测正确的一个负样本。
- 假阴性(False Negative,FN):False表示分类器的行为出错了,Negative表示分类器给出的结果是负样本,综合来看,FN表示分类器预测出现了错误,把一个正样本预测成了负样本。
1. 准确率(Accuracy)
-
什么是准确率?
准确率是分类任务中最显而易见的一个指标,他的定义是:预测正确的结果占全体样本的百分比。所谓预测正确,就是指本来是正样本,分类器预测结果也是正样本(TP);以及本来是负样本,分类器预测结果也是负样本(TN)。
-
怎么计算准确率?
A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP+TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN -
准确率表征了什么?
可以看出,准确率十分关注分类器的行为的对错,但是当参与测试的样本中正样本和负样本极不均衡,那么ACC在此时是无法客观评价模型的好坏的。例如在测试集中有100个样本,包含99个正样本,1个负样本,而训练得到的分类器一股脑的把所有样本判定为负例,即TN=99,FN=1,此时ACC为99%,但却不能真实反应分类器的性能。
2. 精确率(Precision)
-
什么是精确率?
精确率又叫查准率,他是针对模型的预测结果而言的,指标的计算范围是模型预测的全体正样本,他的定义是:在模型预测的所有正样本中,真正是正样本的概率。
-
怎么计算精确率?
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP -
精确率表征了什么?
精确率的意思就是在模型给出的所有正样本中,我们预测正确的水平有多少。可以看到,精确率仅仅关注正样本结果中预测的准确程度,不会受到正负样本比例的影响。
3. 召回率(Recall)
-
什么事召回率?
召回率又叫查全率。他是针对原始样本的GT而言的,指标的计算范围是测试集中真正的正样本,他的定义是:模型预测的正样本中,对测试集中真实的正样本的召回比例是多少。
-
怎么计算召回率?
R e c a l l = T P T P + F N Recall= \frac{TP}{TP+FN} Recall=TP+FNTP -
召回率表征了什么?
召回率代表的是模型到底找回来了多少原始数据库中包含的正样本,他是一种检验查询完整性的指标。
下图对于精确率与召回率做了非常形象的可视化:
4. P-R曲线(Precision Recall Curve)
-
什么是P-R曲线?
P-R曲线是精确率随着召回率变化的曲线,他的定义为:根据模型的预测结果(一般为代表某种测度的实值或是置信度),对测试样本进行排序,按照置信度或者是定义的度量指标对样本进行排序,然后设定某个阈值y来划定测试结果中的正样本和负样本集合,并在阈值y下计算此时的Precision和Recall,按照相同的方法,设定一系列阈值y,计算出特定阈值下的Precision和Recall,将其绘制到坐标系中,就得到了P-R曲线。
-
P-R曲线怎么画?
P-R曲线实际上是一系列阈值下,计算出Precision和Recall后,绘制到图中的散点。
-
P-R曲线代表了什么信息?
如果模型A的P-R曲线被模型的P-R曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当Precision=Recall时的取值,平衡点的取值越高,性能更优。
5. F1-Score
-
什么是F1-score?
F1-score就是在计算Precision和Recall的调和平均数。
-
怎么计算F1-score?
1 F 1 = 1 2 ( 1 P r e c i s i o n + 1 R e c a l l ) \frac{1}{F1}=\frac{1}{2}(\frac{1}{Precision}+\frac{1}{Recall}) F11=21(Precision1+Recall1)F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1 = \frac{2\times Precision\times Recall}{Precision+Recall} F1=Precision+Recall2×Precision×Recall
-
F1-score表征了什么信息?
F1-score因为是调和平均数,因此比较关注两者之间较小的数字,容易被Precision和Recall中较小的数吸收掉。当F1较高时,模型的性能越好。
6. ROC曲线(Receiver Operating Characteristic曲线)
-
ROC曲线的优点是什么?
ROC曲线有着很好的特性:当测试集中正负样本的分布发生变化时,ROC曲线能够保持不变。在实际的数据集中经常会出现类别不平衡(Class Imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化,ROC以及AUC(下文中会提到)可以很好的消除样本类别不平衡对指标结果产生的影响。
-
什么是ROC曲线?
ROC是分类任务中非常常用的指标,又被称为接受者操作特征曲线。ROC曲线中两个指标是真正率TPR和假正率FPR,如下图所示:
-
真 正率(TPR,True Positive Rate),又称灵敏度,意为正样本中真正预测准确的比率。(召回率)
T P R = 正 样 本 预 测 正 确 的 数 目 正 样 本 总 数 = T P T P + F N TPR=\frac{正样本预测正确的数目}{正样本总数}=\frac{TP}{TP+FN} TPR=正样本总数正样本预测正确的数目=TP+FNTP -
假 负率(FNR, False Negative Rate),意为把正样本预测错误,是漏检样本在原始数据库里正样本中的比率。(漏检率)
F N R = 正 样 本 预 测 错 误 数 目 正 样 本 总 数 = F N T P + F N FNR=\frac{正样本预测错误数目}{正样本总数}=\frac{FN}{TP+FN} FNR=正样本总数正样本预测错误数目=TP+FNFN -
假 正率(FPR, False Positive Rate):意为把负样本预测错误,是误检样本在原始数据库里负样本中的比率。(负样本的漏检率)
F P R = 负 样 本 预 测 错 误 的 数 目 负 样 本 总 数 目 = F P T N + F P FPR = \frac{负样本预测错误的数目}{负样本总数目}=\frac{FP}{TN+FP} FPR=负样本总数目负样本预测错误的数目=TN+FPFP -
真 负率(TNR,True Negative Rate),又称特异度,意为负样本中真正预测准确的比率。(负样本的召回率)
T N R = 负 样 本 预 测 准 确 的 数 目 负 样 本 总 数 = T N T N + F P TNR=\frac{负样本预测准确的数目}{负样本总数} = \frac{TN}{TN+FP} TNR=负样本总数负样本预测准确的数目=TN+FPTN
-
-
ROC曲线怎么绘制?
在给定一个阈值的情况下,计算当前阈值下的真正率TPR和假正率FPR,然后就这样给定一系列的阈值,分别计算出相应阈值下的TPR和FPR,在将这些(TPR,FPR)的点对绘制在坐标系中就得到了ROC曲线。上图中的ROC曲线中,横轴是FPR(表征负样本的漏检率),纵轴是TPR(表征正样本的召回率)。
-
ROC曲线的含义?
在ROC曲线中,坐标点(0,0),(0,1),(1,1)代表了几种最极限的情况。
- 在(0,0)点,负样本的漏检率(横轴)为0,正样本的召回率为0,综合来看,负样本能检测到的都检测出来了,没有漏掉的,但正样本召回的数量却为0,这意味着模型输出预测结果的都是负样本,此时模型很糟糕。
- 在(0,1)点,负样本的漏检率(横轴)为0,正样本的召回率为0,综合来看,负样本检出量很充分,使负样本漏检率为0,同时比较好的是正样本的召回数目也很可观,该检出的正样本都检测到了,这样的模型就比较好。
- 在(1,1)点,负样本的漏检率(横轴)为1,正样本的召回率为1,综合来看,负样本漏检非常严重,或许是因为区分正负样本的阈值设置的低,让所有样本都成了正样本,因此虽然保证了正样本的召回率,但却会因为冗余检测而出现误检。
综合来看,TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好。
即:进行模型的性能比较时,与P-R曲线类似,若一个模型A的ROC曲线被另一个模型B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。
7. AUC(Area Under Curve)
AUC(Area Under Curve)又称为曲线下面积,是处于ROC Curve下方的那部分面积的大小。上文中我们已经提到,对于ROC曲线下方面积越大表明模型性能越好,于是AUC就是由此产生的评价指标。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的Performance。如果模型是完美的,那么它的AUC = 1,证明所有正例排在了负例的前面,如果模型是个简单的二类随机猜测模型,那么它的AUC = 0.5,如果一个模型好于另一个,则它的曲线下方面积相对较大,对应的AUC值也会较大。
8. 混淆矩阵(Confusion Matrix)
混淆矩阵又被称为错误矩阵,通过它可以直观地观察到算法的效果。它的每一列是样本的预测分类,每一行是样本的真实分类(反过来也可以),顾名思义,它反映了分类结果的混淆程度。混淆矩阵i行j列的意思是原本是类别i却被分为类别j的样本个数。