我为几个模型绘制了 ROC。这些模型用于将我的样本分为 2 类。
使用这些命令,我可以获得每个模型的敏感性与特异性图:
perf <- performance(pred, "sens", "spec")
plot(perf)
我是否应该依靠每个模型的曲线下面积 (AUC) 来得出哪个模型更好?除了AUC,我们是否应该考虑其他结果以得出哪个模型更好?
如果是,如何用 R 获得 AUC?我是否正确假设“模型的分类能力越小越好?”
我为几个模型绘制了 ROC。这些模型用于将我的样本分为 2 类。
使用这些命令,我可以获得每个模型的敏感性与特异性图:
perf <- performance(pred, "sens", "spec")
plot(perf)
我是否应该依靠每个模型的曲线下面积 (AUC) 来得出哪个模型更好?除了AUC,我们是否应该考虑其他结果以得出哪个模型更好?
如果是,如何用 R 获得 AUC?我是否正确假设“模型的分类能力越小越好?”
AUROC 是评估模型的众多方法之一——事实上,它判断您的方法可能产生的良好排名(或“确定性”度量)。是否使用它而不是精确召回或简单准确度或 F-measure 的问题仅取决于特定的应用程序。
模型选择本身就是一个有问题的问题 - 通常您还应该使用您认为最适合应用程序的分数,并注意您的选择很重要(通常它不是重要的,其他一些因素可能很重要,比如甚至计算时间) .
关于 R 中的 AUC——我看到你使用ROCR了 ,这使得情节很好,但它也非常臃肿,因此整合起来很慢而且很困难。colAUC从包中尝试caTools——它使用起来非常快速且简单。哦,更大的 AUC 更好。
正如 mbq 所写,您是否应该使用 AUC 的答案取决于您要做什么。值得考虑的两点:
AUROC 对班级分布的变化不敏感。它甚至强调不同的类,这意味着如果类的分布存在很大的不平衡,它就不能很好地反映算法的性能。另一方面,如果您对识别类的特征而不是它们的普遍性更感兴趣,这是一种优势。
AUROC 没有捕捉到不同结果的不同成本,而且您很少同时关心误报和误报。
我觉得 AUROC 是明智的。曲线易于阅读:它们就像混淆矩阵的直观版本。但重要的是要知道我们正在阅读什么以及遗漏了什么。
当您使用 ROCR 时,您可以获得最大化面积的 ROC 曲线点,并使用它来确定相应的阈值:
my_prediction <- predict.gbm(object = gbm_mod, newdata = X, 100)
pred <- prediction(my_prediction, Y)
perf <- performance(pred, 'tpr', 'fpr')
r <- rev((as.data.frame(perf@y.values)*(1-as.data.frame(perf@x.values)))[,1])
threshold <- as.data.frame(perf@alpha.values)[which(r==max(r)),1][1]
您可以将此优化简单地视为在 ROC 曲线下形成最大可能矩形的点。