详解使用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实现类似ftp传输文件的网络程序示例
Apr 08 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
python多进程实现进程间通信实例
Nov 24 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
Django models filter筛选条件详解
Mar 16 Python
解决django FileFIELD的编码问题
Mar 30 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
python+requests接口自动化框架的实现
Aug 31 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 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 信息采集程序代码
2009/03/17 PHP
很好用的PHP数据库类
2009/05/27 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
js获取class的所有元素
2013/03/28 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python hook监听事件详解
2018/10/25 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
python查看数据类型的方法
2019/10/12 Python
用 Python 制作地球仪的方法
2020/04/24 Python
python 6行代码制作月历生成器
2020/09/18 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
html5与css3小应用
2013/04/03 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
致跳高运动员广播稿
2014/01/13 职场文书
在校生自我鉴定
2014/01/23 职场文书
投资合作协议书
2014/04/17 职场文书
励志演讲稿300字
2014/08/21 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL