Matplotlib绘制混淆矩阵的实现


Posted in Python onMay 27, 2021

对于机器学习多分类模型来说,其评价指标除了精度之外,常用的还有混淆矩阵和分类报告,下面来展示一下如何绘制混淆矩阵,这在论文中经常会用到。

代码如下:

import itertools
import matplotlib.pyplot as plt
import numpy as np
# 绘制混淆矩阵
def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues):
    """
    - cm : 计算出的混淆矩阵的值
    - classes : 混淆矩阵中每一行每一列对应的列
    - normalize : True:显示百分比, False:显示个数
    """
    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        print("显示百分比:")
        np.set_printoptions(formatter={'float': '{: 0.2f}'.format})
        print(cm)
    else:
        print('显示具体数字:')
        print(cm)
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)
    # matplotlib版本问题,如果不加下面这行代码,则绘制的混淆矩阵上下只能显示一半,有的版本的matplotlib不需要下面的代码,分别试一下即可
    plt.ylim(len(classes) - 0.5, -0.5)
    fmt = '.2f' if normalize else 'd'
    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, format(cm[i, j], fmt),
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")
    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.show()

测试数据:

cnf_matrix = np.array([[8707, 64, 731, 164, 45],
                      [1821, 5530, 79, 0, 28],
                      [266, 167, 1982, 4, 2],
                      [691, 0, 107, 1930, 26],
                      [30, 0, 111, 17, 42]])
attack_types = ['Normal', 'DoS', 'Probe', 'R2L', 'U2R']

第一种情况:显示百分比

plot_confusion_matrix(cnf_matrix, classes=attack_types, normalize=True, title='Normalized confusion matrix')

效果:

Matplotlib绘制混淆矩阵的实现

Matplotlib绘制混淆矩阵的实现

第二种情况:显示数字

plot_confusion_matrix(cnf_matrix, classes=attack_types, normalize=False, title='Normalized confusion matrix')

效果:

Matplotlib绘制混淆矩阵的实现

Matplotlib绘制混淆矩阵的实现

到此这篇关于Matplotlib绘制混淆矩阵的实现的文章就介绍到这了,更多相关Matplotlib 混淆矩阵内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
详解python中requirements.txt的一切
Mar 03 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
python3 深浅copy对比详解
Aug 12 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
python3中编码获取网页的实例方法
Nov 16 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
python 三种方法提取pdf中的图片
Feb 07 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 Python
Golang Web 框架Iris安装部署
Aug 14 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
Pytorch中的数据集划分&正则化方法
Pytorch 如何实现常用正则化
You might like
PHP上传图片、删除图片简单实例
2016/11/12 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
Python闭包函数定义与用法分析
2018/07/20 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python对象与json相互转换的方法
2019/05/07 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
怎样声明一个匿名的内部类
2016/06/01 面试题
经管应届生求职信范文
2014/05/18 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
联欢会开场白
2015/06/01 职场文书
关于开学的感想
2015/08/10 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python