You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Seaborn在混淆矩阵图中展示准确率、精确率与召回率

解决方案:在Seaborn混淆矩阵中添加精确率、召回率与准确率

以下是修改后的完整代码,结合你的混淆矩阵和分类报告,实现包含分类指标的目标样式:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix

# 你的混淆矩阵(直接用给定的值)
c_mat = np.array([[65, 0, 0, 0],
                  [0, 51, 0, 0],
                  [0, 0, 31, 1],
                  [0, 0, 0, 52]])

# 从分类报告提取指标
precision = [1.00, 1.00, 1.00, 0.98]  # 对应D1-D4的精确率
recall = [1.00, 1.00, 0.97, 1.00]      # 对应D1-D4的召回率
accuracy = 0.99                        # 全局准确率
class_names = ["D1", "D2", "D3", "D4"]

# 准备混淆矩阵内的标签(计数+占比)
group_counts = ["{0:0.0f}".format(value) for value in c_mat.flatten()]
group_percentages = ["{0:.2%}".format(value / np.sum(c_mat)) for value in c_mat.flatten()]
labels = [f"{v1}\n{v2}" for v1, v2 in zip(group_counts, group_percentages)]
labels = np.asarray(labels).reshape(4, 4)

# 设置画布,预留空间放置指标
fig, ax = plt.subplots(figsize=(8, 7))

# 绘制混淆矩阵热力图
sns.heatmap(c_mat, annot=labels, cmap='Reds', fmt='', 
            xticklabels=class_names, yticklabels=class_names, 
            cbar=False, ax=ax)

# 添加每行的召回率(右侧)
for i in range(len(recall)):
    ax.text(len(class_names) + 0.3, i + 0.5, 
            f"Recall: {recall[i]:.2f}", 
            va='center', ha='left', fontweight='bold')

# 添加每列的精确率(底部)
for j in range(len(precision)):
    ax.text(j + 0.5, len(class_names) + 0.3, 
            f"Precision: {precision[j]:.2f}", 
            va='bottom', ha='center', fontweight='bold')

# 添加全局准确率(右下角)
ax.text(len(class_names)/2, len(class_names) + 0.8, 
        f"Overall Accuracy: {accuracy:.2f}", 
        va='bottom', ha='center', fontweight='bold', fontsize=12)

# 调整标题和坐标轴
ax.set_title('Predicted Damage State', fontweight='bold', pad=20)
ax.tick_params(labeltop=True, labelbottom=False, top=True, bottom=False)
ax.set_ylabel('Actual Damage State', fontweight='bold')

# 调整布局,避免指标被截断
plt.subplots_adjust(right=0.85, bottom=0.2)
plt.show()

关键修改说明:

  • 指标提取与赋值:直接从你提供的分类报告中提取精确率、召回率和全局准确率,手动赋值到列表中(如果需要自动化,可以用sklearn.metrics.classification_report的输出字典来解析)。
  • 画布空间预留:通过figsize和subplots_adjust调整画布大小和边距,为右侧的召回率、底部的精确率预留空间。
  • 文本添加:使用ax.text()在指定坐标位置添加召回率、精确率和全局准确率文本,设置对齐方式和字体加粗,确保可读性。
  • 热力图布局优化:保持原有的混淆矩阵标签(计数+占比),同时扩展布局容纳额外指标,避免元素重叠。

额外优化建议:

  • 如果目标样式要求指标嵌入到热力图的边缘(比如作为额外的行/列),可以修改混淆矩阵数组,添加额外的行和列来放置精确率和召回率,再调整热力图的配色区分指标区域。
  • 可以通过修改fontsize参数统一调整所有文本的大小,保持视觉一致性。

内容的提问来源于stack exchange,提问作者Rachit Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:22:46