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))

一定要设置 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")

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

相关推荐
笔触狂放22 分钟前
【机器学习】综合实训(一)
人工智能·机器学习
智算菩萨30 分钟前
国内外最新AI语言模型行情分析2025年9月最新内容
人工智能
ningmengjing_33 分钟前
激活函数:神经网络的“灵魂开关”
人工智能·深度学习·神经网络
Billy_Zuo44 分钟前
人工智能机器学习——逻辑回归
人工智能·机器学习·逻辑回归
东风西巷2 小时前
Balabolka:免费高效的文字转语音软件
前端·人工智能·学习·语音识别·软件需求
非门由也2 小时前
《sklearn机器学习——管道和复合估计器》联合特征(FeatureUnion)
人工智能·机器学习·sklearn
l12345sy2 小时前
Day21_【机器学习—决策树(1)—信息增益、信息增益率、基尼系数】
人工智能·决策树·机器学习·信息增益·信息增益率·基尼指数
非门由也2 小时前
《sklearn机器学习——管道和复合估算器》异构数据的列转换器
人工智能·机器学习·sklearn
计算机毕业设计指导2 小时前
基于ResNet50的智能垃圾分类系统
人工智能·分类·数据挖掘
飞哥数智坊2 小时前
终端里用 Claude Code 太难受?我把它接进 TRAE,真香!
人工智能·claude·trae