楼主: 我是小趴菜
2793 0

[实际应用] ROC绘图优化背后的理由是什么? [推广有奖]

  • 0关注
  • 4粉丝

教授

35%

还不是VIP/贵宾

-

威望
0
论坛币
29650 个
通用积分
380.5350
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
7150 点
帖子
670
精华
0
在线时间
37 小时
注册时间
2022-8-30
最后登录
2023-4-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

第一个代码片段是微不足道的,与定义一致

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)。




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ROC 微不足道 draw raw

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 19:43