#方法杂谈# ROC曲线含义及绘制。

ROC(Receiver Operating Characteristic)翻译为"接受者操作特性曲线"。曲线由两个变量1-specificity(1-FPR,FPR = FP / (FP + TN))Sensitivity (TPR = TP / (TP + FN)) 绘制。

  • | 预测正确 |预测错误
    ---|---|---
    实际正确 |True Positive(TP) | False Negative(FN)
    实际错误 |False Positive(FP) | True Negative(TN)
此外,ROC曲线还可以用来计算“均值平均精度”(mean average precision),这是当你通过改变阈值来选择最好的结果时所得到的平均精度(PPV)。

更好地理解ROC曲线,我们使用具体的实例来说明:如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好

不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

我们以FPR为横轴,TPR为纵轴,得到ROC空间。AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

下面是R实例:

# ROC曲线:
rm(list=ls())
library(MASS)
data(cats)
head(cats)
#方法杂谈# ROC曲线含义及绘制。_第1张图片

3列分别是Sex(性别)、Bwt(体重)、Hwt(心脏重量),使用catTools绘制ROC曲线并计算AUC面积:

# 使用caTools绘制ROC曲线并计算ROC曲线面积AUC:
library(caTools)
colAUC(cats[,2:3],cats[,1],plotROC = T)
#方法杂谈# ROC曲线含义及绘制。_第2张图片

AUC面积为:

当然也可以使用ROCR包绘制并计算AUC的面积:

# 使用ROCR绘制ROC曲线:
library(ROCR)
pred <- prediction(cats[,2:3], cbind(cats[,1],cats[,1]));
perf <- performance(pred,"tpr","fpr");
plot(perf,colorize=TRUE);
#方法杂谈# ROC曲线含义及绘制。_第3张图片
###计算曲线下的AUC即面积
auc<-  performance(pred,"auc");  
# Bwt的面积:
slot(auc,"y.values")[[1]] # 结果为0.83
# Hwt的面积:
slot(auc,"y.values")[[2]] #结果为0.76
两次结果是一样的,即 Bwt和Hwt的AUC面积都在(0.5,1)之间,因此,cats的数据集是一个真是有效的数据集,并且通过Bwt(体重,ACU=0.83)预测性别比通过Hwt(心脏重量,AUC=0.76)要准确一点。

更多原创精彩内容敬请关注生信杂谈

#方法杂谈# ROC曲线含义及绘制。_第4张图片

你可能感兴趣的:(#方法杂谈# ROC曲线含义及绘制。)