以下文章摘录自:
《机器学习观止——核心原理与实践》
京东: https://item.jd.com/13166960.html
当当:http://product.dangdang.com/29218274.html
(由于博客系统问题,部分公式、图片和格式有可能存在显示问题,请参阅原书了解详情)
————————————————
版权声明:本文为优快云博主「林学森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/xuesen_lin/
1.1 Precision、recall和mAP (mean Average Precision)
计算机领域有很多评估识别结果精度的方式,mAP就是其中应用非常广泛的一种。它的计算过程并不复杂,引用Wikipedia上的描述:
“Mean average precision for a set of queries is the mean of the average precision scores for each query.”
对应的公式是:
其中Q是指查询的次数。
Wiki上的释义虽然是针对信息检索提出来的,但同样可以被机器学习领域用于评估预测精度。在mAP公式中,涉及到了AveP(q)的计算过程。而如果要理解后者,首先得先明白3个指标:Accuracy、Recall和Precision。
不论是针对哪种场景,二分类模型的检测结果都有如下4种可能性:
l True Positive (TP)
预测值为1,实际值也为1,检测正确
l False Positive (FP)
预测值为1,但实际值为0,检测错误
l True Negative (TN)
预测值为0,实际值也为0,检测正确
l False 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
所以Accuracy = 99%, 而Precision = 2/2 = 100%。可见光从这两个值来看,这个导弹防御器的表现似乎已经非常不错了。但事实真的如此吗?毋庸置疑导弹攻击是非常致命的,所以即便是只有一次的失误,也是让人无法接受的。
或者我们再换一种思路——如果程序员为了偷懒,写了一个类似下面的导弹攻击检测器:
boolean isRealMissile()
{
return false;//管它是真是假,一律当假的处理。提前下班。。。
}
那么针对上面这一模型的评估结果如何呢?
此时:
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 |
5 |