分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix)、收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)。“分类器评价与在R中的实现”系列中将逐个介绍。
之前已介绍过最基础的混淆矩阵、收益图与提升图。本篇介绍ROC图(ROC Chart)及由此计算的AUC。
一、ROC图简介
ROC曲线和收益/提升图一样,通过对分类不同阀值的记录对混淆矩阵进行改良。由于种种历史原因,ROC又叫“接收者操作特征曲线”。它的x轴是false positive rate(1-specificity),y轴是true positive rate(sensitivity)。
显然,ROC曲线是过(0,0)和(1,1)两点的。考虑两种极端情况:当将阀值放松,把所有观测分类为negative时,在(0,0);当将阀值收紧,将观测全部分类为positive时,为(1,1)。随机模型的ROC曲线是穿过(0,0)和(1,1)的45度线。
左上角的(0,1)点表示判断全部正确,所以理想模型应该与这一点越接近越好。这个接近程度可以用ROC曲线下面积AUC(Area Under Curve)来表示。随机模型的AUC为右下三角0.5,全部分类正确模型的AUC为1。所以模型越接近左上角,AUC会越接近1,反之会越接近0.5。
二、在R中作ROC图,并计算AUC
1 直接计算
直接计算TPR和FPR。
require(ROCR)
data(ROCR.simple)
data <- as.data.frame(ROCR.simple)[1:10, ]
data <- data[order(data[, 1], decreasing = TRUE), ]
data$target_cum <- cumsum(data[, "labels"])
data$tpr <- data$target_cum/sum(data[, "labels"])
data$fpr <- (row(data[, 1, drop = F]) - data$target_cum)/(nrow(data) - sum(data[,
"labels"]))
data
可以看到fpr,tpr是经过(1,1)点的。(0,0)点未显示在表中。
## predictions labels target_cum tpr fpr
## 7 0.9706 1 1 0.1667 0.00
## 8 0.8902 1 2 0.3333 0.00
## 10 0.8688 0 2 0.3333 0.25
## 9 0.7818 1 3 0.5000 0.25
## 1 0.6125 1 4 0.6667 0.25
## 3 0.4321 0 4 0.6667 0.50
## 5 0.3849 0 4 0.6667 0.75
## 2 0.3643 1 5 0.8333 0.75
## 6 0.2444 1 6 1.0000 0.75
## 4 0.1403 0 6 1.0000 1.00
plot(data$tpr, data$fpr, type = "l", main = "ROC Chart")
2 用ROCR包画图、计算AUC
pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels)
roc <- performance(pred, "tpr", "fpr")
plot(roc, main = "ROC chart")
auc <- performance(pred, "auc")@y.values
auc
## [[1]]
## [1] 0.8342
AUC为0.8342可以这样解释:当从此模型预测的positive案例中随机选择一个,再从此模型预测的negative案例中随机选择一个,那么有83.43%的机会前者的分数会比后者高,比随机模型多了33.43%的可能性。
from: http://iccm.cc/classification-model-evaluation-roc-chart-auc/