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打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
python使用pil生成图片验证码的方法
May 08 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
一份python入门应该看的学习资料
Apr 11 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
Django开发中的日志输出的方法
Jul 02 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
Pytorch中的数据集划分&正则化方法
Pytorch 如何实现常用正则化
You might like
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
PHP合并静态文件详解
2014/11/14 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
JS的replace方法详细介绍
2012/11/09 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
JavaScript中的this机制
2016/01/30 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
Python ATM功能实现代码实例
2020/03/19 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
浅谈Python 参数与变量
2020/06/20 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
工作室成员个人发展规划范文
2014/01/24 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
留学顾问岗位职责
2014/04/14 职场文书