对分类数据绘制对应的ROC曲线和AUC面积指标

简介: 对分类数据绘制对应的ROC曲线和AUC面积指标

1.算法描述

   AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。AUC越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值。

   AUC(Area Under Curve)被定义为ROC曲线下的面积。我们往往使用AUC值作为模型的评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。
    其中,ROC曲线全称为受试者工作特征曲线 (receiver operating characteristic curve),它是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(敏感性)为纵坐标,假阳性率(1-特异性)为横坐标绘制的曲线。

AUC就是衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。

   ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上敌军载具(飞机、船舰)的指标,属于信号检测理论。

ROC曲线的横坐标是伪阳性率(也叫假正类率,False Positive Rate),纵坐标是真阳性率(真正类率,True Positive Rate),相应的还有真阴性率(真负类率,True Negative Rate)和伪阴性率(假负类率,False Negative Rate)。这四类指标的计算方法如下:
(1)伪阳性率(FPR):判定为正例却不是真正例的概率,即真负例中判为正例的概率
(2)真阳性率(TPR):判定为正例也是真正例的概率,即真正例中判为正例的概率(也即正例召回率)
(3)伪阴性率(FNR):判定为负例却不是真负例的概率,即真正例中判为负例的概率。
(4)真阴性率(TNR):判定为负例也是真负例的概率,即真负例中判为负例的概率。
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC曲线是基于混淆矩阵得出的。一个二分类模型的阈值可能设定为高或低,每种阈值的设定会得出不同的 FPR 和 TPR ,将同一模型每个阈值的 (FPR, TPR) 坐标都画在 ROC 空间里,就成为特定模型的ROC曲线。ROC曲线横坐标为假正率(FPR),纵坐标为真正率(TPR)。
AUC就是曲线下面积,在比较不同的分类模型时,可以将每个模型的ROC曲线都画出来,比较曲线下面积做为模型优劣的指标。ROC 曲线下方的面积(Area under the Curve),其意义是:
(1)因为是在1x1的方格里求面积,AUC必在0~1之间。
(2)假设阈值以上是阳性,以下是阴性;
(3)若随机抽取一个阳性样本和一个阴性样本,分类器正确判断阳性样本的值高于阴性样本的概率 = AUC 。
(4)简单说:AUC值越大的分类器,正确率越高。
从AUC 判断分类器(预测模型)优劣的标准:
AUC = 1,是完美分类器。
AUC = [0.85, 0.95], 效果很好
AUC = [0.7, 0.85], 效果一般
AUC = [0.5, 0.7],效果较低,但用于预测股票已经很不错了
AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

2.仿真效果预览
matlab2022a仿真结果如下:

560bcb43c185d4d972fcbbcbea090ad0_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

clear;
close all;
warning off;
addpath(genpath(pwd));
 
load fisheriris
 
% Classification 1
labels = strcmp(species, 'virginica');
 
S2=SimpleClassifier(meas, labels, 'virginica');
S2=S2.clas_LOOCV('linear'); 
S2.disp_conf();
S2=S2.roc_curve_perf_pos();
 
% Classification 2
labels = strcmp(species, 'versicolor');
S3=SimpleClassifier(meas, labels, 'versicolor');
S3=S3.clas_LOOCV('linear'); 
S3.disp_conf();
S3=S3.roc_curve_perf_pos();
 
plot(S2, S3)
mama174
相关文章
|
C++ 测试技术 算法
蓝桥杯-02-蓝桥杯C/C++组考点与14届真题
蓝桥杯-02-蓝桥杯C/C++组考点与14届真题
|
安全 Linux 测试技术
|
移动开发 自然语言处理 小程序
分享88个企业政府PHP源码,总有一款适合你
分享88个企业政府PHP源码,总有一款适合你
471 2
|
测试技术 PHP 数据库
ThinkPHP6.0使用PHPUnit进行单元测试
ThinkPHP6.0使用PHPUnit进行单元测试
1084 0
ThinkPHP6.0使用PHPUnit进行单元测试
|
2月前
|
人工智能 Unix API
50_选择模型:开源vs闭源
在大型语言模型(LLM)技术快速发展的今天,企业和开发者面临着一个关键决策:是选择开源LLM模型还是闭源LLM服务?这个选择直接影响到项目的成本结构、开发灵活性、数据安全性以及长期战略规划。随着2025年LLM技术的进一步成熟,开源与闭源模型之间的竞争格局也发生了显著变化。
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
306 6
|
存储 消息中间件 缓存
|
Android开发 C++
so兼容32位和64位
在Android开发中遇到32位`xxx.so`动态库在64位设备上运行失败的问题,导致应用崩溃。错误提示因缺少64位版本的库。尝试创建`arm64-v8a`目录并复制库文件后,依然崩溃,因为库本身是32位。解决方案是在`build.gradle`中添加配置,指定支持的ABI滤镜,并在`gradle.properties`中设置`android.useDeprecatedNdk=true`,以解决兼容性问题。
536 7
|
XML JSON 前端开发
网络要素服务(WFS)详解
网络要素服务(WFS)详解
373 0
|
运维 Cloud Native 前端开发
MACH 架构的质量工程指南
MACH 架构的质量工程指南
464 0
MACH 架构的质量工程指南