Python利用Seaborn绘制多标签的混淆矩阵

 更新时间:2022年07月15日 09:22:07   作者:SpikeKing  
混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。本文将利用Seaborn绘制多标签的混淆矩阵,感兴趣的可以学习一下

Seaborn - 绘制多标签的混淆矩阵、召回、精准、F1

导入seaborn\matplotlib\scipy\sklearn等包:

import seaborn as sns
from matplotlib import pyplot as plt
from scipy.special import softmax
from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score, f1_score

sns.set_theme(color_codes=True)

从dataframe中,获取y_true(真实标签)和y_pred(预测标签):

y_true = df["target"]
y_pred = df['prediction']

计算验证数据整体的准确率acc、精准率precision、召回率recall、F1,使用加权模式average=‘weighted’:

# 准确率acc,精准precision,召回recall,F1
acc = accuracy_score(df["target"], df['prediction'])
precision = precision_score(y_true, y_pred, average='weighted')
recall = recall_score(y_true, y_pred, average='weighted')
f1 = f1_score(y_true, y_pred, average='weighted')
print(f'[Info] acc: {acc}, precision: {precision}, recall: {recall}, f1: {f1}')

计算混淆矩阵:

# 横坐标是真实类别数,纵坐标是预测类别数
cf_matrix = confusion_matrix(y_true, y_pred)

5类矩阵的绘制方案,混淆矩阵、百分比的混淆矩阵、召回矩阵、精准矩阵、F1矩阵:

  • 混淆矩阵是计数,百分比的混淆矩阵是占比
  • 召回矩阵是,每行的和是1,每行代表真实类别数,占比就是召回
  • 精准矩阵是,每列的和是1,每列代表预测列表数,占比就是精准
  • F1矩阵是按照 2PR/(P+R),注意为0的情况,需要补0,使用np.divide(a, b, out=np.zeros_like(a), where=(b != 0))

代码如下:

# 横坐标是真实类别数,纵坐标是预测类别数
cf_matrix = confusion_matrix(y_true, y_pred)

figure, axes = plt.subplots(2, 2, figsize=(16*1.25, 16))

# 混淆矩阵
ax = sns.heatmap(cf_matrix, annot=True, fmt='g', ax=axes[0][0], cmap='Blues')
ax.title.set_text("Confusion Matrix")
ax.set_xlabel("y_pred")
ax.set_ylabel("y_true")
# plt.savefig(csv_path.replace(".csv", "_cf_matrix.png"))
# plt.show()

# 混淆矩阵 - 百分比
cf_matrix = confusion_matrix(y_true, y_pred)
ax = sns.heatmap(cf_matrix / np.sum(cf_matrix), annot=True, ax=axes[0][1], fmt='.2%', cmap='Blues')
ax.title.set_text("Confusion Matrix (percent)")
ax.set_xlabel("y_pred")
ax.set_ylabel("y_true")
# plt.savefig(csv_path.replace(".csv", "_cf_matrix_p.png"))
# plt.show()

# 召回矩阵,行和为1
sum_true = np.expand_dims(np.sum(cf_matrix, axis=1), axis=1)
precision_matrix = cf_matrix / sum_true
ax = sns.heatmap(precision_matrix, annot=True, fmt='.2%', ax=axes[1][0], cmap='Blues')
ax.title.set_text("Precision Matrix")
ax.set_xlabel("y_pred")
ax.set_ylabel("y_true")
# plt.savefig(csv_path.replace(".csv", "_recall.png"))
# plt.show()

# 精准矩阵,列和为1
sum_pred = np.expand_dims(np.sum(cf_matrix, axis=0), axis=0)
recall_matrix = cf_matrix / sum_pred
ax = sns.heatmap(recall_matrix, annot=True, fmt='.2%', ax=axes[1][1], cmap='Blues')
ax.title.set_text("Recall Matrix")
ax.set_xlabel("y_pred")
ax.set_ylabel("y_true")
# plt.savefig(csv_path.replace(".csv", "_precision.png"))
# plt.show()

# 绘制4张图
plt.autoscale(enable=False)
plt.savefig(csv_path.replace(".csv", "_all.png"), bbox_inches='tight', pad_inches=0.2)
plt.show()

# F1矩阵
a = 2 * precision_matrix * recall_matrix
b = precision_matrix + recall_matrix
f1_matrix = np.divide(a, b, out=np.zeros_like(a), where=(b != 0))
ax = sns.heatmap(f1_matrix, annot=True, fmt='.2%', cmap='Blues')
ax.title.set_text("F1 Matrix")
ax.set_xlabel("y_pred")
ax.set_ylabel("y_true")
plt.savefig(csv_path.replace(".csv", "_f1.png"))
plt.show()

输出混淆矩阵、混淆矩阵(百分比)、召回矩阵、精准矩阵:

F1 Score:

到此这篇关于Python利用Seaborn绘制多标签的混淆矩阵的文章就介绍到这了,更多相关Python Seaborn混淆矩阵内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python流程控制 if else实现解析

    Python流程控制 if else实现解析

    这篇文章主要介绍了Python 流程控制 if else实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • pytorch ssim计算详细代码例子

    pytorch ssim计算详细代码例子

    这篇文章主要给大家介绍了关于pytorch ssim计算的相关资料,结构相似性(SSIM)是一种测量两幅图像的相似度的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 详解pytest中runtestprotocol方法的实现

    详解pytest中runtestprotocol方法的实现

    runtestprotocol 是 pytest 执行测试流程中的一个核心函数,它主要负责调用测试函数的“setup”、“call”和“teardown”钩子函数,并生成对应的测试报告,本文将深入探究pytest中runtestprotocol方法的实现,需要的朋友可以参考下
    2023-10-10
  • Python3模拟登录操作实例分析

    Python3模拟登录操作实例分析

    这篇文章主要介绍了Python3模拟登录操作,结合实例形式分析了Python3模拟登陆验证、判断、文件读写等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Python链式调用数据处理实际应用实例探究

    Python链式调用数据处理实际应用实例探究

    本文将深入介绍Python链式调用的概念、原理以及实际应用,通过丰富的示例代码,帮助读者更全面地理解和应用这一编程技巧
    2024-01-01
  • python GUI图形化编程wxpython的使用

    python GUI图形化编程wxpython的使用

    这篇文章主要介绍了python GUI图形化编程wxpython的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • pytorch 多分类问题,计算百分比操作

    pytorch 多分类问题,计算百分比操作

    这篇文章主要介绍了pytorch 多分类问题,计算百分比操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例

    Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例

    这篇文章主要介绍了Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据,结合实例形式分析了Python基于逻辑回归模型的数值运算相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • pandas分别写入excel的不同sheet方法

    pandas分别写入excel的不同sheet方法

    今天小编就为大家分享一篇pandas分别写入excel的不同sheet方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 浅谈Django QuerySet对象(模型.objects)的常用方法

    浅谈Django QuerySet对象(模型.objects)的常用方法

    这篇文章主要介绍了浅谈Django QuerySet对象(模型.objects)的常用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论