详解使用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守护进程(daemon)代码实例
Mar 06 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
Python实现字典的key和values的交换
Aug 04 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
Python 通配符删除文件的实例
Apr 24 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
人工神经网络算法知识点总结
Jun 11 Python
python处理document文档保留原样式
Sep 23 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
python 多线程共享全局变量的优劣
Sep 24 Python
python tkinter实现连连看游戏
Nov 16 Python
使用python向MongoDB插入时间字段的操作
May 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/06 新手入门
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
laravel学习教程之关联模型
2016/07/30 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
js返回顶部实例分享
2016/12/21 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
简单介绍Python中的RSS处理
2015/04/13 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
使用python为mysql实现restful接口
2018/01/05 Python
python3爬取各类天气信息
2018/02/24 Python
用Python读取几十万行文本数据
2018/12/24 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
学习python需要有编程基础吗
2020/06/02 Python
java字符串格式化输出实例讲解
2021/01/06 Python
C#公司笔试题
2014/03/28 面试题
《最后的姿势》教学反思
2014/02/27 职场文书
法学院毕业生求职信
2014/06/25 职场文书
优秀大学生自荐信
2015/03/26 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
幼儿园教师辞职信
2019/06/21 职场文书