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曲线,我们使用具体的实例来说明:如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标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)
3列分别是Sex(性别)、Bwt(体重)、Hwt(心脏重量),使用catTools绘制ROC曲线并计算AUC面积:
# 使用caTools绘制ROC曲线并计算ROC曲线面积AUC:
library(caTools)
colAUC(cats[,2:3],cats[,1],plotROC = T)
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);
###计算曲线下的AUC即面积
auc<- performance(pred,"auc");
# Bwt的面积:slot(auc,"y.values")[[1]] # 结果为0.83
# Hwt的面积:
slot(auc,"y.values")[[2]] #结果为0.76