错误分析 (Machine Learning研习十九)

错误分析

您将探索数据准备选项,尝试多个模型,筛选出最佳模型,使用 Grid SearchCV微调其超参数,并尽可能实现自动化。在此,我们假设您已经找到了一个有前途的模型,并希望找到改进它的方法。其中一种方法就是分析它所犯的错误类型。

首先,查看混淆矩阵。为此,首先需要使用 cross_val_predict() 函数进行预测;然后可以像之前一样,将标签和预测值传递给 confusion_matrix()函数。不过,由于现在有 10 个类别而不是 2 个,混淆矩阵将包含大量数字,可能难以读取。

混淆矩阵的彩色图更容易分析。要绘制这样的图表,请使用ConfusionMatrixDisplay.from_predictions() 函数,如下所示:

from sklearn.metrics import ConfusionMatrixDisplayy_train_pred = cross_val_predict(sgd_clf, X_train_scaled, y_train, cv=3) ConfusionMatrixDisplay.from_predictions(y_train, y_train_pred) plt.show() 

这就产生了 图1 中的左图。这个混淆矩阵看起来相当不错:大多数图像都在主对角线上,这意味着它们被正确分类了。请注意,对角线上第 5 行第 5 列的单元格看起来比其他数字略暗。这可能是因为模型对 5 的错误较多,也可能是因为数据集中 5 的数量比其他数字少。这就是为什么要对混淆矩阵进行归一化处理,将每个值除以相应(真实)类别中的图像总数(即除以行的总和)。只需设置 normalize="true "即可。我们还可以指定 val ues_format=".0%"参数来显示不带小数点的百分比。下面的代码将生成 图1 右侧的图表:

ConfusionMatrixDisplay.from_predictions(y_train, y_train_pred,                                        normalize="true", values_format=".0%") plt.show() 

在这里插入图片描述

现在我们不难发现,只有 82% 的 5 图像被正确分类。模型在处理 5 的图像时最常见的错误是将其误判为 8:在所有 5 的图像中,有 10%的图像被误判为 8。但只有 2% 的 8 被误判为 5;混淆矩阵通常不是对称的!如果你仔细观察,就会发现很多数字都被错误地分类为 8,但从这张图上并不能一眼看出。如果想让错误更明显,可以尝试将正确预测的权重设为零。下面的代码就是这样做的,并生成了图2 左侧的图表:

sample_weight = (y_train_pred != y_train) ConfusionMatrixDisplay.from_predictions(y_train, y_train_pred,                                        sample_weight=sample_weight,                                        normalize="true", values_format=".0%") plt.show()

在这里插入图片描述

现在你可以更清楚地看到分类器所犯的错误类型了。第 8 类的那一列现在非常明亮,这证明很多图像都被误判为第 8 类。事实上,这几乎是所有类别中最常见的错误分类。但是,在解释图表中的百分比时一定要小心:请记住,我们已经排除了正确的预测结果。例如,第 7 行第 9 列中的 36% 并不意味着所有 7 的图像中有 36% 被错误分类为 9。而是指模型对 7 的图像所做的错误分类中,有 36% 被误判为 9。实际上,只有 3% 的 7 图像被错误分类为 9,如图 1 右图所示。

也可以按列而不是按行对混淆矩阵进行归一化处理:如果设置 normalize="pred",就会得到 图2 右侧的图表。例如,您可以看到 56% 被误判的 7 其实是 9。

分析混淆矩阵通常能让你深入了解改进分类器的方法。通过观察这些图,您似乎应该把精力花在减少错误的 8 上。例如,你可以尝试收集更多看起来像 8 但不是 8 的数字的训练数据,这样分类器就能学会将它们与真正的 8 区分开来。或者,你也可以设计新的特征来帮助分类器–例如,编写一种算法来计算闭合循环的数量(例如,8 有两个,6 有一个,5 没有)。或者,你也可以对图像进行预处理(例如,使用 Scikit-ImagePillow OpenCV),使某些模式(如闭合循环)更加突出。

分析单个错误也是深入了解分类器工作情况和失败原因的好方法。例如,让我们以混淆矩阵的形式绘制 3 和 5 的示例(图 3):

cl_a, cl_b = '3', '5' 
X_aa = X_train[(y_train == cl_a) & (y_train_pred == cl_a)] 
X_ab = X_train[(y_train == cl_a) & (y_train_pred == cl_b)] 
X_ba = X_train[(y_train == cl_b) & (y_train_pred == cl_a)] 
X_bb = X_train[(y_train == cl_b) & (y_train_pred == cl_b)] 
[...]  # plot all images in X_aa, X_ab, X_ba, X_bb in a confusion matrix style

在这里插入图片描述

正如您所看到的,分类器弄错的一些数字(即左下角和右上角的数字块)写得非常糟糕,甚至连人都很难对它们进行分类。不过,大多数分类错误的图像在我们看来都是显而易见的错误。我们可能很难理解分类器为什么会犯这样的错误,但请记住,人脑是一个神奇的模式识别系统,我们的视觉系统会在任何信息到达我们的意识之前进行大量复杂的预处理。因此,这项任务感觉简单并不意味着它就是简单的。回想一下,我们使用的是一个简单的 SGDClassifier,它只是一个线性模型:它所做的只是为每个像素分配一个类别权重,当它看到一个新图像时,它只是将加权像素强度相加,得到每个类别的分数。由于 3 和 5 只相差几个像素,这个模型很容易将它们混淆。

3 和 5 的主要区别在于连接顶线和底弧的小线的位置。如果您画的 3 的交界处稍微向左移动,分类器可能会将其归类为 5,反之亦然。换句话说,这种分类器对图像移动和旋转相当敏感。减少 3/5 混淆的一种方法是对图像进行预处理,以确保图像居中且没有过度旋转。然而,这并不容易,因为这需要预测每幅图像的正确旋转。一种简单得多的方法是用训练图像的轻微移动和旋转变体来增加训练集。这将迫使模型学会对这种变化有更大的容忍度。这就是所谓的数据增强

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625625.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用VLC无法播放安防监控EasyCVR平台分发出的FLV视频流,是什么原因?

安防视频汇聚平台EasyCVR不仅可支持的接入协议非常多(包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等)&#xff0…

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法。以下是一般而言的目标检测实现步骤: 1、数据收集与标注:首先需要收集包含目标物体的大量图像数据,并对这些图像进行标注,标注出目标物体的位置和类别信息。这些…

Netty学习——实战篇4 Netty开发Http服务实战、ByteBuf使用、开发群聊系统

1 Netty开发Http服务实战 (1)Netty服务器监听8000端口,浏览器发出请求“http://localhost:8000” (2)服务器可以回复消息给客户端,“你好,我是服务器”,并对特定请求资源进行过滤。 HttpServer…

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)

Docker之自定义镜像上传至阿里云

一、Alpine介绍 Alpine Linux是一个轻量级的Linux发行版,专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库,使得它具有出色的性能和资源利用率。 Alpine Linux的主要特点包括: 小巧轻量:Alpine Linux的安装…

内网隧道技术总结

隧道技术解决的是网络通信问题,因为在内网环境下,我们不同的内网主机管理员会进行不同的网络配置,我们就需要使用不同的方式去控制我们的内网主机。隧道技术是一个后渗透的过程,是可以是我们已经取得了一定的权限,在这…

二维码门楼牌管理应用平台建设:场所维护的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的兴起二、民警与网格员的角色定位三、场所信息审核的重要性四、技术支持与创新应用五、未来展望与挑战 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台的建设正成为城市管理的新宠。该平台不仅提高了场所管理的…

如何恢复硬盘数据?小白也要掌握的4个方法!

“我将很多重要的文件都保存在电脑里了,不知道是电脑中病毒还是什么原因,我有些比较重要的数据丢失了,有什么方法可以恢复丢失的电脑数据吗?” 硬盘作为电脑存储数据的核心部件,一旦数据丢失或损坏,往往会给…

新手小白花几个月勇敢裸辞转行网络安全

我是 25 岁转行学网络安全的。说实在,转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景,三流大学毕业,物流专业,学习能力一般,没啥特别技能,反正就很普通…

SCI一区 | Matlab实现POA-TCN-BiGRU-Attention鹈鹕算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测

SCI一区 | Matlab实现POA-TCN-BiGRU-Attention鹈鹕算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现POA-TCN-BiGRU-Attention鹈鹕算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考…

C++入门之类和对象

C入门之类和对象 文章目录 C入门之类和对象1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有,那么这个类就是一个空类。但是&…

自动化测试Selenium(3)

目录 WebDriver相关API 打印信息 打印title 打印url 浏览器的操作 浏览器最大化 设置浏览器的宽,高 操作浏览器的前进, 后退, 刷新 控制浏览器滚动条 键盘事件 键盘单键用法 键盘组合按键用法 鼠标事件 WebDriver相关API 打印信息 打印title 即打印该网址的标题.…