ROC曲线
Posted zypiner
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROC曲线相关的知识,希望对你有一定的参考价值。
参考资料:
csdn:https://blog.csdn.net/u012374174/article/details/52885583
https://blog.51cto.com/14215529/2371128
作者:zhwhong 链接:https://www.jianshu.com/p/c61ae11cc5f6 来源:简书
wiki
ROC(Receiver Operating Characteristic)曲线,反映敏感性和特异性连续变量的综合指标,roc曲线上每个点反映着对同一信号刺激的感受性。
做过图像识别、机器学习或者信息检索相关研究的人都知道,论文的实验部分都要和别人的算法比一比。可怎么比,人多嘴杂,我说我的方法好,你说你的方法好,各做各的总是不行——没规矩不成方圆。于是慢慢的大家就形成了一种约定,用ROC曲线和PR曲线来衡量算法的优劣。
ROC曲线最初来源于雷达兵的业绩考核。雷达兵的任务是检测雷达信号,区分雷达信号是敌人还是飞鸟,然后发出警报。兵长想知道雷达兵报告的信号中有多少是敌人(真阳性率),有多少是飞鸟(假阳性率)。每个雷达兵的判断标准(阀值)不同,所以该雷达兵发出警报中敌人和飞鸟的数目就不同。将所有雷达兵的结果汇总,就得到一条ROC曲线。每个点代表一个雷达兵(即一个点代表一个判断标准,或参数)检测信号的真阳性率和假阳性率。
应用:给定一个模型/算法和其阈值(阀值即雷达兵的判断标准,有多个标准,即ROC曲线中的每个点),对一个数据集进行预测,计算和汇总在每个阀值下的预测值与实际值的关系。
详细应用举例:
1. 给定100个人,每个都有一个综合素质的指标,即达标/未达标。目的:想选一种方法,或者方法已经选好,但是参数不知道。那么问题是想选一种方法或者参数,用该方法能把这100个人中综合素质达标的人选出来。假定采用文化课考试(即模型/算法)的方法,超过60分(阀值)的人,认为达标,否则,不达标。那么,这样画出的ROC曲线的含义为:每个点代表一个阀值(即规定的达标分数),在该阀值下选出来的达标/未达标人数与已知的达标/未达标人数的比较结果(比较结果用真阳性率和假阳性率来衡量)。这样得到的ROC曲线图中只有一条曲线。
2. 有一个检测CpG岛的新算法,想比较该算法和其他算法的优劣。首先,这个算法会有参数(即阀值),在不同的参数下检测出来的CpG岛的数量是不同,计算检测出来的CpG岛的情况与真实的CpG岛的情况(这里说的情况,仍然是用真阳性率和假阳性率来衡量),比如说:真实存在20个CpG岛,新算法能把其中的17个检测出来,TP=17,再根据计算TPR,FPR的公式得到比率即可。此处着重说原理,不详细说计算公式。在一个图中,展示不同算法的结果,就得到ROC曲线图中的多条不同颜色的曲线。
为什么要用ROC曲线作为衡量不同算法的标准呢?
因为每个算法都有自己的参数,参数不同,算法得到的结果也不同。如果A算法用自己最优参数的结果,与B算法非最优参数的结果比较,那么,A算法肯定是优于B算法的。但是,这样比较不准确,应该与B算法最优参数的结果比较。而ROC曲线就避免了这个问题。比较多个算法的结果,同时将每个算法在各种参数下的结果都展示出来。那么,孰优孰劣的算法就显而易见了。
ROC曲线的缺点呢?
ROC曲线更注重这个模型/诊断方法/算法的检出正确率,而忽略了假阴性率。在疾病诊断模型中,这种考量是合理的,因为就是想打到更高的疾病诊断率。但是,在体检模型中(即正常人体检),需要考量的是真阴性率和假阴性率。即:100个健康人体检,如果一个方法能把所有的病人都检测出来(TPR高,0.9),但是,也容易把健康人当做病人(TNR低,0.7),那么这个方法不适合用于体检模型;如果一个方法虽然不能把所有的病人都检测出来,但是,所有的健康人都没有被误诊为病人,那么这个方法是适合体检模型的。此处以后还需详细了解。
鉴于此,即:有的方法敏感性好,特异性不好;有的方法敏感性不好,特异性好,那么如何评价不同的方法呢?通过计算ROC曲线的面积来评估算法的优劣。
ROC曲线图如何看呢?
曲线趋于平滑的点越靠近左上角,说明模型/诊断方法/算法越好。
总结:ROC曲线上每一个点表示在模型/算法(或诊断方法)在该阀值下进行分类的真阳性率和假阳性率值。纵坐标是真阳性率(敏感性),横坐标是假阳性率(特异性)。即:每个点是一个分类器的结果,只不过分类器的参数不同而已。
附录:
1. 计算公式
真阳性率(True Positive Rate,TPR),灵敏度(Sensitivity),召回率(Recall):
2. ROC曲线图
以上是关于ROC曲线的主要内容,如果未能解决你的问题,请参考以下文章
预测概率是什么?ROC曲线是什么?PR曲线是什么?ROC曲线和PR曲线使用场景差异?
R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值plot.roc函数绘制ROC曲线添加置信区间为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来