机器学习指标(Precision、Recall、mAP、F1Score等)
26个字母图片以下⽂章摘录⾃:
《机器学习观⽌——核⼼原理与实践》
vitamine(由于博客系统问题,部分公式、图⽚和格式有可能存在显⽰问题,请参阅原书了解详情)
————————————————
版权声明:本⽂为CSDN博主「林学森」的原创⽂章,遵循CC 4.0 BY-SA版权协议,转载请附上原⽂出处链接及本声明。
1.1 Precision、recall和mAP (mean Average Precision)
计算机领域有很多评估识别结果精度的⽅式,mAP就是其中应⽤⾮常⼴泛的⼀种。它的计算过程并不复杂,引⽤Wikipedia上的描述:“Mean average precision for a t of queries is the mean of the average precision scores for each query.”
对应的公式是:
其中Q是指查询的次数。
美式英语和英式英语的区别Wiki上的释义虽然是针对信息检索提出来的,但同样可以被机器学习领域⽤于评估预测精度。在mAP公式中,涉及到了AveP(q)的计算过程。⽽如果要理解后者,⾸先得先明⽩3个指标:Accuracy、Recall和Precision。
不论是针对哪种场景,⼆分类模型的检测结果都有如下4种可能性:stick是什么意思
l True Positive (TP)
预测值为1,实际值也为1,检测正确
l Fal Positive (FP)
预测值为1,但实际值为0,检测错误
l True Negative (TN)
预测值为0,实际值也为0,检测正确
l Fal Negative (FN)
预测值为0,实际值为1,检测错误
Accuracy和Precision都很好理解,它们指的是:
Accuracy = (TP + TN) / (TP + FP + TN + FN)欲望都市第一季
Precision = TP / (TP + FP)
但是仅有这两个指标是不够的。举个实际的例⼦⼤家就很好理解了:我们知道“导弹攻击信号”有可能是真实的,也可能是模拟出来的。现在假设100次中真正的导弹攻击事件是3次,同时某导弹攻击防御器成功检测出了其中的两次。那么可以得出:
TP=2
TN=97
FP=0
FN=1
shortlist
所以Accuracy = 99%, ⽽Precision = 2/2 = 100%。可见光从这两个值来看,这个导弹防御器的表现似乎已经⾮常不错了。但事实真的如此吗?⽏庸置疑导弹攻击是⾮常致命的,所以即便是只有⼀次的失误,也是让⼈⽆法接受的。
或者我们再换⼀种思路——如果程序员为了偷懒,写了⼀个类似下⾯的导弹攻击检测器:
boolean isRealMissile()
{
return fal;//管它是真是假,⼀律当假的处理。提前下班。。。
}
那么针对上⾯这⼀模型的评估结果如何呢?
此时:
TP = 0
TN = 97
FP = 0
FN = 3
因⽽Accuracy = 97%。也就是说即便什么都不做,系统也可以达到很⾼的准确率,这显然不是我们希望看到的结果。
这也是引⼊Recall的原因之⼀。它的定义如下所⽰:
Recall = TP / (TP+FN)
⽽上述两种情况因为Recall值分别为66.6%及0,终于得到了相对公正的评价。
理解了Precision和Recall后,接下来我们就可以进⼀步分析Average Precision了。对于⼀个多标签图像分类系统来说,每⼀个预测分类(例如⼩猫)都可以得到它们的confidence score,以及对应的Ground Truth Label。范例如下:
Index Confidence Score Ground Truth Label
50.981
40.951
20.890
10.821
俄罗斯世界杯主题曲30.781
60.670
………
上表已经按照Confidence Score进⾏了排序,Index指的是参与分类的图⽚编号。
假设我们认为列表中的Top-2是Positive的,那么对照Ground Truth Label不难发现TP = 2,同理也可以计算得出TP等其它值,并最终得到Top-2情况下的Recall和其对应的Precision。
再假设我们认为列表中的Top-3是Positive的,那么同样的最终也能得到这种情况下的Recall和其对应的Precision。如此循环直到Top-N,此时Recall的值⼀定为1。
在上述的循环过程中,我们实际上得到的是所谓的precision-recall function。如果以recall为横坐标,p
recision为纵坐标绘制出curve,那么将得到类似如下的图形:
图 ‑ Precision-recall curve
关于PRC曲线,我们后续⼩节还会有进⼀步的介绍。
Average Precision简单来说就是针对每个recall对应的precision求均值得来的。因为是多标签分类的任务,所以还可以对所有分类情况做AP,然后取均值,也就得到了mean Average Precision (mAP)了。
1.2 F1 Score
F1 Score⼜称为平衡F分类,其与precision和recall都有关系——准确地说它兼顾了后两者,是它们的⼀种加权平均。
showroom
具体⽽⾔,F1 Score的公式如下:
另外,我们还可以由此引申出 ,如下所⽰:
不难看出,F1是上述公式的特例,其它常⽤的还有F2, F0.5等等。
那么⼈们提出F1 Score的意义是什么呢?
很简单,就是为了解决当precision和recall出现冲突时的“难以抉择”的情况。⽐如当我们遇到类似下⾯这样的场景时:
模型Recall precision
模型10.60.8
模型20.80.6
究竟是模型1更好,还是模型2更佳呢?
此时Fβ就可以发挥作⽤了——F1认为recall和precision的权重是⼀样的,⽽F2则认为前者⽐后者重要(成反⽐),等等。
F分数⽬前被应⽤于多个机器学习算法领域,是⼀个相当通⽤的衡量指标,我们在后续多个章节中还会再看到它的⾝影。
1.3 Confusion Matrix
Confusion Matrix (混淆矩阵),⼜称为可能性表格或是错误矩阵,是⼀种⽤来呈现算法性能效果的特定矩阵。
下⾯我们结合⼀个实际的混淆矩阵来做下释义。如下所⽰:
precision recall f1-score support
体育 0.99 0.99 0.99 1000
财经 0.96 0.99 0.97 1000
dj音标房产 1.00 1.00 1.00 1000
家居 0.95 0.91 0.93 1000
教育 0.95 0.89 0.92 1000
科技 0.94 0.97 0.95 1000
时尚 0.95 0.97 0.96 1000
时政 0.94 0.94 0.94 1000
游戏 0.97 0.96 0.97 1000
娱乐 0.95 0.98 0.97 1000
这是⼀个⽂本分类器的范例,可以看到它包含了体育、财经、房产等10个分类。上述的⼀系列数值描述了每⼀个分类的precision、recall 等信息,它们为我们理解分类器的全局性能提供了关键输⼊。
如果我们还想细化分析每⼀种类别的实际分类结果呢?
此时就可以⽤到混淆矩阵了。
如下所⽰:
[[991 0 0 0 2 1 0 4 1 1]
[ 0 992 0 0 2 1 0 5 0 0]
[ 0 1 996 0 1 1 0 0 0 1]
[ 0 14 0 912 7 15 9 29 3 11]
[ 2 9 0 12 892 22 18 21 10 14]
[ 0 0 0 10 1 968 4 3 12 2]
[ 1 0 0 9 4 4 971 0 2 9]
[ 1 16 0 4 18 12 1 941 1 6]
[ 2 4 1 5 4 5 10 1 962 6]
[ 1 0 1 6 4 3 5 0 1 979]]
上⾯所述的就是这个⽂本分类器的confusion matrix评估结果。不难看出它的⾏列数都是10,也就是⼀个n*n的矩阵。其中每⼀⾏都是⼀个真实的归属类别,因⽽每⼀⾏的数据总数表⽰该类别的数据实例的数⽬;⽽每⼀列则是真实类别被预测为该类的数⽬。⽰意图如下所⽰:
表格 ‑ Confusion matrix的⾏列释义
预测类别
类别1类别2类别3类别4
实际归属类别类别1
类别2
类别3
类别4
以前⾯的范例来讲,第⼀⾏对应的真实类别是“体育”——⽽预测结果中,“体育”(true positive)的数量是991,其它被预测为“财经”、“房产”、“家居”、“教育”的数量则分别为0、0、0和2。
所以通过confusion matrix,我们不仅可以计算出true positive、true negative、fal positive、fal negative四个数值,⽽且还能进⼀步挖掘出预测结果中准确或者不准确的地⽅具体有哪些。这给我们⾄少带来了如下⼀些好处:
l 更有针对性的调整模型参数
通过观察和分析每⼀种类别的实际预测结果,有助于“对症下药”改善分类器模型
l 更有针对性的分析数据集问题
对于数据集不平衡(即每⼀类别的数据样本数量相差太⼤)的情况,单纯从precision等指标很难看出来,⽽confusion matrix则可以给出有效的指引
1.4 ROC
ROC,即receiver operating characteristic curve通常直译为接收器操作特性曲线或者受试者⼯作特征曲线。
⼤家先来看⼀下ROC实际“长什么样⼦”,如下图所⽰:
图 ‑ ROC曲线
pn
从图中可以清晰地看到,ROC的横纵坐标分别是1-Specificity和Sensitivity。这两个指标⼜是什么呢?简单地说,它们分别代表的是Fal Positive Rate和True Positive Rate。
根据前⾯的学习:
l True Positive (TP)
预测值为1,实际值也为1,检测正确
l Fal Positive (FP)
预测值为1,但实际值为0,检测错误
l True Negative (TN)
预测值为0,实际值也为0,检测正确