【论文必用】Python绘制混淆矩阵

这篇具有很好参考价值的文章主要介绍了【论文必用】Python绘制混淆矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、混淆矩阵介绍

  混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目。每一列中的数值表示真实数据被预测为该类的数目。

  以下图为例,第一行的数值总和为2+0+0=2,表示ant类别共有2个样本,其中,有2个样本被预测为ant类别,0个样本被预测为bird类别,0个样本被预测为cat类别,即ant类别的图像全预测正确了。其他行同理。
【论文必用】Python绘制混淆矩阵
  上面这个混淆矩阵并没有归一化,对其进行归一化后的结果如下。以第三行为例进行解释:0.33表示有33%的cat图像被预测为了ant,0%的cat图像被预测为bird,也即没有cat图像被预测为bird,67%的cat图像被预测为cat。
【论文必用】Python绘制混淆矩阵
  上面说这么多,主要是想让大家直观地理解混淆矩阵到底是怎么一回事。总是,混淆矩阵可以让我们清晰地看到网络的错分情况

二、绘制混淆矩阵

  在下面这个代码中,主要用到的两个函数分别是:库函数confusion_matrix自定义函数plot_confusion_matrix。其中,库函数只需要安装【scikit】包,具体安装命令如下。

【论文必用】Python绘制混淆矩阵
  自定义函数plot_confusion_matrix大家直接粘贴下面的代码就行。

  实际应用时,大家只需要 改一下 下述代码中的 真实标签y_true预测标签y_pred ,及 标签名称label_name 即可。需要注意的是 label_name的顺序是按0,1,2的顺序排的 ,即因为ant的数字标签为0,因此它在第一位,bird的数字标签为1,因此它在第二位,cat的数字标签为2,因此它在第三位。以此类推。

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



# 绘制混淆矩阵的函数
def plot_confusion_matrix(cm, labels_name, title="Confusion Matrix",  is_norm=True,  colorbar=True, cmap=plt.cm.Blues):
    if is_norm==True:
        cm = np.around(cm.astype('float') / cm.sum(axis=1)[:, np.newaxis],2)  # 横轴归一化并保留2位小数

    plt.imshow(cm, interpolation='nearest', cmap=cmap)  # 在特定的窗口上显示图像
    for i in range(len(cm)):
        for j in range(len(cm)):
            plt.annotate(cm[j, i], xy=(i, j), horizontalalignment='center', verticalalignment='center') # 默认所有值均为黑色
            # plt.annotate(cm[j, i], xy=(i, j), horizontalalignment='center', color="white" if i==j else "black", verticalalignment='center') # 将对角线值设为白色
    if colorbar:
        plt.colorbar() # 创建颜色条

    num_local = np.array(range(len(labels_name)))
    plt.xticks(num_local, labels_name)  # 将标签印在x轴坐标上
    plt.yticks(num_local, labels_name)  # 将标签印在y轴坐标上
    plt.title(title)  # 图像标题
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

    if is_norm==True:
        plt.savefig(r'.\cm_norm_' + '.png', format='png')
    else:
        plt.savefig(r'.\cm_' + '.png', format='png')
    plt.show() # plt.show()在plt.savefig()之后
    plt.close()



y_true = [2, 0, 2, 2, 0, 1] # 真实标签
y_pred = [0, 0, 2, 2, 0, 2] # 预测标签
label_name = ['ant', 'bird', 'cat']
cm = confusion_matrix(y_true, y_pred) # 调用库函数confusion_matrix
plot_confusion_matrix(cm, label_name, "Confusion Matrix", is_norm=False) # 调用上面编写的自定义函数
plot_confusion_matrix(cm, label_name, "Confusion Matrix", is_norm=True) # 经过归一化的混淆矩阵

三、在深度学习代码中添加绘制混淆矩阵模块

  在上述代码中,真实标签和预测标签都给定好了,那么如何在深度学习中根据图像真实标签和预测标签,从而对每个Epoch的错分情况进行绘制呢?具体做法如下,只需要在模型主函数的测试模块中,加入下述几行代码,即可。(注:笔者是做表情识别方向的,因此类别数总共有7种。)

【论文必用】Python绘制混淆矩阵

  至此,本博文就结束了。如果本文对你有所帮助的话,欢迎订阅本专栏。永远相信美好的事情即将发生。文章来源地址https://www.toymoban.com/news/detail-423585.html

到了这里,关于【论文必用】Python绘制混淆矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像分类模型评估之用python绘制混淆矩阵confusion_matrix

    目录 训练完成后,生成混淆矩阵!!!! ImageNet数据格式,生成混淆矩阵!!!! 非 ImageNet数据格式,定义导入数据的类名和方法!!!! 非imageNet数据格式,完成生成混淆矩阵程序代码!!!! 混淆矩阵:是用于评估分类模型性能的一种常用工具,可以用于计算分类准确

    2024年02月01日
    浏览(54)
  • Python遥感图像处理应用篇(二十八):Python绘制遥感图像分类结果混淆矩阵和计算分类精度

    Indians Pines高光谱数据,使用SVM分类方法(选取10%样本量)计算得到的结果。 参考数据: 分类数据:

    2024年02月13日
    浏览(57)
  • 混淆矩阵的绘制

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 主要展示在分类算法预测的过程中,加入混淆矩阵的绘制。 代码如下(示例): 代码如下(示例): 代码如下(示例): 代码如下(示例):

    2024年02月15日
    浏览(36)
  • 【Matlab】在matlab绘制渐变混淆矩阵

    混淆矩阵是一种表示分类模型预测结果的标准格式,用n行n列的矩阵形式来表示1。它可以用来评估模型的精度、召回率、特异性等指标23。混淆矩阵的行表示真实类别,列表示预测类别,矩阵的元素表示各种类别组合的样本数量34。

    2024年02月11日
    浏览(59)
  • Matplotlib绘制混淆矩阵及colorbar标签设置

    本文提供一种通过Matplotlib绘制混淆矩阵并调整colorbar标签的程序。 直接上程序: 最终绘制结果如下图所示:   一些参考文章: python实现混淆矩阵 - 知乎 混淆矩阵的解析和python代码实现 - 知乎 使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等_一懒百邪生的

    2024年02月11日
    浏览(44)
  • 基于MMdetection框架的目标检测研究-6.混淆矩阵绘制

    文章背景: 当我们训练完模型后,我们需要用训练后的模型对正负样本图片进行目标检测测试,这时候我们需要算模型在新的数据集上的检测效果(精度、过杀率、漏检率,准确度等),这时候使用测试后的结果绘制成混淆矩阵,可以很方便的帮助我们呈现和理解模型的泛化能

    2024年02月17日
    浏览(47)
  • python实现混淆矩阵(numpy)

    假设有A、B、C、D、E五个类别 step1:将pred和label进行一对一组合 Step2:遍历list_pred_label,将其中的类别转为混淆矩阵索引(A:0,B:1,C:2,D:3,E:4) step3:对混淆矩阵进行赋值

    2024年02月12日
    浏览(38)
  • Python数据分析:混淆矩阵

    【小白从小学Python、C、Java】 【Python全国计算机等级考试】 【Python数据分析考试必会题】 ● 标题与摘要 Python数据分析 混淆矩阵 ● 选择题 以下关于混淆矩阵说法错误的是: A TP是被正确分类的正例个数 B FN是被错误分类的正例个数 C 主对角元素是不同类别样例被正确分类的

    2023年04月08日
    浏览(42)
  • Python 使用numpy.bincount计算混淆矩阵

    Confusion matrix using numpy.bincount. np.bincount 用于统计一个非负数组中元素的出现次数。函数格式如下: 通常默认数组 x x

    2024年02月07日
    浏览(42)
  • Python手动输入混淆矩阵,并计算混淆矩阵的准确率、精确率、召回率、特异度、F1-score

    其中json格式的文件如下: {     \\\"0\\\": \\\"13\\\",     \\\"1\\\": \\\"18\\\",     \\\"2\\\": \\\"23\\\",     \\\"3\\\": \\\"28\\\",     \\\"4\\\": \\\"33\\\" } 可以按照以上格式(以5分类为例),先写在记事本上再更改后缀名 *注意最后一个后面没有 “,”  没有扩展名的看下面这个图给它调出来↓ 代码部分参考如下:  参考文献:使用

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包