ROC

ROC

 

ROC分析相关

ROC(Receiver Operating Characteristic,受试者工作特征曲线)的概念来自信号检测原理中

    • 最初只是为了区分噪声和非噪声
    • 对于二分类问题具有很好的表现性能(仅仅是二分类问题,即是非,无有,0/1等)
    • 通过以(FPR,TPR)为坐标点画出二维平面中的曲线,即ROC曲线 
      • Recall = TPR = TP/(TP+FN) (True Positive Rate,也叫”sensitivity”或者”recall”或”召回率”或”查全率”或”真阳性率”)
      • FPR = FP/(FP+TN) (False Positive Rate,也叫”Fall-Out”或者”假阳性率”)
      • Precision = TP/(TP+FP) (精确度/率)
      • Accuracy = (TP+FN)/(P+N) = (TP+FN) / (TP + FN + FP + FN) (准确率,姑且这么叫吧,其中P为所有的正样本,N为所有的负样本)
      • F-Meature = 2(Precision*Recall)/(Precision + Recall)

 

 下面通过一个例子来分析:一个场景是在人脸检测(Detection)中,很多相关的研究或者企业评价他们的检测性能程度是通过ROC曲线来评定的,如知名的人脸检测评测平台FDDB(Face Detection Data Set and Benchmar)

是由马萨诸塞大学计算机系维护的一套公开数据库,为来自全世界的研究者提供一个标准的人脸检测评测平台,其中涵盖在自然环境下的各种姿态的人脸;该校还维护了LFW等知名人脸数据库供研究者做人脸识别(Recognition)的研究,数据集P和N均为

ground truth,即已经标定好是有人脸,如下定义:

 P(有人脸数据集)N(无人脸数据集)
被检测出人脸TP        FN        
未被检测出FPTN

 ROC曲线中用(FPR,TPR)来表示坐标系中的(X,Y)坐标

ROC距离基线(ROC Space Baseline)

  • 一个分类器得到的ROC坐标点总是在距离基线的上方的
  • 预测值总是在0~1

当有多个分类器时(这里可以认为有多个不同性能的人脸检测模型或者是同一个人脸检测模型的不同检测阈值作为分类器),得到ROC图:

  • 这个图叫”ROC Convex Hull”
  • 在C1,C2,C4,C5连线下方总是没有这条线(Hull)上的分类器好,比如C3

    ISO精度线(ISO Accuracy Lines)

 

  • 用neg表示二分类中的负类个数,如无人脸数据个数
  • 用pos表示二分类中的正类个数,如有人脸数据个数

  那么ISO精度线表示为:y=ax+b

  • a即为这条线的斜率(slope)
  • a=neg/pos
  • 在将ROC距离基线分割就得到了ISO精度线

选取最优的分类器

选取最优分类器,或者从上面说的选取最优的人脸检测模型或者是同一个人脸检测模型中最优的阈值(Threshold)。从ROC曲线中可以得知,TPR越高,FPR越低则代表着分类器越好,即靠近ROC坐标左上角。

 

  • 首先得到ISO精度线的斜率slope=neg/pos(注意斜率可能大于1)
  • 选择以slope为斜率的直线,初始截距为0
  • 往左上角移动该直线,直到遇到最后一个分类器,即为最优分类器(如图中C4)

  ROC曲线有一个很好的优点,当正负样本(P和N)数量变化时,ROC曲线能够保持不变,这就为找到最优分类器提供了保证。

通过程序找到最优分类器

即求离散ROC曲线与ISO精度线的切点了,这个切点就是最优分类器

首先是要计算得到各分类器的ROC坐标的,即通过求取TP,FP,TN,FN,然后求取TPR,FPR获得坐标,再通过已知的ISO精度线slope,就可以计算得到切点了

 关于ROC下面积

一般来说,ROC曲线下面积在0到1之间。如果一项诊断试验的灵敏度是1,而假阳性率是0,那么该诊断试验的ROC曲线下面积就是1。但是这样的诊断试验几乎不存在,一个诊断试验往往不能将所有的患者和非患者都准确地识别出来。同时,也不会出现某一项诊断试验的ROC曲线下面积为0的情况,因为基本不会有一项诊断试验错误地识别了所有的患者和非患者。即使真的有这样的诊断试验,我们只需要将所有的诊断结果反过来,就可以得到完美结果。

也因为如此,我们认为ROC曲线下面积不会低于0.5,如果低了,我们只需将诊断翻转,就能得到更好的结果。如果诊断试验的结果完全随机(等同于诊断时,靠投掷硬币,正面向上认为是患者,反面向上认为是非患者),那么我们得到的ROC曲线下面积就是0.5,即ROC曲线下面积的最小值是0.5。

可见,只要ROC曲线下面积大于0.5,就证明该诊断试验具有一定的诊断价值。同时,ROC曲线下面积越接近1,离(0,1)点越近,证明诊断试验的真实性越好

 

参见:http://blog.csdn.net/FreeApe/article/details/52090515

 
 
 
 
 
 
 
posted @ 2018-03-12 20:12 DELH 阅读(...) 评论(...) 编辑 收藏
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要编写一个自动画出ROC曲线的函数,可以使用以下步骤: 1. 首先,你需要收集分类器预测结果的真实标签和预测概率。将真实标签和预测概率作为输入参数传递给函数。 2. 在函数中,根据预测概率和真实标签计算不同阈值下的真正例率(True Positive Rate)和假正例率(False Positive Rate)。 3. 使用得到的真正例率和假正例率,绘制ROC曲线。可以使用Matlab中的plot函数来实现。 4. 计算ROC曲线下的面积(AUC值)。可以使用Matlab中的trapz函数来计算。 下面是一个Matlab函数的示例代码,用于自动画出ROC曲线: ```matlab function roc_curve(labels, scores) % 计算不同阈值下的真正例率和假正例率 [fpr, tpr, ~ = perfcurve(labels, scores, 1); % 绘制ROC曲线 plot(fpr, tpr); xlabel('False Positive Rate'); ylabel('True Positive Rate'); title('ROC Curve'); % 计算AUC值 auc = trapz(fpr, tpr); fprintf('AUC: %.4f\n', auc); end ``` 使用这个函数,你可以传入真实标签和预测概率来画出ROC曲线,并计算AUC值。例如,假设你有以下测试数据: ```matlab labels = [1, 0, 1, 1, 0]; scores = [0.9, 0.3, 0.8, 0.7, 0.2]; ``` 你可以调用函数来画出ROC曲线: ```matlab roc_curve(labels, scores); ``` 这会生成一个ROC曲线,并输出AUC的值。 请注意,这只是一个示例代码,你可以根据实际需求进行修改和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ROC曲线的matlab技巧实现](https://blog.csdn.net/njustzj001/article/details/21885299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [matlab实现ROC曲线](https://blog.csdn.net/weixin_41930950/article/details/122643666)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值