【分类】分类性能评价

评价指标

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轮检验结果取平均值作为评价表中
  • 蒙特卡洛交叉验证:多次保留法,某些样本可能只出现在测试集中

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

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

相关文章

pyspark 系统找不到指定的路径; \Java\jdk1.8.0_172\bin\java

使用用具PyCharm 2023.2.1 1:pyspark 系统找不到指定的路径, Java not found and JAVA_HOME environment variable is not set. Install Java and set JAVA_HOME to point to the Java installation directory. 解决方法:配置正确环境变量…

万字C语言之分支语句和循环语句

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法…

react-native实现 TextInput 键盘显示搜索按钮并触发回调

<TextInput returnKeyType"search"returnKeyLabel"搜索"onSubmitEditing{e > {toSearch(keyword);}} /><SearchBarref{serachBarEl}placeholder"请输入"onChangeText{handleChangeSearch}value{search}onSubmitEditing{handleSearch…

react16之前diff算法的理解和总结

此篇文章所讨论的是 React 16 以前的 Diff 算法。而 React 16 启用了全新的架构 Fiber&#xff0c;相应的 Diff 算法也有所改变&#xff0c;本片不详细讨论Fiber。 fiber架构是为了支持react进行可中断渲染&#xff0c;降低卡顿&#xff0c;提升流畅度。 react16之前的版本&…

131.【MySQL_基础篇】

MySQL_基础篇 (一)、MySQL 介绍1.MySQL三大阶段(1).基础篇(2).进阶篇(3).运维篇 2.MySQL 概念3.数据模型(1).关系型数据库(RDBMS) 4.数据库三大范式 (二)、SQL 编程语言1.SQL通用语法2.SQL 四大分类3.DDL (数据定义语言)(1).数据库操作 ->(增删改查)(2).表操作 -> (增删改…

IDEA2023隐藏.idea和.iml文件

IDEA2023隐藏.idea和.iml文件 1. 打开file -> setting,快捷键CtrlAlts2. Editor -> File types3. 点击右侧Ignore files and folders一栏4. 添加需要忽略的文件5. 最重要一步 IDEA新建项目会自动生成一个.idea文件夹和.iml文件&#xff0c;开发中不需要对这两个文件修改&…

LeetCode 92. Reverse Linked List II【链表,头插法】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

react使用hook封装一个tab组件

目录 react使用hook封装一个tab组件Tabbar.jsx使用组件效果 react使用hook封装一个tab组件 Tabbar.jsx import PropsTypes from "prop-types"; import React, { useEffect, useState } from react; export default function Tabbar(props) {const { tabData , cur…

Kotlin File writeText appendText appendBytes readBytes readText

Kotlin File writeText appendText appendBytes readBytes readText import java.io.Filefun main(args: Array<String>) {val filePath "./myfile.txt"val file File(filePath)file.writeText("hello,") //如果原有文件有内容&#xff0c;将完全覆…

【Maven教程】(四)坐标与依赖:坐标概念,依赖配置、范围、传递性和最佳实践 ~

Maven 坐标与依赖 1️⃣ 什么是Maven 坐标2️⃣ 坐标详解3️⃣ 依赖的配置4️⃣ 依赖范围5️⃣ 传递性依赖6️⃣ 依赖调解7️⃣ 可选依赖8️⃣ 最佳实践8.1 排除依赖8.2 归类依赖8.3 优化依赖 &#x1f33e; 总结 正如前面文章所述&#xff0c;Maven 的一大功能是管理项目依赖…

sonarqube版本升级

官方文档&#xff1a;Upgrade guide 步骤1、停止原有sonarqube服务&#xff0c;如果是docker部署的直接停掉容器并删除 步骤2、部署最新版sonarqube&#xff0c;保留原有配置 步骤3、访问sonarqube web 显示维护中&#xff0c;根据官方给出的升级方法&#xff0c;在sonarqub…

学习笔记|小数点控制原理|数码管动态显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第十集:数码管动态显示

文章目录 1.数码管动态刷新的原理2.动态刷新原理3.8位数码管同时点亮新建一个数组选择每个位需要显示的内容实战小练&#xff1a;简易10秒免单计数器将刷新动作写成函数 课后练习: 1.数码管动态刷新的原理 上述图片引用自&#xff1a;51单片机初学2-数码管动态扫描 用一排端口来…

mysql 大表如何ddl

大家好&#xff0c;我是蓝胖子&#xff0c;mysql对大表(千万级数据)的ddl语句&#xff0c;在生产上执行时一定要千万小心&#xff0c;一不小心就有可能造成业务阻塞&#xff0c;数据库io和cpu飙高的情况。今天我们就来看看如何针对大表执行ddl语句。 通过这篇文章&#xff0c;…

推荐一款程序员截图神器!

快来看一下程序员必备的一款截图工具 今天就来和大家说一下作为程序员必备截图神器&#xff0c;几乎每一个程序员都会设置开机自启&#xff0c;因为这个截图功能太太太好用了&#xff01;&#xff01;&#xff01;只要你在键盘上按下F1就可以轻松截取整个屏幕&#xff0c;然后…

OpenHarmony:如何使用HDF驱动控制LED灯

一、程序简介 该程序是基于OpenHarmony标准系统编写的基础外设类&#xff1a;RGB LED。 目前已在凌蒙派-RK3568开发板跑通。详细资料请参考官网&#xff1a;https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony/tree/master/samples/b02_hdf_rgb_led。 …

【【STM32--28--IO引脚的复用功能】】

STM32–28–IO引脚的复用功能 STM32的IO复用功能 何为复用? 我们先了解一下何为通用 IO端口的输入或输出是由GPIO外设控制&#xff0c;我们称之为通用 复用&#xff1a; IO端口的输入或者是输出是由其他非GPIO外设控制就像经常说的USART 由 DR寄存器进行输出 STM32的IO复用功…

docker 笔记11: Docker容器监控之CAdvisor+InfluxDB+Granfana

1.原生命令 docker stats命令的结果 是什么 2.是什么 容器监控3剑客 CAdvisor监控收集InfluxDB存储数据Granfana展示图表 3.CAdvisor 4.InfluxDB 5.Granfana 6.总结 7.compose容器编排&#xff0c;一套带走 新建目录 7.1新建3件套组合的 docker-compose.yml version: 3.1vo…

通过 Jetbrains GateWay实现Remote Development

本次环境准备 环境准备&#xff1a;win10、一台安装有树莓派系统的树莓派&#xff08;也可以是其他的服务器&#xff09; 第一步&#xff1a;通过官网下载JetBrains Gateway 官网地址&#xff1a;https://www.jetbrains.com/remote-development/gateway/ 第二步&#xff1a;安装…

Shell 运算符及语法结构

目录 一、Shell运算符 1.1 表达式expr 1.2 运算操作 1.3 操作实例 二、Shell条件判断 2.1 基本语法 2.2 值、权限、类型、多条件判断 三、Shell流程控制 3.1 if 流程语法 3.2 case 流程语法 3.3 for 流程语法 3.4 内部运算符 3.5 while循环流程语法 四、Shell读…

ElasticSearch的安装部署-----图文介绍

文章目录 背景什么是ElasticSearch使用场景 ElasticSearch的在linux环境下的安装部署前期准备分配权限(正式实操)启动ElasticSearch创建用户组创建用户&#xff0c;并设置密码用户添加到elasticsearch用户组指定用户操作目录的一个操作权限切换用户 解压elasticsearch修改es的配…