模式识别算法的常见评价指标TP/FP/FN/TN,ROC,DET,EER

news2024/11/28 6:49:41

文章目录

    • TP/FP/FN/TN(TA/FA/FR/TR)
        • 误报率(FAR)
        • 漏报率(FRR)
      • ROC曲线(Receiver Operating Characteristic Curve,受试者特征曲线)
      • DET曲线(Detection Error Tradeoff Curve,检测误差权衡曲线)
      • 检测代价函数DCF
      • EER(Equal Error Rate,等错率)
    • 混淆矩阵

TP/FP/FN/TN(TA/FA/FR/TR)

True positive: having the condition and tested positive with the condition
False positive: not having the condition but tested positive with the condition
True negative: not having the condition and tested negative with the condition
False negative: having the condition but tested negative with the condition

真阳性TP:患有该疾病并检测呈阳性
假阳性FP:没有这种情况,但检测结果呈阳性
真阴性TN:没有这种情况,检测结果呈阴性
假阴性FN:有这种情况,但检测结果呈阴性

也可叫做TA/FA/FR/TR,即代表以下4种情况:真实接收(TA,实际是真的,也正确接收为真的),错误拒绝(FR,实际是真的,但错误拒绝为假的),错误接受(FA,实际是错的,但认定接收为真的),真实拒绝(TR,实际是错的,也真的拒绝了);
下列声纹识别的案例中,“Same speaker”代表“事实/预测为同一个说话人”,“Same speaker”代表“事实/预测为同一个说话人”,“Different speaker”代表“事实/预测为不同的说话人”。
在这里插入图片描述
在概率统计中,FA称为第一类错误,FR称为第二类错误:

第一类错误(误报):拒绝本应接受的东西的错误,指的是本来正常(Condition negative),但是误认为是异常(Predicted condition positive);例如认定一个无辜的人有罪(冤案)。
第二类错误(漏报):接收本应该拒绝东西的错误,指的是本来异常(Condition positive),但是误认为是正常(Predicted condition negative);例如认定一个有罪的人无罪。

误报率(FAR)

误报率是被错误报告为阳性的阴性情况的比例(number of false positives / number of negative instances)

I e r r o r = 假阳 假阳 + 真阴 = F A F A + T R \Iota_{error}=\frac{假阳}{假阳+真阴}=\frac{FA}{FA+TR} Ierror=假阳+真阴假阳=FA+TRFA F P F P + T N \frac{FP}{FP+TN} FP+TNFP

漏报率(FRR)

漏报率是被错误地报道为阴性的阳性情况的比例(number of false positives / number of positive instances)

I I e r r o r = 假阴 假阴 + 真阳 = F R F R + T R \Iota\Iota_{error}=\frac{假阴}{假阴+真阳}=\frac{FR}{FR+TR} IIerror=假阴+真阳假阴=FR+TRFR F N F N + T N \frac{FN}{FN+TN} FN+TNFN

模型预测性能的准确率即:

A c c u r a c y = T P + F N T N + F N + T P + F P = T A + F R T A + F A + T R + F R Accuracy=\frac{TP+FN}{TN+FN+TP+FP}=\frac{TA+FR}{TA+FA+TR+FR} Accuracy=TN+FN+TP+FPTP+FN=TA+FA+TR+FRTA+FR

不同应用场景下,误报率和漏报率的重要程度有所区别,需综合考量。如在传播性很强的传染病判定时,误报为阳性犯第一类错误的危害通常没有阳性漏判为阴性的危害要大;而在声纹识别时,如智能音箱的语音唤醒情况下,误判为唤醒词犯第一类错误,通常没有第二类错误唤醒词漏判,导致经常识别不出来造成的用户体验更差,同时两类错误都会削弱语音解锁功能的鲁棒性。

ROC曲线(Receiver Operating Characteristic Curve,受试者特征曲线)

在这里插入图片描述
ROC曲线定义的横轴是FPR,纵轴是TPR,如果一个系统的评判方式是1/2的概率Ture/False随机分类的,代表红色虚线部分;若TPR>FPR,即真阳率的判定>假阳率的判定,曲线越往上,则代表系统的预测效果越好。

DET曲线(Detection Error Tradeoff Curve,检测误差权衡曲线)

DET曲线定义的横轴依旧是FPR,但纵轴是FNR,所以谁的假阴率越低,谁的效果越好;与ROC曲线相反,若曲线越往下,则代表系统的预测效果越好。

ROC曲线与DET曲线对比:
在这里插入图片描述

检测代价函数DCF

在这里插入图片描述

C_FRR为错误拒绝一个真实说话人的代价,cost of fr
C_FAR为错误接受一个冒认者的代价,cost of fa
PT为真实说话人出现的先验概率
PI为冒认者出现的先验概率
FRR为错误拒绝率
FAR为错误接受率
声纹识别任务中,DCF的计算考虑了两类错误发生的不同代价,也考虑了真实说话人和冒认者出现的先验概率,这些参数都是根据识别任务预先确定的。阈值选取时,有不同的FAR和FRR值就会得到不同的DCF值,选择使DCF取最小值的阈值作为说话人识别系统的确认阈值。根据不同的识别任务需求,确定不同的代价和先验概率等参数,从而就可以使最小DCF阈值适用于各种类型的识别任务。

最小检测代价函数DCF:
在这里插入图片描述

EER(Equal Error Rate,等错率)

单纯地使用错误率(FAR、FRR)来评定说话人确认系统性能是不合理的,通过FAR和FRR的交点可以综合确定出系统判决阈值(EER、DCF)
在这里插入图片描述
也可以通过DET曲线和y=x的交点来确定判决阈值:
在这里插入图片描述
python实现求解EER简化版代码:

给定一系列的正负trail pairs的分数,用Python编写函数计算其等错率。
这里我们给定一个CSV文件,文件的每一行包含两个数,即:label,score label若为0,表示负trial
pair,也就是不同说话人;label若为1,表示正trial pair,也就是相同说话人。 而score是相似度量的分数。
CSV文件从这里下载:https://github.com/wq2012/SpeakerRecognitionCourseChinese/blob/main/coding5/scores.csv
提示:可以考虑按以下步骤来实现:

  1. 使用csv模组来读取csv文件
  2. 对阈值的取值进行扫描,对每个取值计算对应的FAR和FRR
  3. 找到使FAR和FRR最为接近的那个阈值,然后取(FAR+FRR)/2作为对应的EER
import csv
SCORES = 'scores.csv'


def ComputeEER():
    """Compute the Equal Error Rate from the data in scores.csv

    Returns:
        a floating point number for the equal error rate (between 0 and 1)
    """
    labels = []
    scores = []
    with open(SCORES) as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
        for row in spamreader:
            labels.append(int(row[0]))
            scores.append(float(row[1]))

    eer_threshold = None
    eer = None
    min_delta = 1
    threshold = 0.0
    while threshold < 1.0:
        accept = [score >= threshold for score in scores]
        fa = [a and (1 - l) for a, l in zip(accept, labels)]  #计算fa,并以列表返回
        fr = [(1 - a) and l for a, l in zip(accept, labels)]  #计算fr,并以列表返回
        far = sum(fa) / (len(labels) - sum(labels))
        frr = sum(fr) / sum(labels)
        delta = abs(far - frr)  #当far==frr时,delta==0(相当于找到了DET与y=x的交点),触发循环终止
        if delta < min_delta:
            min_delta = delta
            eer = (far + frr) / 2
            eer_threshold = threshold
        threshold += 0.005  #扫描阈值的步长

    print('eer_threshold=', eer_threshold, 'eer=', eer)
    return eer


if __name__ == "__main__":
    ComputeEER()
eer_threshold= 0.5450000000000004 eer= 0.09375

循环终止时的各变量值:
在这里插入图片描述

其中accept和labels是两个列表,zip函数将它们打包成一个元组的列表,a和l分别表示元组中的两个元素。列表推导式中的表达式a and (1 - l)表示对a和(1-l)进行逻辑与运算,得到的结果作为新列表中的一个元素。最终得到的列表fa中包含了accept和labels中对应位置元素的逻辑与运算结果。

scores.csv中的数据格式:
在这里插入图片描述

混淆矩阵

每一行之和表示该类别的真实样本数量,每一列之和表示被预测为该类别的样本数量。通过混淆矩阵可以清晰辨识出二分类、多分类任务模型预测准确率的情况:

matlab生产混淆矩阵伪代码:

figure
cm = confusionchart(labelsTrueMat,labelsPredMat, ...
    Title=["Confusion Matrix for 10-Fold Cross-Validation","Average Accuracy = " round(mean(labelsTrueMat==labelsPredMat)*100,1)], ...
    ColumnSummary="column-normalized",RowSummary="row-normalized");
sortClasses(cm,categories(emptyEmotions))

在这里插入图片描述
python生成混淆矩阵代码示例:

import numpy as np
import seaborn as sns
from sklearn.metrics import confusion_matrix
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score, average_precision_score, precision_score, f1_score,recall_score# 创建数据
y_true = np.array(["cat"]*15 + ["dog"]*15 + ["bird"]*20)
y_pred = np.array(["cat"]*10 + ["dog"]*4 + ["bird"]*1 +["cat"]*2 + ["dog"]*12 + ["bird"]*1 +["cat"]*2 + ["dog"]*1 + ["bird"]*17)
# 生成混淆矩阵
cm = confusion_matrix(y_true, y_pred, labels=["cat", "dog", "bird"])# # 创建数据,用数字也是可以。
# y_true = np.array([0]*15 + [1]*15 + [2]*20)
# y_pred = np.array([0]*10 + [1]*4 + [2]*1 +
#                   [0]*2 + [1]*12 + [2]*1 +
#                   [0]*2 + [1]*1 + [2]*17)
# # 生成混淆矩阵
# cm = confusion_matrix(y_true, y_pred)# 给混淆矩阵添加索引。
conf_matrix = pd.DataFrame(cm, index=['Cat','Dog','Pig'], columns=['Cat','Dog','Pig'])# 显示混淆矩阵。
fig, ax = plt.subplots(figsize = (4.5,3.5))
sns.heatmap(conf_matrix, annot=True, annot_kws={"size": 19}, cmap="Blues")
plt.ylabel('True label', fontsize=18)
plt.xlabel('Predicted label', fontsize=18)
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.savefig('confusion.jpg', bbox_inches='tight')
plt.show()

在这里插入图片描述

参考文献:
[1] ChaoFeiLi-关于FPR和FNR (I类错误和II类错误)
[2] ROC曲线
[3] 那抹阳光1994-DET曲线(检测误差权衡曲线)
[4] 王泉-声纹识别:从理论到编程实战
[5] 蘑菇炖提莫-说话人确认系统性能评价指标EER和minDCF
[6] 玉堃-Detection:目标检测常用评价指标的学习总结(IoU、TP、FP、TN、FN、Precision、Recall、F1-score、P-R曲线、AP、mAP、 ROC曲线、TPR、FPR和AUC)
[7] MathWorks-Speech Emotion Recognition

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven高级——继承与聚合——版本锁定

在前面的文章已经实现了Maven的继承&#xff0c;初次之外&#xff0c;还可以在父工程当中统一管理依赖的版本。 场景介绍 有一些依赖不是各个模块共有的&#xff0c;则需要到那些子模块当中单独配置了&#xff0c;这时需要到各个模块单独配置了&#xff0c;比如下图有一个模块…

【小沐学Python】Python实现Web服务器(CentOS+Docker下部署Flask)

&#x1f37a;基于Python的Web服务器系列相关文章编写如下&#x1f37a;&#xff1a; &#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask快速入门&#xff09;&#x1f388;&#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask案例测试&#xff09;&a…

Pyside6-第五篇-单选按钮QRadioButton

今天是Pyside6的第五篇内容。一起来看单选按钮。 QRadioButton。 class QRadioButton(QAbstractButton):"""QRadioButton(self, parent: Optional[PySide6.QtWidgets.QWidget] None) -> NoneQRadioButton(self, text: str, parent: Optional[PySide6.QtWidg…

9.wxss

wxss基本满足所有css&#xff0c;并在css的基础上增加了 rpx 尺寸单位import 导入样式 目录 1 rpx 2 import 3 全局样式与局部样式 4 样式权重 1 rpx rpx(responsive pixel)&#xff0c;中文名叫响应像素&#xff0c;它是用来解决屏幕适配的尺寸单位&#xff0c;它…

Flink第九章:Flink CEP

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 Flink第六章:多流操作 Flink第七章:状态编程 Flink第八章:FlinkSQL Flink第九章:Flink CEP 文章目录 系列文章目录前言一、简单案例1.Logi…

Linux高性能服务器编程|阅读笔记:第11章 - 定时器

目录 简介系列笔记11.1 socket选项SO_RCVTIMEO和SO_SNDTIMEO11.2 SIGALRM信号11.2.1 基于升序链表的定时器11.2.2 处理非活动连接11.3 I/O复用系统调用的超时参数11.4 高性能定时器11.4.1 时间轮11.4.2 时间堆结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方…

光储存技术及原理

描述 信息资料迅速增长是当今社会的一大特点。有人统计&#xff0c;科技文献数量大约每7年增加1倍&#xff0c;而一般的情报资料则以每2年~3年翻一番的速度增加。大量资料的存储、分析、检索和传播&#xff0c;迫切需要高密度、大容量的存储介质和管理系统。 1898年荷兰的Vald…

Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路

本文章实现最简单全面的Jenkinsdockerspringboot 一键自动部署项目&#xff0c;步骤齐全&#xff0c;少走坑路。 环境&#xff1a;centos7git(gitee) 简述实现步骤&#xff1a;在docker安装jenkins&#xff0c;配置jenkins基本信息&#xff0c;利用Dockerfile和shell脚本实现…

javaScript蓝桥杯-----芝麻开门

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 在阿里巴巴和四十大盗的故事中&#xff0c;阿里巴巴因为无意中知道了开门的咒语人生发生了翻天覆地的变化&#xff0c;四十大盗也因为咒语的泄露最终丧命。芝麻开门的咒语作为重要的信息推动着故事的发展。下面由你来…

初识网络之TCP网络套接字

目录 一、TCP常用网络接口 1. 监听服务器 2. 接收链接 3. 发起连接 二、实现一个简单的tcp程序 1. 日志函数 2. 服务端文件 2.1 .hpp文件 2.2 .cpp文件 3. 客户端文件 3.1 .hpp文件 3.2 .cpp文件 4. 程序测试 三、实现支持多个用户并发访问的tcp程序 1. 当前程序…

解决Dockerfile错误: ERROR [3/3] RUN yum install -y wget vim net-tools

RUN yum install -y wget vim net-tools该命令是在使用容器编排工具&#xff08;如Docker&#xff09;的Dockerfile文件中执行的。它尝试安装一些常用的软件包&#xff0c;如wget、vim、net-tools。根据错误消息&#xff0c;执行此命令时发生了3个错误。 可能的原因包括&#…

chatgpt赋能python:Python去除非法字符:让你的数据更干净、更有效

Python去除非法字符&#xff1a;让你的数据更干净、更有效 在处理数据时&#xff0c;非法字符是常见的问题。它们可能是一些无意义的符号、特殊字符或非常规字符等等。如果不被正确处理&#xff0c;这些非法字符可能会给你带来麻烦&#xff0c;如导致脚本失败、破坏数据完整性…

LeetCode中等题合集 python

目录 3. 无重复字符的最长子串53. 最大子数组和80. 删除有序数组中的重复项 II442. 数组中重复的数据209. 长度最小的子数组59. 螺旋矩阵 II24. 两两交换链表中的节点19. 删除链表的倒数第 N 个结点142. 环形链表 II 3. 无重复字符的最长子串 滑动窗口&#xff0c;类似的题目还…

Biological Psychiatry:利用TMS-EEG识别难治性抑郁症间歇性θ脉冲刺激的神经生理标志物

前言 难治性抑郁症(TRD)是指在经过足够疗程的药物治疗或心理治疗后&#xff0c;症状没有得到改善的重度抑郁。大约有30%的重度抑郁症(MDD)属于难治性抑郁症。重复经颅磁刺激(rTMS)可引起大脑皮层兴奋或抑制性的改变&#xff0c;是TRD的有效干预措施。间歇性θ脉冲刺激(iTBS)一…

ClickHouse 基础

ClickHouse是2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询OLAP&#xff0c;能够使用SQL查询实时生成分析数据报告。 一、列式存储 以下面的Tabel为例 IDNameGender1吴彦祖男2刘亦菲女3陈冠希男 …

INT8 中的稀疏性:加速的训练工作流程和NVIDIA TensorRT 最佳实践

INT8 中的稀疏性&#xff1a;加速的训练工作流程和NVIDIA TensorRT 最佳实践 文章目录 INT8 中的稀疏性&#xff1a;加速的训练工作流程和NVIDIA TensorRT 最佳实践结构稀疏量化在 TensorRT 中部署稀疏量化模型的工作流程案例研究&#xff1a;ResNet-34要求第 1 步&#xff1a;…

JDK17新特性 即将成为主流的JDK 深入了解

文章目录 Switch 语句增强优化字符串拼接代码instanceof增强密封类&#xff08;限制继承类&#xff09;ZGC垃圾收集器 对于JDK17比较明显的特性 总结 Switch 语句增强 首先就是简化了Switch语句&#xff1a; 去掉了break及可以直接给返回值赋值。并且再匹配多个值的时候也做了…

AI 导致留学中介文书老师痛失万元月收入?是真的吗?

近日&#xff0c;总部位于伦敦&#xff0c;但在国内多个城市设有分公司的留学服务机构老板张冶告诉在接受记者采访时&#xff0c;他们对留学英国的人士提供的本硕博申请、论文润色、挂科申诉等业务都受到了ChatGPT的影响&#xff0c;甚至有业务线直接萎缩60%以上&#xff0c;有…

【Python】Python系列教程-- Python3 列表(十三)

文章目录 前言访问元组修改元组删除元组元组运算符元组索引&#xff0c;截取元组内置函数关于元组是不可变的 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&#xff08;一&#xff09;Python系列教程–Python3 环境搭建&#xff08;二&#xff09;Python系列教程–…

如何打造高效的IT服务中心

官方网站 www.itilzj.com 文档资料: wenku.itilzj.com 引言 在当今数字时代&#xff0c;IT服务越来越成为企业发展的关键和优势。高效的IT服务中心能够提高员工生产力&#xff0c;改善客户体验&#xff0c;降低IT成本&#xff0c;并为企业数字化转型奠定良好的基础。本文将介绍…