当我训练自己设计的网络代码之后,如何去评价这个网络的好坏,这就需要用到很多性能指标,其中Precision,Recall和F1是常见的性能评价指标。
我在学习这三个指标的计算的时候,看了很多博客,发现很多博客对这几个性能指标的评价就好像是在说绕口令一样,让我的大脑很难理解这部分的内容,而且博客里面大都是用二分类的实验来举例如何计算这三个指标,也是不常用的,所以在这里我就用比较简单的语言来介绍这三个指标,争取让看到这篇博客的朋友们能一眼懂!
我们抛开学术性的描述TP,FN,FP,TN这几个部分的理解,直接从例子开始介绍。
在一个单分类多标签的训练任务中,如何去计算Precision,Recall和F1。
首先我们这个多标签的任务中是动物分类标签,一共有12类,分别是【老鼠,牛,虎,兔,龙,蛇,马,羊,猴,坤坤,狗,猪】。我选中其中的老鼠来计算三个指标。
注意,这三个指标的计算是按照每一类来计算的,我们在论文中看到的是多个类别的平均值。
在整个数据集中,老鼠一共有100张图片,其中我们划分训练集和测试集28开,训练集80张图片,测试集20张图片。现在我们用80张图片对网络进行训练,经过60个epoch训练完毕,现在使用测试集的20张图片进行测试。
经过测试发现,20张图片中网络正确预测了10张,但是在其他11个类的预测中预测错误,预测了老鼠20次,通过这几个数据就可以计算老鼠类的这三个性能指标。
TP = 网络预测结果是老鼠且预测正确的数量
FP = 网络预测结果是老鼠且预测错误的数量
TP + FP = 网络预测结果是老鼠的数量
所以结果就是:
TP = 网络预测结果是老鼠且预测正确的数量
FN = 网络预测结果不是老鼠且预测图片的label是老鼠
TP+FN = 测试集中老鼠标签的图片的数量
所以结果就是:
两个的计算结果竟然是一样的,好巧好巧。
最后是F1的计算,这个计算需要用到前两个指标,也没有什么理解,直接算就完事了
这是老鼠类的计算,那么其他类的计算也是一样,然后对所有类进行平均就可以了,希望这篇文章能对你有所帮助。