详解使用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 相关文章推荐
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
Python 闭包的使用方法
Sep 07 Python
python opencv3实现人脸识别(windows)
May 25 Python
Python中反射和描述器总结
Sep 23 Python
BP神经网络原理及Python实现代码
Dec 18 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
tensorflow 实现数据类型转换
Feb 17 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python源文件的字符编码知识点详解
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
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
深入理解python中的闭包和装饰器
2016/06/12 Python
浅谈python数据类型及类型转换
2017/12/18 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python实现图像外边界跟踪操作
2020/07/13 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
销售辞职报告范文
2014/01/12 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
农业项目投资意向书
2015/05/09 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
javascript实现计算器功能详解流程
2021/11/01 Javascript
SQL Server实现分页方法介绍
2022/03/16 SQL Server
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python