图像多标签标注准确率(accuracy)、精确率(precision)、召回率(recall)和F1值计算

参考链接:https://blog.csdn.net/weixin_41650458/article/details/82555775

  • 图像多标签标注准确率(accuracy)[mAP]、精确率(precision)、召回率(recall)和F1值计算
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 13 21:09:48 2019

@author: muli
"""
import numpy as np 

# 矩阵每行为一个样本, 即本案例中,有10张图片
# 列数 表示标签种类数,即本案例中,有5类标签 ====》 0表示没有,1表示有

y_true=np.array([[0,0,1,1,0],
   [0,0,0,0,1],
   [0,0,1,1,0],
   [0,0,1,1,0],
   [0,0,1,1,0],
   [0,0,1,1,0],
   [0,0,1,1,0],
   [0,0,0,0,1],
   [0,0,1,0,0],
   [0,0,0,0,1]])


y_pred=np.array([[0,0,1,0,0],
         [0,0,0,0,1],
         [0,0,1,1,0],
         [0,0,0,1,0],
         [0,0,0,0,0],
         [0,0,0,1,0],
         [0,0,0,1,0],
         [0,0,0,0,1],
         [0,0,1,0,0],
         [0,0,0,0,1]])


# True Positive:即y_true与y_pred中同时为1的个数
TP = np.sum(np.logical_and(np.equal(y_true, 1), np.equal(y_pred, 1)))   # 10
#TP = np.sum(np.multiply(y_true, y_pred)) #同样可以实现计算TP
# False Positive:即y_true中为0但是在y_pred中被识别为1的个数
FP = np.sum(np.logical_and(np.equal(y_true, 0), np.equal(y_pred, 1)))   #  0
# False Negative:即y_true中为1但是在y_pred中被识别为0的个数
FN = np.sum(np.logical_and(np.equal(y_true, 1), np.equal(y_pred, 0)))  # 6
# True Negative:即y_true与y_pred中同时为0的个数
TN = np.sum(np.logical_and(np.equal(y_true, 0), np.equal(y_pred, 0)))  # 34

# 根据上面得到的值计算A、P、R、F1
A=(TP+TN)/(TP+FP+FN+TN) #y_pred与y_ture中同时为1或0
P=TP/(TP+FP) #y_pred中为1的元素同时在y_true中也为1
R=TP/(TP+FN) #y_true中为1的元素同时在y_pred中也为1
F1=2*P*R/(P+R) 
    
print(A) # A=44/50
print(P) # P=10/10
print(R) # R=10/16
print(F1) 

你可能感兴趣的:(python,深度学习)