虽然已经了解了准确率,精准率,召回率,平均精度AP, mAP的概念,但有时经常不用,等到用上的时候,还是会犯湖涂,有点儿混乱,所以索性自己写一个例子。
混淆矩阵 | Positive | Negative |
True | TP, 真正例 预测为正,实际也为正 |
TN, 真负例 预测为负,实际为负 |
False | FP, 假正例 预测为正,实际为负 |
FN, 假负例 预测为负,实际为正 |
True/False, 不是指样本是正是负,而是指判断是否正确。
例:
假如样本数量100,正样本20,负样本80;现在进行100次预测,预测结果如下:
TP = 15, FP = 30, TN = 50, FN = 5;
一、
P(Precision),精准率,P = TP / (TP + FP)
怎么理解精准率呢,分母都有P,是站在预测的角度,对于我们关注的正样本而言。
在我们预测为正样本的次数中,预测正确的记为TP(确实是正例,而且预测也为正例);
在我们预测为正样本的次数中,除了TP外,还有预测错误的情况,就是FP(预测正例,但实际并负例);
这么理解就容易了,对于我们关注的正样本,我们预测正确的次数占我们所有预测为正样本次数的比例,就是精准率,对于负样本,我们不关心;
比如我们通过拍片判断某人是否得了癌症,AI去判断的话,那么我们就只是关心有癌症的情况;
对于例题, P = 15 / (15 + 30) = 0.33
二、
R(Recall),召回率,R = TP / (TP + FN)
怎么理解召回率呢,分母TP是预测为正实际也为正,FN是预测为负实际为正,共性就是实际都为正,它是站在样本的角度来看的。
也就是对于我们关心的正样本而言,对于所有的正样本数量,被你判断出来的比例。
例题中,有20个正样本,被你判断出来的TP = 15,还有5个判断错了(FN)
所以R = 15 / 20 = 0.75
Question:
召回率高,准确率为什么会低呢?
我举个特殊情况,方便快速理解。对于例题中的100次预测,如果我全部预测为P,那么TP=20, FP=80, TN=0, FN=0
召回率R = 20 / (20 + 0) = 1,也就是老子瞎猜它全是正的,老子全选C,把所有正样本都找出来了,但是负样本也同样全部被认成是正样本了;
此时,精准率P = 20 / (20 + 80) = 0.2,也就是预测了100次正例,只有20次对了,精准率很低;
Question:
精准率高,召回率为什么会低呢?
我也举个特殊情况,对于例题中的100次预测,如果我全部预测1次为P,99次为N,可能恰好这个P是预测正确的,即TP = 1, FP = 0, TN = 80, FN = 19
那么精准率P = 1 / (1 + 0) = 1, 召回率R = 1 / (1 + 19) = 0.2
也就是我这么预测,对于预测为正的次数中,我是一击即中,再击没有了,做了回一秒真男人,但是总共有20个正样本,我只找出了1个,所以召回率就低了。
还是那句话:
精准率是站在预测的角度,召回率是站在样本的角度
三、
ACC(Accuracy),准确率;
前面精准率,召回率,都是关注点在正样本上,但是对于分类任务来说,预测正确与否,不单单是看正样本,负样本你预测为负,那也是一种正确。
所以,准确率是考虑所有样本,所有预测情况。
ACC = (TP + TN) / (TP + TN + FP + FN) = (15 + 50)/ (15 + 30 + 50 + 5) = 0.65
四、
AP(Average Precision),平均精度
这个写得蛮好,看这个吧