混淆矩阵、精度、召回与F1得分(混淆矩阵的准确率)
off999 2024-11-08 12:48 21 浏览 0 评论
你是否曾期望机器学习模型能取得很好的结果,但结果却很差?你付出了努力,那么问题出在哪里?如何解决?
评估分类模型的方法有很多,但混淆矩阵(confusion matrix)是最可靠的选择之一。它显示了模型的表现如何以及在哪里出错,从而帮助你改进。
初学者经常觉得混淆矩阵令人困惑,但它实际上很简单,功能强大。本教程将解释机器学习中的混淆矩阵是什么,以及它如何提供模型性能的完整视图。
尽管名字如此,但你会发现混淆矩阵简单有效。让我们一起探索混淆矩阵吧!
NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割
1、什么是混淆矩阵?
混淆矩阵是机器学习中的一种性能评估工具,表示分类模型的准确性。它显示真阳性、真阴性、假阳性和假阴性的数量。该矩阵有助于分析模型性能、识别错误分类并提高预测准确性。
混淆矩阵是一个 N x N 矩阵,用于评估分类模型的性能,其中 N 是目标类别的总数。矩阵将实际目标值与机器学习模型预测的值进行比较。这让我们全面了解我们的分类模型的表现如何以及它犯了哪些类型的错误。
对于二元分类问题,我们将有一个 2 x 2 矩阵,如下所示,包含 4 个值:
让我们来解读一下这个矩阵:
- 目标变量有两个值:正值(Positive)或负值(Negative)
- 列表示目标变量的实际值(Actual Values)
- 行表示目标变量的预测值(Predicted Values)
但等等——这里的 TP、FP、FN 和 TN 是什么?这是混淆矩阵的关键部分。让我们在下面理解每个术语。
2、混淆矩阵中的重要术语
真阳性 (TP - True Positive):
- 预测值与实际值匹配,或预测类别与实际类别匹配。
- 实际值为正,模型预测为正值。
真阴性 (TN - True Negative):
- 预测值与实际值匹配,或预测类别与实际类别匹配。
- 实际值为负,模型预测为负值。
假阳性 (FP - False Positive) – I 类错误
- 预测值被错误预测。
- 实际值为负,但模型预测为正值。
- 也称为 I 类错误。
假阴性 (FN - False Negative) – II 类错误
- 预测值被错误预测。
- 实际值为正,但模型预测为负值。
- 也称为 II 类错误。
让我举一个例子来更好地理解这一点。假设我们有一个包含 1000 个数据点的分类数据集。我们在其上拟合一个分类器(例如逻辑回归或决策树)并得到以下混淆矩阵:
混淆矩阵的不同值如下:
- 真阳性 (TP) = 560,表示模型正确分类了 560 个正类数据点。
- 真阴性 (TN) = 330,表示模型正确分类了 330 个负类数据点。
- 假阳性 (FP) = 60,表示模型错误地将 60 个负类数据点归类为属于正类。
- 假阴性 (FN) = 50,表示模型错误地将 50 个正类数据点归类为属于负类。
考虑到真阳性和真阴性值的数量相对较大,这对于我们的数据集来说是一个相当不错的分类器。
记住 I 类和 II 类错误。面试官喜欢问这两者之间的区别!
3、为什么我们需要混淆矩阵?
在回答这个问题之前,让我们先考虑一个假设的分类问题。
假设你想预测在出现症状并将他们与健康人群隔离之前有多少人感染了传染性病毒(有没有想到什么?)。我们的目标变量的两个值将是患病和未患病。
现在,你一定想知道,既然我们有全天候的朋友——准确度(Accuracy),为什么还需要混淆矩阵。好吧,让我们看看分类准确度有什么问题。点。我们将这样计算准确度:
让我们看看模型表现如何:
总体结果值为:
TP = 30,TN = 930,FP = 30,FN = 10
因此,我们模型的准确率结果为:
96%!还不错!
但它给出了错误的结论。想想看。
我们的模型说,“我可以 96% 的把握预测病人”。然而,它却在做相反的事情。它以 96% 的准确率预测不会生病的人,而病人却在传播病毒!
考虑到问题的严重性,你认为这是我们模型的正确指标吗?我们难道不应该衡量我们能正确预测多少阳性病例来阻止传染性病毒的传播吗?或者,在正确的预测中,有多少是阳性病例来检查我们模型的可靠性?
这就是我们遇到精确度(Precision)和召回率(Recall)的双重概念的地方。
4、如何计算 2 类分类问题的混淆矩阵?
要计算 2 类分类问题的混淆矩阵,需要了解以下内容:
- 真阳性 (TP):正确预测为阳性的样本数量。
- 真阴性 (TN):正确预测为阴性的样本数量。
- 假阳性 (FP):错误预测为阳性的样本数量。
- 假阴性 (FN):错误预测为阴性的样本数量。
获得这些值后,可以使用下表计算混淆矩阵:
以下是如何计算二类分类问题的混淆矩阵的示例:
# True positives (TP)
TP = 100
# True negatives (TN)
TN = 200
# False positives (FP)
FP = 50
# False negatives (FN)
FN = 150
# Confusion matrix
confusion_matrix = [[TP, FP], [FN, TN]]混淆矩阵可用于计算各种指标,例如准确率、精确度、召回率和 F1 分数。
5、精确度与召回率
精确度告诉我们有多少正确预测的案例实际上是阳性的。以下是如何计算精确度:
这将决定我们的模型是否可靠。
召回率告诉我们我们能够用我们的模型正确预测多少实际阳性案例。以下是我们如何计算召回率:
我们可以通过将值代入上述问题来轻松计算模型的精确度和召回率:
50% 的正确预测病例最终被证明是阳性病例。而我们的模型成功预测了 75% 的阳性病例。太棒了!
在FP比FN更受关注的情况下,精确度是一个有用的指标。?
精确度在音乐或视频推荐系统、电子商务网站等中非常重要。错误的结果可能会导致客户流失并对业务造成损害。
在FN比FP更受关注的情况下,召回率是一个有用的指标。??
在医疗案例中,召回率很重要,因为无论我们是否发出错误警报都无关紧要,但实际的阳性病例不应该被忽视!
在我们的例子中,当处理传染性病毒时,混淆矩阵变得至关重要。召回率评估捕获所有实际阳性的能力,是一个更好的指标。我们的目标是避免错误地将感染者释放到健康人群中,从而可能传播病毒。这一背景凸显了为什么准确率不足以作为我们模型评估的指标。混淆矩阵,尤其是关注召回率,在这种关键情况下提供了更有洞察力的衡量标准
但有些情况下,准确率和召回率哪个更重要并没有明显的区别。在这种情况下我们应该怎么做?我们把它们结合起来!
6、F1 分数是什么?
实际上,当我们试图提高模型的精确度时,召回率就会下降,反之亦然。F1 分数用一个值来捕捉这两种趋势:
F1 分数是精确度和召回率的调和平均值,因此它给出了关于这两个指标的综合概念。当精确度等于召回率时,它最大。
但这里有一个问题。F1 分数的可解释性很差。这意味着我们不知道我们的分类器最大化的是什么——精确度还是召回率。因此,我们将它与其他评估指标结合使用,从而为我们提供结果的完整图景。
7、使用 Python 构建混淆矩阵
我们已经了解了理论,现在将其付诸实践。让我们使用 Python 中的 Scikit-learn (sklearn) 库编写一个混淆矩阵。
Sklearn 有两个很棒的函数: confusion_matrix() 和 classification_report()。
- confused_matrix() 返回混淆矩阵的值。但是,输出与我们迄今为止研究的略有不同。它将行作为实际值,将列作为预测值。其余概念保持不变。
- classification_report() 输出每个目标类的精度、召回率和 f1 分数。除此之外,它还有一些额外的值:微平均值、宏平均值和加权平均值
微平均值(micro average)是针对所有类别计算的精度/召回率/f1 分数:
宏平均值(macro average)是精度/召回率/f1 分数的平均值:
加权平均值(weighted average)只是精度/召回率/f1 分数的加权平均值。
8、多类分类的混淆矩阵
机器学习中的混淆矩阵如何用于多类分类问题?好吧,别挠头了!我们在这里看看。
让我们为多类问题绘制一个混淆矩阵,我们必须预测一个人是喜欢 Facebook、Instagram 还是 Snapchat。混淆矩阵将是一个 3 x 3 矩阵,如下所示:
每个类别的真阳性、真阴性、假阳性和假阴性将通过将单元格值相加来计算,如下所示:
就是这样!我们已准备好解读任何 N x N 混淆矩阵!
9、结束语
混淆矩阵不再那么令人困惑了,对吧?
希望本文能为你提供有关如何解释和使用混淆矩阵进行机器学习分类算法的坚实基础。该矩阵有助于理解模型出错的地方,并提供纠正路径的指导,它是评估机器学习分类模型性能的强大且常用的工具。
原文链接:混淆矩阵简明教程 - BimAnt
相关推荐
- 传奇盒子平台大全(传奇盒子赚钱)
-
在996传奇盒子中,会员玩家可以在“我的游戏”中通过“云玩”进入之前体验过的传奇游戏,开启挂机模式后,就能在“云多开”系统里观察到自己的云设备和正在进行云游戏状态的传奇游戏,如果点进手机后台,还能看到...
- pdf查看软件(查看pdf格式的软件)
-
pdf当然可以有查找功能:1、第一步:首先我们要使用WPSOffice打开PDF文档。2、第二步:我们需要依次点击“开始”--->“查找”(或使用快捷键“Ctrl+F”)。3、第三步:我们在查...
- 中国象棋下载安装(下载中国象棋官方版)
-
不用刻意下载个中国象棋APP,只需要下载一个QQ游戏,里头就有中国象棋玩了,里头点开后,自动下载,还可以连接其他玩家,一起玩,切磋棋艺。你这问题太模糊了。。。是你有一个象棋游戏,想放到桌面上,双击就可...
- 手机bt下载软件哪个好(手机有什么下载bt的软件)
-
磁力下载app推荐黑科技APP,这个好用黑科下载器APP也是一款功能强大且使用的下载类工具应用,它支持磁力以及种子文件的下载。还可以把下载的的文件转存到云盘,并支持在线的云播预览功能,无需等待能直接边...
- 狂野飙车9下载(狂野飙车9下载入口)
-
您可以在AppStore搜索“狂野飙车9”或者直接使用Safari等浏览器搜索“狂野飙车9官方下载”,进入官网下载页面,点击下载按钮并根据提示进行下载安装即可。在下载前请确保您的苹果设备已连接稳定...
-
- 免费相册视频制作软件(怎么把拍的照片做成视频)
-
电脑端1.会声会影会声会影上手简单而且做出的相册的效果也很不错,很适合新手使用,x7以前的版本都是可以自己去免费用的。2.premiere(pr)pr是一款比较专业的视频剪辑制作软件,用它来做电子相册也是很不错的,做出的效果很高大上,如果只...
-
2026-01-17 21:43 off999
- 图片文字修改神器免费(手机无痕修改图片文字软件)
-
首先区分是完整图片导入还是ai软件自己编写的文字,如果导入的图片无法修改,只能像ps一样去修图,如果是软件编写的,无法选取先要解锁,方法:上面任务栏对象-选择全部解锁。然后修改。修改方法:如果对方编组...
- 开户最忌三个证券公司(随便哪个证券公司开户都一样吗)
-
在不同的证券公司开户,确实存在一些区别。首先,不同的证券公司提供的交易品种和交易费用可能不同,有些公司可能提供更广泛的投资选择,而有些公司则可能提供更低的佣金率,这直接影响到您的投资成本和收益。其次,...
- 农行手机银行app下载(中国农业银行App下载)
-
自己下载的农行手机银行是能转账的,只是额度可能会要低一些,比如一类卡,在农行网点注册下载并开通手机银行,一天转账的额度是有十万,而自己下载注册开通的手机银行额度则只有5万,自己是可以下载农行手机银行是...
- 下载本机手机管家(手机管家华为专用版下载)
-
可以在手机的应用商店中下载就可以了你看看有没有办法把他弄到桌面上,比如刷新桌面,如果影响使用的话,建议恢复出厂设置吧,我以前也出现过这种情况,刷机之后就好了电脑管家目前是不支持手机终端登录的所以无法...
- 广州疫情最新消息(广州疫情最新消息通知)
-
当然可以,深圳去广州的交通发达也便捷,可以乘坐大巴车、火车、高铁、自驾车均可到达广州的各大客运站、火车站、城市地标,到站后还可以乘坐公交车、地铁、打车到你想去的目的地。 深圳...
- 大型网络游戏排行榜前十(目前大型网络游戏排行)
-
最热门的有很多的,每个人的标准都不一样的,但是只要自己喜欢就好,无有传齐所有职业都有四个被动技能,游侠的四个技能分别是:游猎者、梦魇、鹰眼术和原动力。作用分别是对减速单位额外造成伤害,暴击是额外提高伤...
- 苹果15(苹果15pro)
-
1、屏幕机身方面:iPhone15配有黑色、白色、红色、绿色、蓝色五款颜色,配备6.1英寸超视网膜XDR显示屏,支持HDR显示、原彩显示、广色域(P3)、2000000:1对比度(典型)...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
Python 批量卸载关联包 pip-autoremove
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
