ROC曲线基本知识:

判断分类器的工作效率需要使用召回率和准确率两个变量。

召回率:Recall,又称“查全率”,

准确率:Precision,又称“精度”、“正确率”。

以判断病人是否死亡的分类器为例,可以把分类情况用下表表示:

 

实际死亡

实际未死亡

分类为死亡

A

B

分类为未死亡

C

D

表5-2

A:正确分类,命中死亡

B:错误分类,判断为死亡实际未死亡

C:错误分类,判断为未亡实际死亡

D:正确分类,判断未死亡,实际也未死亡

如果我们希望这个分类器对于死亡的判断能力非常高,也就是追求判断为死亡的命中率越高越好。更一般的说法,对于特定临床结局的判断能力越强越好,评价这个分类器能力的指标被称为召回率,也被称为“查全率”,即Recall = A/(A+C),召回率当然越大越好。

如果我们希望分类器对于死亡的预测能力更高,也就是分类为死亡的人死亡的概率最大。或者更一般的说法,对于特定临床结局的预测能力越强越好,这是追求“准确率”,即Precise = A/(A+B),越大越好。

在上面那个表格当中,由于样本总数一定,因此A+B和C+D的总数也是一定的,我们把改变分类规则,让A+B逐渐增大叫做判断标准放宽。将C+D数量增大叫做判断标准收严

很容易可以看出,召回率反映的是在实际死亡的样本当中,分类为死亡的人所占的比例。如果我们把分类标准放宽,A+B变得很大,c会减小,甚至c=0直到“宁可错杀一千,也不放过一个”,有点危险的人统统算成死亡的人,则很可能获得较高的召回率。但是此时,准确率会逐渐降低。

准确率则是在判断为死亡的样本中,真实死亡的人所占的比例,如果我们把分类标准定得很严,仅把哪些生命体征极为微弱,伤情特别严重的人纳入判断为可能死亡的组,在这种情况下,准确率会变得很高,分类器判断为死亡的人大多活不了,但是此时分类器的召回率就会小得不可接受。因此,要对分类器的工作效能进行判断,需要同时考察准确率和召回率。两者均高,则分类器更好。

在不改变分类器基本性能的情况下,仅仅改变纳入参数的标准,就可以在同一数据集里面多次检查统计率和召回率,最后获得准确率(P)和召回率(R)之间的曲线。这条曲线上的每一个点和坐标(1,1)之间的距离可以用来判断出分类器的性能,如果这条曲线当中某一个点通过了坐标(1,1)也就是准确率和召回率都达到100%,那么此时分类标准就被称为“完美分类标准”

一般来说,如果分类器的目的是进行死亡筛查,找出那些有可能死亡的患者重点关注,那么此时应当重视召回率(查全率),这样可以避免忽视那些有可能死亡的患者。而如果分类器的目的是为了做疾病诊断,那么则应该注意准确率,把太多的没有病死风险的患者判断为有风险则有可能影响用户对分类器的信心。

如果同时对召回率和准确率都有所要求,可以用经验测度值F来表示系统的工作效能。

F=2*P*R/(P+R)

F值越接近1,则系统的工作效能越高。

2.3.3ROC和AUC

回到ROC上来,ROC的全名叫做接收器工作特性曲线(Receiver Operating Characteristic)。

它由两个指标构成:

(一)真阳性率True Positive Rate ( TPR ) = A / A+C ,TPR代表能将正例分对的概率,也就是上面提到的查全率。

(二)假阳性率False Positive Rate( FPR ) = B /(B+D) ,FPR代表将负例错分为正例的概率。

在ROC 空间中,每个点的横坐标是假阳性率,纵坐标是真阳性率,这也就描绘了分类器在真阳性率和假阳性率之间的一个连续的权衡过程。ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve。根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve。ROC 曲线起点是(0,0),意味着某种异常严格的标准,使得没有任何样本被判断为阳性。终点是(1,1)意味着某种异常宽松的标准,使得任何样本不管真假,都被判断为阳性。实际上(0, 0)和(1, 1)连线形成的ROC curve就是一个随机分类器。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。

用ROC curve来表示分类器性能很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。

于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的性能。如果AUC的值仅仅只有0.5,那么则意味着这个分类器的性能和随机抛硬币类似。

建立好上述预测分类器之后,需要评估它的预测工作效率,也就是对于给定的入院患者数据,我们建立起来的分类器在多大程度上能够正确预测临床结局。

对于分类器或者预测器进行功能评估由一个很重要的一个因素是要防止“过度分类”。没有任何两个病人的入院数据是完全相同的。如果在已知临床结局的情况下去建立起一个区别病人生存和死亡的模型,如果纳入足够多的入院数据,很可能建立起一套非常“完美”的分类器,把已有的数据代入这个分类器可以准确的判断是临床结局。但是如果一旦有新数据进入这套分类器,那么判断结果往往就有可能出错。造成这种现象的原因是因为分类器构建出来的目的不是对已经发生的事情进行分类,而是对未发生的事情进行预测。纳入过多的变量,通过“事后诸葛亮”似的过程来对样本进行分类很有可能把一些在统计学上和样本结局相关,但实际上只是巧合的变量计算入数据建模当中,从而使得分类器的判断准确率变得很高。

有两类方法可以防止过度分类,一类是将数据训练集和测试集彻底分开,用新获得的数据来进行区分模型的准确性检验。而另外一种方法则是在构建训练集的时候进行交叉验证。所谓交叉验证就是,用所有数据的一部分用作训练集。另外一小部分作为验证集。计算出分类器准确度。然后把原来作为验证集的数据纳入训练集,从训练集当中新画出一部分样本作为验证集。最后直到所有的样本都有机会纳入训练集和验证集当中。这样的一个过程就称为交叉验证(cross validation),交叉验证可以在样本有限的情况下获得尽可能稳定的分类结果。

ROC曲线在统计工具包当中是由perfcurve函数来决定的

典型的使用方法是:

[X,Y,T,AUC] = perfcurve(labels,scores,posclass)

输出部分X和Y表示的是ROC曲线的坐标,AUC表示曲线下面积,T表示thresholds,当T=1的时候表示存在一个分类标准,可以100%的将所有样本准确分类,特异度和敏感度都是100%。可以用plot(X,Y)来获得最简单的ROC曲线。

输入部分labels表示样本的真实分类,scores表示学习后的分类,posclass表示我们想要的研究对象的分类标记比如,当用于某个预测颅骨性别的模型进行ROC判断的时候,预测男性和女性的ROC判别曲线是不一样的,posclass可以设置为'male' or 'female'。

如何利用Matlab进行ROC分析的更多相关文章

  1. [转] 利用Matlab提取图片中曲线数据

    原文地址 网易博客 前一段时间看到一篇文章"利用Matlab提取图图片中的数据",觉得思路挺好,遂下载下来研究了一番,发现作者所编写的程序没有考虑原始图片非水 平放置的情况,而实际 ...

  2. 模式识别:利用MATLAB生成模式类

    近期開始了模式识别的学习,在此之前须要对模式和模式类的概念有一个了解,这里使用MATLAB实现一些模式类的生成.在此之前,引用百科上对于模式识别和模式类的定义.也算加深以下了解: 模式识别(Patte ...

  3. MCP|WJ|Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex proximity extension assay(利用多重邻位延伸分析技术进行宫颈癌血浆蛋白候选生物标记物的鉴定研究)

    文献名:Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex pr ...

  4. 调试技巧 —— 如何利用windbg + dump + map分析程序异常

    调试技巧 —— 如何利用windbg + dump + map分析程序异常 逗比汪星人2011-09-04上传   调试技巧 —— 如何利用windbg + dump + map分析程序异常 http ...

  5. 利用Matlab生成一个网格化的三维球面(生成直角坐标)

    利用Matlab生成一个网格化的三维球面,分别对径向方向.经度方向和纬度方向进行网格化,代码如下: %生成一个笛卡尔坐标系下球面网格的x,y,z坐标 %r为球面距离 %nJingdu,nWeidu分别 ...

  6. 【转】利用matlab生成随机数函数

    原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵  rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...

  7. MATLAB 的字符串分析

    MATLAB的字符串分析. 字符串实际上是指1Xn 的字符数组. MATLAB软件具有强大的字符串处理功能,提供了很多的字符或字符串处理函数,包括字符串的创建.字符串的属性.比较.查找以及字符串的转换 ...

  8. 【caffe-windows】 caffe-master 之 卷积核可视化(利用matlab)

    此篇是利用matlab对caffemodel的卷积核进行可视化.只介绍了卷积核的可视化,不涉及特征图的可视化. 是参考此博客: http://blog.csdn.net/zb1165048017/ar ...

  9. 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数

      clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure ...

随机推荐

  1. Laravel RuntimeException inEncrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths

    php artisan key:generate 运行上面代码即可解决

  2. 【LeetCode】#344 Reverse String

    [Question] Write a function that takes a string as input and returns the string reversed. Example: G ...

  3. DataFormatString 转

    数据绑定之DataFormatString 设定BoundField的DataFormatString,通常有以下几种 DataFormatString= "{0:C}" 货币,货 ...

  4. Centos screen远程会话管理命令

    screen参数 -A 将所有的视窗都调整为目前终端机的大小. -d<作业名称> 将指定的screen作业离线. -h<行数> 指定视窗的缓冲区行数. -m 即使目前已在作业中 ...

  5. Android 三级联动选择城市+后台服务加载数据库

    技术渣,大家将就着看 首先我们需要一个xml数据保存到数据库,这里我从QQ下面找到一个loclist.xml文件 <CountryRegion Name="中国" Code= ...

  6. C++ void*的使用

    void*类型可以存储任何类型的指针,使用的时候强制转化成对应类型的指针便可. #include <iostream> #include <vector> using name ...

  7. chrome 扩展包 postman 的安装

    由于chrome网上应用不能使用.添加扩展程序,需要其他的办法. 1.下载postman安装包.下载地址 2.这一步按照这个下载包中的方法,也可以,可以忽略其错误. 先解压出crx,使用两个办法,使用 ...

  8. oracle Net Manager 服务命名无法配置(无法新建、添加服务名)

    今天在配置oracle Net Manager 配置服务命名的时候总是无法配置,以前配置的服务名都显示不出来,然后点击绿色添加按钮也没反应,因为先前我修改了oracle\product\10.2.0\ ...

  9. guava学习--FutureFallback

    FutureFallback提供一个Future的备用来替代之前失败的Future,常被用来作为Future的备份或者默认的值. @Testpublic void testFuturesFallbac ...

  10. MYSQL5.7版本sql_mode=only_full_group_by问题

    具体出错提示: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr ...