2019-03-15
阅读量:
1464
ROC绘图优化背后的理由是什么?
第一个代码片段是微不足道的,与定义一致
drawROC.A <- function(T, D) {
cutpoints <- c(-Inf, sort(unique(T)), Inf)
sens <- sapply(cutpoints,
function(c) sum(D[T>c])/sum(D))
spec <- sapply(cutpoints,
function(c) sum((1-D)[T<=c]/sum(1-D)))
plot(1-spec, sens, type = "l")
}
然后作者说(我做了一些小编辑),
有一个相对简单的函数优化,可以大大提高速度,但代价是需要T
一个数字,而不仅仅是一个对象>
和<=
定义的对象
drawROC.B <- function(T, D){ DD <- table(-T, D) sens <- cumsum(DD[ ,2]) / sum(DD[ ,2]) mspec <- cumsum(DD[ ,1]) / sum(DD[ ,1]) plot(mspec, sens, type="l") }
我已经花了很长时间阅读优化版本,但是卡在第一行:看起来-
前面的负号T
用于以相反的顺序执行累积总和,但为什么呢?
混淆了,我把两个函数产生的ROC绘制在一起,检查结果是否相同。
左图是由drawROC.A
而产生的,而右图是结果drawROC.B
。乍一看,它们并不完全相同,但如果你仔细观察,Y轴的范围是不同的,所以它们实际上是相同的图。
解决办法:这DD <- table(-T, D)意味着以相反的顺序执行累积和,这是因为我们正在计算Pr(T> c),而表的累积和正在计算T中小于或等于当前元素的元素数。
换句话说,这也可以,因为Pr(T> c)= 1 - Pr(T <= c)。






评论(0)


暂无数据
推荐帖子
0条评论
0条评论
1条评论