首先有四个基本概念是由二分类的混淆矩阵得来,需要了解。

TP:将实际正样本预测为正样本
FP:将负样本预测为正样本
TN:将负样本预测为负样本
FN:将正样本预测为正样本

最开始的时候分类可能认准了准确率(accuracy)作为评估指标。但是呢如果样本的正负样本很不均衡就会出现问题,准确率只考虑到了正样本的预测问题。比方说我们有一个预测person的任务,有1000张样本数据,其中有980张图片是person,还有剩下的20张是background,而我们训练的模型将1000张图片全部预测为person,我们的准确率也有98%,这样的模型指标很好看,但能运用到是实际生产环境中去吗,肯定是不行的。为此才出现了precision和recall.

precision = TP /(TP + FP)

上面就是精确率(precision)的公式,表达的意思就是用训练好的模型去测试我们的测试数据集,即实际正样本预测为正样本的数目占模型将数据预测为正样本的数目之比。我的理解是准确率是精确率的边界值,如果样本将正负样本都预测为正样本,这时precision和accuracy是相等的。

recall = TP/(TP + FN)

recall的公式表达的意思就是模型将实际正样本预测为正样本的数目和数据集中实际正样本数目之比。

为什么说precision和recall是相互影响的呢,通常是此消彼长。而且各自都有应用场景,比如说分类中模型预测会为每张图片分类,并打上分数(score),当我们把阈值设置的非常高时,可能很少的样本被预测为正样本,由于分数阈值设置的比较高,很可能模型预测为正样本的样本实际上都为正样本。这样的话精确率会非常高。但是召回率会很低,因为只有小部分的样本为预测为了正样本,还有很多负样本就被预测为了正样本,这是召回率自然而然就降低了。

谁都想两全其美,但是可能不能一味的追求某一个单方面的指标了,这时就出现了F1-score,F1-score就是同时兼顾精准率和召回率,是精准率和召回率的调和平均值。

F1 = 2*precision*recall/(precision + recall)