详解使用python绘制混淆矩阵(confusion_matrix)


Posted in Python onJuly 14, 2019

Summary

涉及到分类问题,我们经常需要通过可视化混淆矩阵来分析实验结果进而得出调参思路,本文介绍如何利用python绘制混淆矩阵(confusion_matrix),本文只提供代码,给出必要注释。

Code​

# -*-coding:utf-8-*-
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import numpy as np

#labels表示你不同类别的代号,比如这里的demo中有13个类别
labels = ['A', 'B', 'C', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']


'''
具体解释一下re_label.txt和pr_label.txt这两个文件,比如你有100个样本
去做预测,这100个样本中一共有10类,那么首先这100个样本的真实label你一定
是知道的,一共有10个类别,用[0,9]表示,则re_label.txt文件中应该有100
个数字,第n个数字代表的是第n个样本的真实label(100个样本自然就有100个
数字)。
同理,pr_label.txt里面也应该有1--个数字,第n个数字代表的是第n个样本经过
你训练好的网络预测出来的预测label。
这样,re_label.txt和pr_label.txt这两个文件分别代表了你样本的真实label和预测label,然后读到y_true和y_pred这两个变量中计算后面的混淆矩阵。当然,不一定非要使用这种txt格式的文件读入的方式,只要你最后将你的真实
label和预测label分别保存到y_true和y_pred这两个变量中即可。
'''
y_true = np.loadtxt('../Data/re_label.txt')
y_pred = np.loadtxt('../Data/pr_label.txt')

tick_marks = np.array(range(len(labels))) + 0.5

def plot_confusion_matrix(cm, title='Confusion Matrix', cmap=plt.cm.binary):
  plt.imshow(cm, interpolation='nearest', cmap=cmap)
  plt.title(title)
  plt.colorbar()
  xlocations = np.array(range(len(labels)))
  plt.xticks(xlocations, labels, rotation=90)
  plt.yticks(xlocations, labels)
  plt.ylabel('True label')
  plt.xlabel('Predicted label')
  cm = confusion_matrix(y_true, y_pred)
  np.set_printoptions(precision=2)
  
cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print cm_normalized
plt.figure(figsize=(12, 8), dpi=120)

ind_array = np.arange(len(labels))
x, y = np.meshgrid(ind_array, ind_array)

for x_val, y_val in zip(x.flatten(), y.flatten()):
  c = cm_normalized[y_val][x_val]
  if c > 0.01:
    plt.text(x_val, y_val, "%0.2f" % (c,), color='red', fontsize=7, va='center', ha='center')
# offset the tick
plt.gca().set_xticks(tick_marks, minor=True)
plt.gca().set_yticks(tick_marks, minor=True)
plt.gca().xaxis.set_ticks_position('none')
plt.gca().yaxis.set_ticks_position('none')
plt.grid(True, which='minor', linestyle='-')
plt.gcf().subplots_adjust(bottom=0.15)

plot_confusion_matrix(cm_normalized, title='Normalized confusion matrix')
# show confusion matrix
plt.savefig('../Data/confusion_matrix.png', format='png')
plt.show()

Result

详解使用python绘制混淆矩阵(confusion_matrix)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表(list)常用操作方法小结
Feb 02 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
Python3实现腾讯云OCR识别
Nov 27 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
python写入文件自动换行问题的方法
Jul 05 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
python中if及if-else如何使用
Jun 02 Python
90行Python代码开发个人云盘应用
Apr 20 Python
对象析构函数__del__在Python中何时使用
Mar 22 Python
python+opencv像素的加减和加权操作的实现
Jul 14 #Python
Python实现制度转换(货币,温度,长度)
Jul 14 #Python
详解Python Qt的窗体开发的基本操作
Jul 14 #Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 #Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 #Python
Python实现Selenium自动化Page模式
Jul 14 #Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 #Python
You might like
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
javascript jQuery插件练习
2008/12/24 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python一行代码实现快速排序的方法
2019/04/30 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python多任务之协程的使用详解
2019/08/26 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
Python新手学习标准库模块命名
2020/05/29 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
求职简历自荐信范文
2013/10/21 职场文书
工商管理毕业生推荐信
2013/12/24 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫