前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >4.4.2分类模型评判指标(一) – 混淆矩阵(Confusion Matrix)

4.4.2分类模型评判指标(一) – 混淆矩阵(Confusion Matrix)

作者头像
全栈程序员站长
发布于 2022-08-27 07:25:42
发布于 2022-08-27 07:25:42
5.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

简介

混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。

一句话解释版本:

混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。

数据分析与挖掘体系位置

混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于分类型的数据模型,如分类树(Classification Tree)、逻辑回归(Logistic Regression)、线性判别分析(Linear Discriminant Analysis)等方法。

在分类型模型评判的指标中,常见的方法有如下三种:

  1. 混淆矩阵(也称误差矩阵,Confusion Matrix)
  2. ROC曲线
  3. AUC面积

本篇主要介绍第一种方法,即混淆矩阵,也称误差矩阵。

此方法在整个数据分析与挖掘体系中的位置如下图所示。

混淆矩阵的定义

混淆矩阵(Confusion Matrix),它的本质远没有它的名字听上去那么拉风。矩阵,可以理解为就是一张表格,混淆矩阵其实就是一张表格而已。

以分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。

我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是positive,哪些是negative。

因此,我们就能得到这样四个基础指标,我称他们是一级指标(最底层的):

  • 真实值是positive,模型认为是positive的数量(True Positive=TP)
  • 真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第二类错误(Type II Error)
  • 真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第一类错误(Type I Error)
  • 真实值是negative,模型认为是negative的数量(True Negative=TN)

将这四个指标一起呈现在表格中,就能得到如下这样一个矩阵,我们称它为混淆矩阵(Confusion Matrix):

混淆矩阵的指标

预测性分类模型,肯定是希望越准越好。那么,对应到混淆矩阵中,那肯定是希望TP与TN的数量大,而FP与FN的数量小。所以当我们得到了模型的混淆矩阵后,就需要去看有多少观测值在第二、四象限对应的位置,这里的数值越多越好;反之,在第一、三象限对应位置出现的观测值肯定是越少越好。

二级指标

但是,混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭算个数,很难衡量模型的优劣。因此混淆矩阵在基本的统计结果上又延伸了如下4个指标,我称他们是二级指标(通过最底层指标加减乘除得到的):

  • 准确率(Accuracy)—— 针对整个模型
  • 精确率(Precision)
  • 灵敏度(Sensitivity):就是召回率(Recall)
  • 特异度(Specificity)

我用表格的方式将这四种指标的定义、计算、理解进行了汇总:

通过上面的四个二级指标,可以将混淆矩阵中数量的结果转化为0-1之间的比率。便于进行标准化的衡量。

在这四个指标的基础上在进行拓展,会产令另外一个三级指标

三级指标

这个指标叫做F1 Score。他的计算公式是:

其中,P代表Precision,R代表Recall。

F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

混淆矩阵的实例

当分类问题是二分问题是,混淆矩阵可以用上面的方法计算。当分类的结果多于两种的时候,混淆矩阵同时适用。

一下面的混淆矩阵为例,我们的模型目的是为了预测样本是什么动物,这是我们的结果:

通过混淆矩阵,我们可以得到如下结论:

Accuracy

在总共66个动物中,我们一共预测对了10 + 15 + 20=45个样本,所以准确率(Accuracy)=45/66 = 68.2%。

以猫为例,我们可以将上面的图合并为二分问题:

Precision

所以,以猫为例,模型的结果告诉我们,66只动物里有13只是猫,但是其实这13只猫只有10只预测对了。模型认为是猫的13只动物里,有1条狗,两只猪。所以,Precision(猫)= 10/13 = 76.9%

Recall

以猫为例,在总共18只真猫中,我们的模型认为里面只有10只是猫,剩下的3只是狗,5只都是猪。这5只八成是橘猫,能理解。所以,Recall(猫)= 10/18 = 55.6%

Specificity

以猫为例,在总共48只不是猫的动物中,模型认为有45只不是猫。所以,Specificity(猫)= 45/48 = 93.8%。

虽然在45只动物里,模型依然认为错判了6只狗与4只猫,但是从猫的角度而言,模型的判断是没有错的。

(这里是参见了Wikipedia,Confusion Matrix的解释,https://en.wikipedia.org/wiki/Confusion_matrix)

F1-Score

通过公式,可以计算出,对猫而言,F1-Score=(2 * 0.769 * 0.556)/( 0.769 + 0.556) = 64.54%

同样,我们也可以分别计算猪与狗各自的二级指标与三级指标值。

ROC曲线在R中的实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ISLR)

cor(Smarket[,-9])
attach(Smarket)

# logistic Model
model_LR <- glm(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume,
                family = binomial,
                data = Smarket)

# Make prediction 
prob_LR <- predict(model_LR, type = 'response', newdata = Smarket[1:300,])
prob_LR <- predict(model_LR, type = 'response', newdata = Smarket[,])


# create a vector of class predictions based on wether the predicted probability of a market increase is greater than or less than 0.5
pred_LR <- rep("Down" , 1250)          
pred_LR[prob_LR > 0.5] = 'Up'        

# Confusion Matrix
table(pred_LR, Direction)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146302.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
K8s pod 动态弹性扩缩容(HPA )部署!步骤齐全,少走坑路
Horizontal Pod Autoscaler(HPA,Pod水平自动伸缩),根据平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标自动调整 Deployment 、ReplicaSet 或 StatefulSet 或其他类似资源,实现部署的自动扩展和缩减,让部署的规模接近于实际服务的负载。HPA不适用于无法缩放的对象,例如DaemonSet。
民工哥
2022/10/27
6.8K0
K8s pod 动态弹性扩缩容(HPA )部署!步骤齐全,少走坑路
Kubernetes HPA 控制器横向伸缩的关键实现
HPA 是 Kubernetes 中横向伸缩的实现,里面有很多可以借鉴的思想,比如延迟队列、时间序列窗口、变更事件机制、稳定性考量等关键机制, 让我们一起来学习下大佬们的关键实现。
我是阳明
2020/06/19
1K0
Kubernetes HPA 控制器横向伸缩的关键实现
基于事件驱动的Kubernetes弹性伸缩工具keda
本规范描述了ScaledObject自定义资源定义,用于定义 KEDA 应如何扩展您的应用程序以及触发器是什么。
码农小辉
2022/09/07
1.8K0
一文搞懂使用 KEDA 实现 Kubernetes 自动弹性伸缩
Hello folks,我是 Luga,今天我们来聊一下云原生生态领域相关的技术 - Auto Scaling ,即 “弹性伸缩” 。
Luga Lee
2023/12/26
2.7K0
一文搞懂使用 KEDA 实现 Kubernetes 自动弹性伸缩
一文看懂 Kubernetes 弹性伸缩
在 Kubernetes 集群中,自动化资源管理和伸缩是保持应用高效运行的关键。Kubernetes 提供了几种不同的机制来帮助实现这一目标:水平自动伸缩(HPA, Horizontal Pod Autoscaler)、垂直自动伸缩(VPA, Vertical Pod Autoscaler)和集群自动伸缩(CA, Cluster Autoscaler)。这些伸缩器在功能和使用场景上有所不同:
SRE运维手记
2024/09/06
5400
一文看懂 Kubernetes 弹性伸缩
挖掘Kubernetes 弹性伸缩:水平 Pod 自动扩展的全部潜力
Kubernetes 已成为容器编排事实上的标准,为大规模管理容器化应用程序提供了强大的平台。Kubernetes 的一项基本功能是其弹性伸缩功能,它允许应用程序根据工作负载和性能指标进行扩展或缩减。在本文中,我们将探讨 Horizontal Pod Autoscaler (HPA),它是 Kubernetes 自动缩放的关键组件。我们将深入研究 HPA 的基础知识、它的工作原理以及如何使用自定义指标和资源限制来增强其性能。
用户1107783
2023/09/11
1K0
挖掘Kubernetes 弹性伸缩:水平 Pod 自动扩展的全部潜力
在腾讯云容器服务 TKE 中利用 HPA 实现业务的弹性伸缩
jokey,腾讯云容器产品工程师,热衷于云原生领域。目前主要负责腾讯云TKE 的售中、售后的技术支持,根据客户需求输出合理技术方案与最佳实践。 概述 Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler,以下简称 HPA)可以基于 CPU 利用率、内存利用率和其他自定义的度量指标自动扩缩 Pod 的副本数量,以使得工作负载服务的整体度量水平与用户所设定的目标值匹配。本文将介绍和使用腾讯云容器服务 TKE 的 HPA 功能实现 Pod 自动水平扩缩容。 使用场景 H
腾讯云原生
2020/12/03
2.8K0
Kubernetes 微服务最佳实践
原文作者:ryan4yin,🔗: https://thiscute.world/posts/kubernetes-best-practices/ 本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes 配置」,是我个人的「最佳实践」。其中大部分内容都经历过线上环境的考验,但是也有少部分还只在我脑子里模拟过,请谨慎参考。 阅读前的几个注意事项: 这份文档比较长,囊括了很多内容,建议当成参考手册使用,先参照目录简单读一读,有需要再细读相关内容。 这份文档需要一定的 Kube
我的小碗汤
2023/03/19
1.2K0
Kubernetes 微服务最佳实践
kubernetes(十六) k8s 弹性伸缩
常规的做法是给集群资源预留保障集群可用,通常20%左右。这种方式看似没什么问题,但放到Kubernetes中,就会发现如下2个问题。
alexhuiwang
2020/09/23
3.6K0
kubernetes(十六) k8s 弹性伸缩
Pod容器自动伸缩(HPA) 测试
HPA(Horizontal Pod Autoscaler)在k8s集群中用于POD水平自动伸缩,它是基于CPU和内存利用率对Deployment和Replicaset控制器中的pod数量进行自动扩缩容(除了CPU和内存利用率之外,也可以基于其他应程序提供的度量指标custom metrics进行自动扩缩容)。pod自动缩放不适用于无法缩放的对象,比如DaemonSets。HPA由Kubernetes API资源和控制器实现。资源决定了控制器的行为,控制器会周期性的获取CPU和内存利用率,并与目标值相比较后来调整replication controller或deployment中的副本数量。
洗尽了浮华
2020/11/24
1K0
《Kubernetes》- 认识下Pod的管理者?
大家好,我是小菜,前面几篇文章我们已经从 k8s 集群的搭建然后到 k8s 中NameSpace 再说到了 k8s 中 Pod 的使用,如果还干到意犹未尽,那么接下来的 Pod 控制器 同样是一道硬菜!死鬼~看完记得给我来个三连哦!
蔡不菜丶
2021/05/18
6030
《Kubernetes》- 认识下Pod的管理者?
cluster-proportional-autoscaler小记
此组件监视集群的可调度节点和核心的数量,并调整所需资源的副本数量。对于需要随集群大小自动扩展的应用程序,例如 DNS 和其他随集群中节点/pod 数量扩展的服务。
铜锣烧
2022/11/09
7500
一文搞懂 Kubernetes HPA 实现原理-(上篇)
Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术 Kubernetes Autoscaling 之一的—— Horizontal Pod Autoscaler (HPA)。
Luga Lee
2023/08/11
2.9K3
一文搞懂 Kubernetes HPA 实现原理-(上篇)
13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
Pod 水平自动扩缩全名是Horizontal Pod Autoscaler简称HPA。它可以基于 CPU 利用率或其他指标自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。
luozhiyun
2020/10/10
2.5K0
13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
Kubernetes自动伸缩101:集群自动伸缩、水平自动伸缩和垂直豆荚自动伸缩
Kubernetes的核心是资源管理和编排工具。可以将第1天操作作为重点来探索和体验它的酷特性来部署、监控和控制你的豆荚。但是,你还需要考虑第2天的操作。你需要关注以下问题:
CNCF
2019/12/04
2.3K0
如何根据不同业务场景调节 HPA 扩缩容灵敏度
roc,腾讯高级工程师,Kubernetes Contributor,热爱开源,专注云原生领域。目前主要负责腾讯云TKE 的售中、售后的技术支持,根据客户需求输出合理技术方案与最佳实践,为客户业务保驾护航。 背景 在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downscale-stabilization-window 参数控制缩容时间窗口,默认 5 分钟,即负载减小
腾讯云原生
2021/01/07
1.2K2
k8s技术圈一周精选[第7期]
HPA 控制器与聚合 API 获取到 Pod 性能指标数据之后,基于下面的算法计算出目标 Pod 副本数量,与当前运行的 Pod 副本数量进行对比,决定是否需要进行扩缩容操作:
我是阳明
2020/08/11
7950
【K8s】Kubernetes 稳定性之自动扩缩容
在 Kubernetes 中,自动扩缩容是一种动态调整集群资源,以灵活应对应用程序资源需求变化的机制。
行者Sun
2024/09/11
3350
【K8s】Kubernetes 稳定性之自动扩缩容
Kubernetes HPA级别扩缩容配置预览
本文分析 HPA 功能增强的建议,而不是真正的实现。Kubernetes 1.16 发布前夕,该功能增强还没有合入,所以最快也要到 1.17 版本发布。
CNCF
2019/12/05
1.6K0
Kubernetes HPA级别扩缩容配置预览
kubernetes 降本增效标准指南|理解弹性,应用弹性
王孝威,腾讯云容器产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务。 弹性伸缩在云计算领域的简述 弹性伸缩又称自动伸缩,是云计算场景下一种常见的方法,弹性伸缩可以根据服务器上的负载,按一定的规则进行弹性的扩缩容服务器。 弹性伸缩在不同场景下的含义: 对于服务运行在自建机房的公司,弹性伸缩通常意味着允许一些服务器在低负载时进入睡眠状态,从而节省电费(以及用于冷却机器的水费和电费)。 对于使用在托管于云上的机房的公司而言,自动扩展可能意味着更低的费用,因为大多数云提供
腾讯云原生
2021/05/28
3.2K0
推荐阅读
相关推荐
K8s pod 动态弹性扩缩容(HPA )部署!步骤齐全,少走坑路
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验