当前位置:   article > 正文

sklearn混淆矩阵的计算和seaborn可视化

sklearn混淆矩阵的计算和seaborn可视化

为了计算语义分割的指标miou,需要生成的中间过程就是混淆矩阵。

iou = intersection / union

每个类别的平均iou就是mean iou。

使用sklearn自带的confusion_matrix能很容易生成混淆矩阵,可以进行混淆矩阵的可视化观察哪个类别分割的不好。

from sklearn.metrics import confusion_matrix

# 定义总的混淆矩阵
matrix = np.zeros((self.n, self.n), dtype=np.int64)

# 每个batch的数据都按照一下的方法添加进混淆矩阵:
# pred:  NxC
# label: N

pred_l = pred.max(dim=1)[1]
matrix += confusion_matrix(label.int().cpu().numpy(), pred_l.cpu().numpy(), labels=range(13))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

一定要设置 labels=range(13),否则labels不全可能生成不了完整尺寸的混淆矩阵。

可以使用seaborn进行可视化。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


sns.heatmap(data=matrix / np.sum(matrix, axis=0, keepdims=True), 
            annot=True,
            fmt=".2f", 
            xticklabels=class_name,
            cmap='GnBu')
plt.xticks(rotation=45, ha='right')
plt.ylabel('Pred')
plt.xlabel('True')
plt.title('Confusion Matrix')

plt.tight_layout()

plt.savefig("confusion.png")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

matrix按照列进行求和,这样能够按照label值归一化到1。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/485209
推荐阅读
相关标签
  

闽ICP备14008679号