详解使用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的Django框架测试驱动开发的教程
Apr 22 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
Python实现栈的方法
May 26 Python
Sanic框架请求与响应实例分析
Jul 16 Python
python游戏地图最短路径求解
Jan 16 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Python3 webservice接口测试代码详解
Jun 23 Python
django跳转页面传参的实现
Sep 17 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 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安全下载文件的方法
2016/04/07 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
JS常用字符串处理方法应用总结
2014/05/22 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
Python多线程爬虫简单示例
2016/03/04 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python3.4中清屏的处理方法
2020/07/06 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
船舶专业个人求职信范文
2014/01/02 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
业务员的岗位职责
2014/03/15 职场文书
土建工程师岗位职责
2014/06/10 职场文书
终止劳动合同协议书
2014/10/05 职场文书
庆祝教师节标语
2014/10/09 职场文书
淘宝好评语句大全
2014/12/31 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js