详解使用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)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
python中查看变量内存地址的方法
May 05 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
python super函数使用方法详解
Feb 14 Python
python实现图片横向和纵向拼接
Mar 05 Python
python中setuptools的作用是什么
Jun 19 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
浅析Python的命名空间与作用域
Nov 25 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 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
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
json数据的列循环示例
2013/09/06 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
python爬虫容易学吗
2020/06/02 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Django admin组件的使用
2020/10/24 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
教学实验楼管理制度
2014/02/01 职场文书
合作投资意向书
2014/04/01 职场文书
总经理检讨书
2014/09/15 职场文书
校长四风对照检查材料
2014/09/27 职场文书
三八妇女节标语
2014/10/09 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书