楼主: qianduoduo216
2862 9

[问答] ROC 曲线 数据量大速度慢怎么办? [推广有奖]

  • 0关注
  • 0粉丝

初中生

33%

还不是VIP/贵宾

-

威望
0
论坛币
41 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
598 点
帖子
9
精华
0
在线时间
13 小时
注册时间
2016-7-9
最后登录
2017-3-7

楼主
qianduoduo216 发表于 2016-7-9 21:47:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本人菜鸟一枚,需要做ROC 曲线,问题在于我读入的数据有百万行,这样跑ROC曲线运行起来实在太慢了,一个小时也画不出来一条,因为需要很多组数据比较,所以想问问是否有什么方法提速??
二维码

扫码加我 拉你入群

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

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

关键词:ROC 怎么办 ROC曲线 什么方法 数据比较

沙发
bbslover 在职认证  发表于 2016-7-10 04:52:15
有R packages做ROC曲线,你试试看

藤椅
qianduoduo216 发表于 2016-7-11 21:26:12
bbslover 发表于 2016-7-10 04:52
有R packages做ROC曲线,你试试看
我是用的pROC 这个包做的,觉得不大行

板凳
bbslover 在职认证  发表于 2016-7-12 00:40:57
试试其他包,还有就是,如果你有横坐标和纵坐标,你自己画

报纸
qianduoduo216 发表于 2016-7-12 18:48:22
bbslover 发表于 2016-7-12 00:40
试试其他包,还有就是,如果你有横坐标和纵坐标,你自己画
还有其他的包,那我去找找。什么是有横坐标和纵坐标?我有的就是label和score的数据,是要自己算FPR和TPR的意思吗?pROC那个命令应该是把从高到低每个score都当成一个threshold,大神是否知道有没有参数可以调整这个threshold的,比如跳着来,这样应该可以省时间吧?

地板
bbslover 在职认证  发表于 2016-7-12 20:56:55
对,要自己算FPR和TPR

7
bbslover 在职认证  发表于 2016-7-12 21:00:15
自己试试下面代码:

true_Y是label,probs是sores.
  1. true_Y = c(1,1,1,1,2,1,2,1,2,2)
  2. probs = c(1,0.999,0.999,0.973,0.568,0.421,0.382,0.377,0.146,0.11)

  3. getROC_AUC = function(probs, true_Y){
  4.     probsSort = sort(probs, decreasing = TRUE, index.return = TRUE)
  5.     val = unlist(probsSort$x)
  6.     idx = unlist(probsSort$ix)  

  7.     roc_y = true_Y[idx];
  8.     stack_x = cumsum(roc_y == 2)/sum(roc_y == 2)
  9.     stack_y = cumsum(roc_y == 1)/sum(roc_y == 1)   

  10.     auc = sum((stack_x[2:length(roc_y)]-stack_x[1:length(roc_y)-1])*stack_y[2:length(roc_y)])
  11.     return(list(stack_x=stack_x, stack_y=stack_y, auc=auc))
  12. }

  13. aList = getROC_AUC(probs, true_Y)

  14. stack_x = unlist(aList$stack_x)
  15. stack_y = unlist(aList$stack_y)
  16. auc = unlist(aList$auc)

  17. plot(stack_x, stack_y, type = "l", col = "blue", xlab = "False Positive Rate", ylab = "True Positive Rate", main = "ROC")
  18. axis(1, seq(0.0,1.0,0.1))
  19. axis(2, seq(0.0,1.0,0.1))
  20. abline(h=seq(0.0,1.0,0.1), v=seq(0.0,1.0,0.1), col="gray", lty=3)
  21. legend(0.7, 0.3, sprintf("%3.3f",auc), lty=c(1,1), lwd=c(2.5,2.5), col="blue", title = "AUC")
复制代码

8
qianduoduo216 发表于 2016-7-13 14:57:03
bbslover 发表于 2016-7-12 21:00
自己试试下面代码:

true_Y是label,probs是sores.
好哒好哒,那我试试看,真是太感谢了~~

9
ntsean 发表于 2016-7-14 02:55:27
you can only sample 1000 cut points

10
qianduoduo216 发表于 2016-7-14 10:56:37
ntsean 发表于 2016-7-14 02:55
you can only sample 1000 cut points
对,我也是希望可以这样, 但是我不知道怎么做?也是说需要自己编程吗?还是说可以在现有的包的命令中设置某参数来调?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-24 10:31