详解使用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 多进程并发操作中进程池Pool的实例
Nov 01 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
使用Python从零开始撸一个区块链
Mar 14 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python生成并处理uuid的实现方式
Mar 03 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
关于Keras Dense层整理
May 21 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
php PDO异常处理详解
2016/11/20 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
python遍历路径破解表单的示例
2020/11/21 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
销售代理协议书
2014/09/30 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
python 单机五子棋对战游戏
2022/04/28 Python