1 混淆矩阵定义
混淆矩阵:Confusion Matrix,用于直观展示每个类别的预测情况,能从中计算准确率(Accuracy)、精度(Precision)、召回率(Recall)、交并比(IoU)。
混淆矩阵是n*n
的矩阵(n是类别),对角线上的是正确预测的数量。
每一行之和是该类的真实样本数量,每一列之和是预测为该类的样本数量。
2 np.bincount()函数解读
返回从0到 array中最大值 每个数出现的次数
np.bincount(array, minlength)
minlength:限制返回列表的最小长度,不够用0填
举例:
if __name__=='__main__':
import numpy as np
x = np.array([1,3,3,4,5,4,7])
x_True_False1 = np.array([True,True,True,True,True,True,True])
x1 = x[x_True_False2] # [3 3 4 5 4 7]
x_True_False2 = np.array([True,True,True,True,True,True,True])
x = x[x_True_False2]
print(x) # [1 3 3 4 5 4 7]
y = np.bincount(x) # 返回从0到输入array中最大值 每个数出现的次数
print(y) # [0 1 0 2 2 1 0 1]
z = np.bincount(x, minlength=9) # minlength限制返回列表的最小长度,长度不够,0来凑
print(z) # [0 1 0 2 2 1 0 1 0]
print(z.reshape(3,3))
"""
[[0 1 0]
[2 2 1]
[0 1 0]]
"""
3 生成混淆矩阵
在这里,x和x_label的位置可以交换,但理解方式就不同了,要注意!文章来源:https://www.toymoban.com/news/detail-409916.html
if __name__=='__main__':
x = np.array([1,3,3,4,5,4,7])
x_label = np.array([1,3,3,4,5,5,7]) # 假设有10类
print(np.bincount(10*x.astype(int)+x_label, minlength=10**2).reshape(10,10))
"""
[[0 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 2 0 0 0 0 0 0]
[0 0 0 0 1 1 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
"""
假设n=10,有10类,
对于预测正确的像素来说,n * x + x_label就是对角线的值,
很明显,非对角线上的那个就是预测错的,它把5预测成了4,为什么出现在那个位置:
10*4+5=45,出现在第5行第6列(注意索引和类别的关系!)文章来源地址https://www.toymoban.com/news/detail-409916.html
4 感谢链接
https://www.jianshu.com/p/42939bf83b8a
到了这里,关于【np.bincount】np.bincount()用在分割领域生成混淆矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!