详解使用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的迭代器与生成器实例详解
Jul 16 Python
python实现八大排序算法(2)
Sep 14 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Django异步任务线程池实现原理
Dec 17 Python
pytorch实现线性拟合方式
Jan 15 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
python OpenCV学习笔记
Mar 31 Python
Python基础详解之描述符
Apr 28 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
Tornado 多进程实现分析详解
2018/01/12 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
python中wx模块的具体使用方法
2020/05/15 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
几个SQL的面试题
2014/03/08 面试题
软件缺陷的分类都有哪些
2014/08/22 面试题
网络工程师的自我评价
2013/10/02 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书