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实现文件名批量替换和内容替换
Mar 20 Python
跟老齐学Python之开始真正编程
Sep 12 Python
Python-嵌套列表list的全面解析
Jun 08 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
如何利用python 读取配置文件
Jan 06 Python
Python 里最强的地图绘制神器
Mar 01 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
Pytorch中的数据集划分&正则化方法
Pytorch 如何实现常用正则化
You might like
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
php一个找二层目录的小东东
2012/08/02 PHP
php进程间通讯实例分析
2016/07/11 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
MooTools 1.2介绍
2009/09/14 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python实用代码片段收集贴
2015/06/03 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
2019年大学推荐信
2019/06/24 职场文书
Golang中异常处理机制详解
2021/06/08 Golang
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电