详解使用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实现二叉堆
Feb 03 Python
python模拟Django框架实例
May 17 Python
python实现杨辉三角思路
Jul 14 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
详解python中的线程
Feb 10 Python
详解Python字典小结
Oct 20 Python
python实现烟花小程序
Jan 30 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 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通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
任意位置显示html菜单
2007/02/01 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
vue实现扫码功能
2020/01/17 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
python实现给微信公众号发送消息的方法
2017/06/30 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
html5 学习简单的拾色器
2010/09/03 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
传媒专业推荐信范文
2013/11/23 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
社会学专业求职信
2014/07/17 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
技术员岗位职责范本
2015/04/11 职场文书
Java版 简易五子棋小游戏
2022/05/04 Java/Android