【分类】分类性能评价

评价指标

1、准确率、召回率、精确率、F-度量、ROC

​ 属于各类的样本的并不是均一分布,甚至其出现概率相差很多个数量级,这种分类问题称为不平衡类问题。在不平衡类问题中,准确率并没有多大意义,我们需要一些别的指标。

​ 通常在不平衡类问题中,我们使用F-度量来作为评价模型的指标。以二元不平衡分类问题为例,预测只可能出现4种状况:

​ a) 将正类样本预测为正类(True Positive, TP) b) 将负类样本预测为正类(False Positive, FP)

​ c) 将正类样本预测为负类(False Negative, FN) d) 将负类样本预测为负类(True Negative, TN)
在这里插入图片描述

  • 对于测试集中 N N N个样本,有 M M M个被正确分类,则准确率(正确率)为:

准确率 ( A c c u r a c y ) = M N 准确率(Accuracy) =\frac{M}{N} 准确率(Accuracy)=NM

  • 定义召回率(recall):不能接受漏报,预测到所有想被预测到的样本

召回率 ( r e c a l l ) = 被预测为正类的 原本的正类 = ∣ T P ∣ ∣ T P ∣ + ∣ F N ∣ 召回率(recall)=\frac{被预测为正类的}{原本的正类}=\frac{|TP|}{|TP|+|FN|} 召回率(recall)=原本的正类被预测为正类的=TP+FNTP

  • 定义精确率(precision):不能接受误检,预测结果尽可能不出错
    精确率 ( p r e c i s i o n ) = 被预测为正类的 预测的正类 = ∣ T P ∣ ∣ T P ∣ + ∣ F P ∣ 精确率(precision)=\frac{被预测为正类的}{预测的正类}=\frac{|TP|}{|TP|+|FP|} 精确率(precision)=预测的正类被预测为正类的=TP+FPTP

  • F F F-度量则是在召回率与精确率之间去调和平均数;
    F α = ( 1 + α 2 ) R P R + α P F 1 = 2 R P R + P F_{ \alpha}=\frac{(1+\alpha ^2)RP}{R+\alpha P}\\ F_{1}=\frac{2RP}{R+P} Fα=R+αP(1+α2)RPF1=R+P2RP

精确率:分母是预测到的正类,精确率的提出是让模型的现有预测结果尽可能不出错(宁愿漏检,也不能让现有的预测有错)

以地震模型为例说就是宁愿地震了没报,也不能误报地震,比如说为了不错报,只预测了第50天可能发生地震,此时的

1.精确率:1/1=100%

2.召回率:1/2=50%

虽然有一次地震没预测到,但是我们做出的预测都是对的。

召回率:分母是原本的正类,召回率的提出是让模型预测到所有想被预测到的样本(就算多预测一些错的,也能接受)

以地震模型为例说这100次地震,比如说为了不漏报,预测了第30天、50天、51天、70天、85天地震,此时的

1.精确率:2/5=40%

2.召回率:2/2=100%

虽然预测错了3次,但是我们把会造成灾难的2次地震全预测到了。

精确率和召回率有什么用?为什么需要它?通俗讲解(人话)

上面我们已经讲的很清楚了,这里以两种需求为例

  1. 预测地震 - 不能接受漏报
  2. 人脸识别支付(银行人脸支付) - 不能接受误检

人脸识别支付:主要提升精确率,更倾向于不能出现错误的预测。

应用场景:你刷脸支付时就算几次没检测到你的脸,最多会让你愤怒,对银行损失不大,但是如果把你的脸检测成别人的脸,就会出现金融风险,让别人替你买单,对银行损失很大。所以宁愿让你付不了钱,也不会让别人帮你付钱。

预测地震:主要提升召回率,更倾向于宁愿多预测一些错的也不能漏检。

应用场景:地震预测时宁愿多预测一些错的,也不想漏掉一次地震,预测错误最多会让大家多跑几趟,造成少量损失。只要预测对一次,就会挽回百亿级别的损失,之前所有的损失都值了。

ROC曲线(Receiver Operating Characteristic,受试者操作特征)
通常情况下,我们希望ROC曲线越靠近左上角,这表示模型在各种阈值下都表现良好,同时具有高的真正率和低的假正率,而AUC值(曲线下面积)也可以用来衡量模型的整体性能,越接近1表示模型性能越好。

画ROC曲线步骤:

  • 根据分类模型得出每个样本属于正类的概率,根据概率将样本由高到低排列
  • 将样本为正类的概率由高到低,依次作为阈值 t t t,大于等于 t t t则为正类,小于t视为反类
  • 使用真正率 T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP作为竖轴,假正率 F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP作为横轴,对于每个选定的阈值均能产生一个对应的点。

例子:

样本编号分类预测为正类的概率TPRFPR
1正类0.98 1 1 + 14 = 1 15 \frac{1}{1+14}=\frac{1}{15} 1+141=151 0 0 + 5 = 0 5 \frac{0}{0+5}=\frac{0}{5} 0+50=50
2正类0.96 2 2 + 13 = 2 15 \frac{2}{2+13}=\frac{2}{15} 2+132=152 0 0 + 5 = 0 5 \frac{0}{0+5}=\frac{0}{5} 0+50=50
3正类0.92 3 3 + 12 = 3 15 \frac{3}{3+12}=\frac{3}{15} 3+123=153 0 0 + 5 = 0 5 \frac{0}{0+5}=\frac{0}{5} 0+50=50
4正类0.88 4 4 + 11 = 4 15 \frac{4}{4+11}=\frac{4}{15} 4+114=154 0 0 + 5 = 0 5 \frac{0}{0+5}=\frac{0}{5} 0+50=50
5正类0.85 5 5 + 10 = 5 15 \frac{5}{5+10}=\frac{5}{15} 5+105=155 0 0 + 5 = 0 5 \frac{0}{0+5}=\frac{0}{5} 0+50=50
6正类0.83 6 6 + 9 = 6 15 \frac{6}{6+9}=\frac{6}{15} 6+96=156 0 0 + 5 = 0 5 \frac{0}{0+5}=\frac{0}{5} 0+50=50
7反类0.82 6 6 + 9 = 6 15 \frac{6}{6+9}=\frac{6}{15} 6+96=156 1 1 + 4 = 1 5 \frac{1}{1+4}=\frac{1}{5} 1+41=51
8正类0.8 7 7 + 8 = 7 15 \frac{7}{7+8}=\frac{7}{15} 7+87=157 1 1 + 4 = 1 5 \frac{1}{1+4}=\frac{1}{5} 1+41=51
9正类0.78 8 8 + 7 = 8 15 \frac{8}{8+7}=\frac{8}{15} 8+78=158 1 1 + 4 = 1 5 \frac{1}{1+4}=\frac{1}{5} 1+41=51
10反类0.71 8 8 + 7 = 8 15 \frac{8}{8+7}=\frac{8}{15} 8+78=158 2 2 + 3 = 2 5 \frac{2}{2+3}=\frac{2}{5} 2+32=52
11正类0.68 9 9 + 6 = 9 15 \frac{9}{9+6}=\frac{9}{15} 9+69=159 2 2 + 3 = 2 5 \frac{2}{2+3}=\frac{2}{5} 2+32=52
12正类0.64 10 10 + 5 = 10 15 \frac{10}{10+5}=\frac{10}{15} 10+510=1510 2 2 + 3 = 2 5 \frac{2}{2+3}=\frac{2}{5} 2+32=52
13正类0.59 11 11 + 4 = 11 15 \frac{11}{11+4}=\frac{11}{15} 11+411=1511 2 2 + 3 = 2 5 \frac{2}{2+3}=\frac{2}{5} 2+32=52
14正类0.55 12 12 + 3 = 12 15 \frac{12}{12+3}=\frac{12}{15} 12+312=1512 2 2 + 3 = 2 5 \frac{2}{2+3}=\frac{2}{5} 2+32=52
15反类0.52 12 12 + 3 = 12 15 \frac{12}{12+3}=\frac{12}{15} 12+312=1512 3 3 + 2 = 3 5 \frac{3}{3+2}=\frac{3}{5} 3+23=53
16正类0.51 13 13 + 2 = 13 15 \frac{13}{13+2}=\frac{13}{15} 13+213=1513 3 3 + 2 = 3 5 \frac{3}{3+2}=\frac{3}{5} 3+23=53
17正类0.5 14 14 + 1 = 14 15 \frac{14}{14+1}=\frac{14}{15} 14+114=1514 3 3 + 2 = 3 5 \frac{3}{3+2}=\frac{3}{5} 3+23=53
18反类0.48 14 14 + 1 = 14 15 \frac{14}{14+1}=\frac{14}{15} 14+114=1514 4 4 + 1 = 4 5 \frac{4}{4+1}=\frac{4}{5} 4+14=54
19正类0.42 15 15 + 0 = 15 15 \frac{15}{15+0}=\frac{15}{15} 15+015=1515 4 4 + 1 = 4 5 \frac{4}{4+1}=\frac{4}{5} 4+14=54
20反类0.2 15 15 + 0 = 15 15 \frac{15}{15+0}=\frac{15}{15} 15+015=15151

数字表示转折点对应样本编号

ROC曲线下方面积为 A U C AUC AUC, A U C AUC AUC值越大,表示分类模型的预测准确性越高, R O C ROC ROC曲线越光滑,一般表示过拟合现象较轻(为什么??


2.各项指标的python实现,以logistic回归为例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_curve, auc
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
plt.rcParams['font.sans-serif']=['STKaiTi'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# 创建一个示例分类数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练一个分类模型,例如Logistic回归
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率 (Accuracy): {accuracy:.2f}')

# 计算召回率
recall = recall_score(y_test, y_pred)
print(f'召回率 (Recall): {recall:.2f}')

# 计算精确率
precision = precision_score(y_test, y_pred)
print(f'精确率 (Precision): {precision:.2f}')

# 计算F1指标
F1 = 2*recall*precision/(recall+ precision)
print(f'F1={F1}')

#ROC曲线和AUC值
fpr, tpr, thresholds = roc_curve(y_test, model.predict_proba(X_test)[:, 1])
roc_auc = auc(fpr, tpr)

# 可视化ROC曲线
plt.figure(figsize=(10, 6),dpi = 300)
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC曲线 (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正率 (False Positive Rate)')
plt.ylabel('真正率 (True Positive Rate)')
plt.title('ROC曲线')
plt.legend(loc='lower right')
plt.show()

结果:
准确率 (Accuracy): 0.85
召回率 (Recall): 0.83
精确率 (Precision): 0.88
F1=0.8504983388704319
在这里插入图片描述

评价方法

  • 保留法:划分训练集于测试集,比例不清楚,没有k-折交叉验证好
  • k-折交叉验证:将样本随机划分为k个大小相等的子集,在每一轮交叉验证种,选择一个子集作为测试集,重复k轮,保证每个子集都作为测试集出现,对k轮检验结果取平均值作为评价表中
  • 蒙特卡洛交叉验证:多次保留法,某些样本可能只出现在测试集中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter:getX的学习

前言 学习教程:Getx教程_FlutterGetx系列实战教程 简介 getX是第三方的状态管理插件,不仅具有状态管理的功能,还具有路由管理、主题管理、国际化多语言管理、网络请求、数据验证等功能。相比其他状态管理组件,getX简单、功能强大…

【网络编程上】

目录 一.什么是互联网 1.计算机网络的定义与分类(了解) (1)计算机网络的定义 (2)计算机网络的分类 ① 按照网络的作用范围进行分类 ②按照网络的使用者进行分类 2.网络的网络 (理解&#xf…

基于Vue3+ts+Pinia的后台管理系统

Vue3tsPinia管理系统 项目介绍项目简介界面展示登录界面商品界面用户界面角色管理界面 接口文档项目地址 项目介绍 包含对商品、订单、用户增删改查等后台的管理业务,并提供数据可视化的报表功能的管理系统。界面进行了高级封装,可以通过引入组件传入配…

利用frps搭建本地自签名https服务的透传

nginx的搭建就不介绍了,教程很多,基本上油手就会。 在本例中,frp服务器的域名是 www.yourfrp.com,同时也是反向代理nginx服务器; 本地网站要用的域名: test.abcd.com 请事先将 test.abcd.com 解析到 frp所在服务器…

OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse() 4.绘制矩形rectangle() 5.绘制多边形 fillPoly() 6.绘制文字putText() 7.例子 1.绘制直线line() CV_EXPORTS_W void line(InputOutputArray img,Point pt1, Point pt2,const Scalar& color,int t…

CSS学习笔记05

CSS笔记05 定位 position CSS 属性position - 用于指定一个元素在文档中的定位方式。top,right,bottom 和 left 属性则决定了该元素的最终位置。position 有以下常用的属性值: position: static; - 默认值。指定元素使用正常的布局行为&am…

wap2app 隐藏系统状态栏

一、首先创建wap2App项目 1、文件》新建》项目 2、选择Wap2App项目:输入项目名称、网站首页地址(如果是本地localhost的话改为你的IP地址即可),点击创建 二、创建完wap2App项目后 隐藏系统状态栏只要修改1、2选项即可 1、找到根…

uniapp实现移动端的视频图片轮播组件

1、视频轮播组件app体验地址 https://tt.appc02.com/nesxr6 2、支持小程序、H5、APP&#xff0c;在小程序上运行的效果图 3、使用方法 第一步&#xff0c;按照截图步骤配置好 第二步&#xff1a;参考以下代码&#xff0c;使用视频图片轮播组件 <template><view>…

aarch64-linux交叉编译libcurl带zlib和openssl

交叉编译libcurl需要依赖zlib和openssl 需要先用aarch64工具链编译zlib和openssl aarch64-linux环境搭建 下载工具链 gcc用于执行交叉编译 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnusysroot是交叉版本的库文件集合 sysroot-glibc-linaro-2.25-2019.12-aarch64-lin…

K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下)

温故知新 &#x1f4da;第三章 Kubernetes各组件部署&#x1f4d7;安装kubectl&#xff08;可直接跳转到安装kubeadm章节&#xff0c;直接全部安装了&#xff09;&#x1f4d5;下载kubectl安装包&#x1f4d5;执行kubectl安装&#x1f4d5;验证kubectl &#x1f4d7;安装kubead…

常见矿石材质鉴定VR实训模拟操作平台提高学员的学习效果和实践能力

随着“元宇宙”概念的不断发展&#xff0c;在矿山领域中&#xff0c;长期存在传统培训内容不够丰富、教学方式单一、资源消耗大等缺点&#xff0c;无法适应当前矿山企业发展需求的长期难题。元宇宙企业借助VR虚拟现实、web3d开发和计算机技术构建的一个虚拟世界&#xff0c;为用…

F5服务器负载均衡能力如何?一文了解

但凡知道服务器负载均衡这个名词的&#xff0c;基本都知道 F5&#xff0c;因为负载均衡是 F5 的代表作&#xff0c;换句话来说&#xff0c;负载均衡就是由 F5 发明的。提到F5服务器负载均衡能力如何&#xff1f;不得不关注F5提出的关于安全、网络全面优化的解决方案&#xff0c…

游戏思考30(补充版):关于逆水寒铁牢关副本、白石副本和技能的一些注释(2023/0902)

前期介绍 我是一名逆水寒的玩家&#xff0c;做一些游戏的笔记当作攻略记录下来&#xff0c;荣光不朽-帝霸来源视频连接 传送门 一、旧版铁牢关&#xff08;非逆水寒老兵服&#xff09; &#xff08;1&#xff09;老一&#xff1a;巨鹰 1&#xff09;机制一&#xff1a;三阵风…

html中如何用vue语法,并使用UI组件库 ,html中引入vue+ant-design-vue或者vue+element-plus

html中如何用vue语法&#xff0c;并使用UI组件库 前言 先说一下本次应用的场景&#xff0c;本次项目中&#xff0c;需要引入github中别人写好的插件&#xff0c;插件比较大&#xff0c;没有方法直接在自己项目中&#xff0c;把别人的项目打包合并生成html&#xff08;类似于前…

设计模式第九讲:常见重构技巧 - 去除不必要的!=

设计模式第九讲&#xff1a;常见重构技巧 - 去除不必要的! 项目中会存在大量判空代码&#xff0c;多么丑陋繁冗&#xff01;如何避免这种情况&#xff1f;我们是否滥用了判空呢&#xff1f;本文是设计模式第九讲&#xff0c;讲解常见重构技巧&#xff1a;去除不必要的! 文章目录…

SpringBoot整合websockt实现消息对话

文章目录 前言websockt什么是websockt&#xff1f;websockt和Socket区别代码部分实战应用 前言 websockt 什么是websockt&#xff1f; WebSocket是一种在Web应用程序中实现实时双向通信的技术。Web应用程序通常是基于HTTP协议的&#xff0c;HTTP是一种请求/响应式的协议&…

基于Gin框架的HTTP接口限速实践

在当今的微服务架构和RESTful API主导的时代&#xff0c;HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大&#xff0c;接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能&#xff0c;接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…

简单了解ICMP协议

目录 一、什么是ICMP协议&#xff1f; 二、ICMP如何工作&#xff1f; 三、ICMP报文格式 四、ICMP的作用 五、ICMP的典型应用 5.1 Ping程序 5.2 Tracert(Traceroute)路径追踪程序 一、什么是ICMP协议&#xff1f; ICMP因特网控制报文协议是一个差错报告机制&#xff0c;…

树的介绍(C语言版)

前言 在数据结构中树是一种很重要的数据结构&#xff0c;很多其他的数据结构和算法都是通过树衍生出来的&#xff0c;比如&#xff1a;堆&#xff0c;AVL树&#xff0c;红黑色等本质上都是一棵树&#xff0c;他们只是树的一种特殊结构&#xff0c;还有其他比如linux系统的文件系…

SpringBoot 整合 RabbitMQ

1. 创建 SpringBoot 工程 把版本改为 2.7.14 引入这两个依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springfr…