前段时间在IP102数据集上做了一些实验,在测试集上的预测结果通过文本的方式不便于直接观察,于是有了一些可视化的需求:可视化数据的原始分布各类别的预测情况

分析

可视化数据的原始分布直接通过 plt.bar() 画柱形图就行,各类别的预测情况通过 matshow() 函数画出混淆矩阵也很方便观察。

但是混淆矩阵只是通过颜色来展示数据相对的大小,我还想通过图来看数据之间的绝对大小,也就是说我想把这两个需求放在一张图里...

那么在原始柱形图的基础上,画各类别预测情况的折线图也不是一个难事,但是当预测类别太多的时候,多条折线图糊在一起可太难观察了!于是又产生了新的需求:鼠标点击某个柱形(类别)时,显示该类别测试数据在各类别上的预测情况。

代码

这里的数据是使用某网络对IP102中水稻的14类虫害的预测结果。 本文主要想分享的是自己突发奇想的可视化方法和matplotlib鼠标点击事件的实现,相关的json文件读取、数据获取等代码这里就不粘了,需要使用的数据都直接粘在main函数里。下面是copy过去可以直接跑的代码:

import random
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator# 随机生成一个颜色
def getRandomColor():colorArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']color = ""for i in range(6):color += colorArr[random.randint(0, 14)]return "#"+color# 通过柱形图可视化测试样本分布情况,鼠标点击某个柱形图时,显示该类别测试数据在各类别上的预测情况
def visualize(idx2name, label_distr, pred_distr):classes_name = [name for idx, name in idx2name.items()]     # x轴名称x = range(len(classes_name))color_list = [getRandomColor() for i in x]      # 颜色列表fig1, ax = plt.subplots()def plot_bar():barlist = plt.bar(x, label_distr, width=0.3)   # 条形图for i in x:barlist[i].set_color(color_list[i])     # 设置每个条形的颜色plt.xticks(range(len(classes_name)), classes_name, rotation=90, fontsize=8)     # x轴各刻度的名称def call_back(event):plt.cla()plot_bar()xdata = event.xdatacur_class = round(xdata)    # 确定点击的是那个条形柱if cur_class < 0:cur_class = 0elif cur_class > len(classes_name) - 1:cur_class = len(classes_name) - 1cur_pred = pred_distr[str(cur_class)]plt.plot(x, cur_pred, color_list[cur_class], linewidth=1)plt.scatter(x, cur_pred, color="black", s=10)fig1.canvas.draw_idle()plot_bar()fig1.canvas.mpl_connect('button_press_event', call_back)    # 鼠标点击事件plt.show()# 可视化混淆矩阵
def visulize_matric(idx2name, pred_distr):classes_name = [name for idx, name in idx2name.items()]mat = []for cur_class_idx, cur_pred in pred_distr.items():cur_pred = np.array(cur_pred)cur_pred = cur_pred / sum(cur_pred)mat.append(cur_pred)fig2 = plt.figure()ax = fig2.add_subplot(111)cax = ax.matshow(mat)fig2.colorbar(cax)ax.set_xticklabels([''] + classes_name, rotation=90, fontsize=6)    # set up axesax.set_yticklabels([''] + classes_name, fontsize=6)ax.xaxis.set_major_locator(MultipleLocator(1))ax.yaxis.set_major_locator(MultipleLocator(1))plt.show()if __name__ == '__main__':# 类别索引到类别名称的映射(14)idx2name = {'0': 'brown plant hopper', '1': 'rice water weevil', '2': 'small brown plant hopper','3': 'paddy stem maggot', '4': 'grain spreader thrips', '5': 'rice shell pest','6': 'yellow rice borer', '7': 'asiatic rice borer', '8': 'rice leaf caterpillar','9': 'white backed plant hopper', '10': 'rice leafhopper', '11': 'rice leaf roller','12': 'Rice Stemfly', '13': 'rice gall midge'}label_distr = [251, 257, 166, 79, 52, 123, 152, 316, 147, 268, 122, 335, 111, 152]  # 14类数据的标签分布情况# 各类别下图片预测情况pred_distr = {'0': [110, 5, 48, 0, 0, 0, 4, 8, 0, 49, 14, 8, 1, 4],'1': [3, 217, 1, 2, 2, 0, 2, 13, 4, 4, 0, 3, 3, 3],'2': [21, 1, 88, 1, 0, 0, 1, 9, 0, 35, 3, 2, 4, 1],'3': [1, 6, 0, 39, 0, 0, 2, 7, 3, 1, 3, 1, 14, 2],'4': [1, 1, 1, 0, 40, 0, 3, 0, 0, 1, 2, 1, 2, 0],'5': [0, 2, 0, 0, 0, 63, 3, 3, 11, 2, 0, 37, 2, 0],'6': [1, 2, 0, 0, 0, 2, 108, 29, 0, 4, 1, 3, 1, 1],'7': [2, 3, 2, 9, 1, 6, 51, 203, 13, 2, 3, 16, 3, 2],'8': [1, 4, 0, 4, 3, 9, 6, 10, 80, 0, 1, 25, 2, 2],'9': [37, 3, 49, 1, 1, 4, 2, 17, 2, 137, 6, 4, 4, 1],'10': [5, 3, 12, 1, 0, 2, 1, 5, 3, 8, 76, 1, 3, 2],'11': [2, 3, 0, 3, 0, 22, 3, 10, 13, 1, 2, 267, 3, 6],'12': [0, 2, 1, 9, 0, 0, 4, 6, 3, 3, 3, 0, 78, 2],'13': [1, 1, 0, 3, 1, 2, 0, 3, 0, 4, 3, 2, 2, 130]}visualize(idx2name, label_distr, pred_distr)    # 可视化数据分布图visulize_matric(idx2name, pred_distr)   # 可视化混淆矩阵input()

效果

运行代码将会先画出柱形图(测试集中各类别的原始分布情况):

此时,点击某个柱形时,会画出该类别数据在各类别上的预测情况:

如点击图中黄色柱形,黄色柱形表示rice leaf roller这一类别共有335张图像,折线图表示这些图像在各类别上的预测情况,分别有2, 3, 0, 3, 0, 22, 3, 10, 13, 1, 2, 267, 3, 6张图像预测为第1-14类。点击其他柱形图同理。

关闭当前窗口后,将出现混淆矩阵窗口,如下:

混淆矩阵也能反映出一些数据关系和模型特性,这里不做分析。

快在自己的数据上试试吧~

深度学习测试结果可视化分析——matplotlib 鼠标响应事件相关推荐

  1. 【C4】基于深度学习的心电信号分析

    ★★★ 本文源自AI Studio社区精品项目,[点击此处]查看更多精品内容 >>> 基于深度学习的心电信号分析 一.项目背景 近年来,随着人工智能和算法的发展,以机器学习和深度学习 ...

  2. 【深度学习】Tensorboard可视化模型训练过程和Colab使用

    [深度学习]Tensorboard可视化模型训练过程和Colab使用 文章目录 1 概述 2 手撸代码实现 3 Colab使用3.1 详细步骤3.2 Demo 4 总结 1 概述 在利用TensorF ...

  3. 深度学习之LSTM案例分析(三)

    #背景 来自GitHub上<tensorflow_cookbook>[https://github.com/nfmcclure/tensorflow_cookbook/tree/maste ...

  4. 最全深度学习训练过程可视化工具(附github源码)

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 Datawhale干货 作者:Edison_G,来源:计算机视觉研究院 编辑丨极市平台 ...

  5. 免费教材丨第56期:《深度学习导论及案例分析》、《谷歌黑板报-数学之美》

    小编说  离春节更近了!  本期教材        本期为大家发放的教材为:<深度学习导论及案例分析>.<谷歌黑板报-数学之美>两本书,大家可以根据自己的需要阅读哦! < ...

  6. 《深度学习导论及案例分析》一2.11概率图模型的推理

    本节书摘来自华章出版社<深度学习导论及案例分析>一书中的第2章,第2.11节,作者李玉鑑 张婷,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.11概率图模 ...

  7. 的训练过程_最全深度学习训练过程可视化工具(附github源码)

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 Datawhale干货 作者:Edison_G,来源:计算机视觉研究院编辑丨极市平台. ...

  8. 基于深度学习的眼底影像分析最新综述

    医学影像是深度学习取得极大成功的一个领域,而眼底图像是其中一个重要的分支.眼底图像是由单目相机捕获到的眼底的2D图像. 使用眼底图像可以用于对眼科疾病诊断分级.对病变点和重要的生物标记进行分割等等,对 ...

  9. vue+django 微博舆情系统源码、深度学习+舆情扩散消失分析、舆情紧急等级、属地分析、按话题、情感预测、话题评论获取、提取观点、正面负面舆情、按区域检测舆情

    项目背景 315又马上要到了,现在有开始对食品安全话题的关注地提升了,因此,本文系统对微博的食品安全话题进行分析,有如下的功能 1.展示当前食品安全事件相关的热点信息以及提供根据食品关键词,食品安全类 ...

最新文章

  1. 漫画详解:厌氧君和好氧君,谁才是明日之子?
  2. 只因路由器密码太弱,IP被黑客利用发虐童图片,无辜夫妇:我们甚至想自杀...
  3. DottextHelper使用方法?
  4. Android学习之Android studio篇-Android Studio快捷键总结(mac)
  5. sql中使用“where 1=1 and ....“ 到底影响效率吗,回答不会也永远不会
  6. Redis的安装与简单部署
  7. 千博企业网站管理系统源码 支持电脑和手机版
  8. python 的__str__和__repr__有什么区别?
  9. (转)黑幕背后的Autorelease
  10. ubuntu查看本地ip
  11. 贝叶斯网络模型自动搭建
  12. oracle分析函数结构,oracle之分析函数解析及其应用场景
  13. SpringSecurity实战(七)-对接第三方登陆-流程分析
  14. 用正则表达式制作单线程小说网站小说下载器
  15. 加油站-问题详解(暴力-整体-贪心)
  16. uniapp小说阅读
  17. 大一微积分笔记整理_大一微积分知识点总结
  18. 在本地电脑将ip与名字相关联
  19. qt -- QSpinBox、QDoubleSpinBox
  20. android系统文件重命名文件格式,安卓手机上文件的后缀名怎么改?

热门文章

  1. 怎样获得Vollar,玩转VDS详解
  2. 基于JAVA桔子酒店客房管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  3. 文件转码(word、ppt、图片、Excal)
  4. android 读取各分区大小,Android查看各分区空间大小命令及相关操作
  5. 优思学院:解答一位想学习六西格玛的学生的几个疑惑
  6. 聚会-朋友圈(贪心法)
  7. K3无界面登录新增职员
  8. APT污水 - 使用多阶段高度混淆的PowerShell在内存中运行
  9. Istio系列学习(二)----Istio架构
  10. 校安行 | 电子学生证真的有用吗?