我的数据对于阈值确定应用ROC等是不规则的。为了简化,这是一个演示,让x
是
x<-c(0,0,0,12, 3, 4, 5, 15, 15.3, 20,18, 26)
假设x=15.1
是未知的真实阈值,相应的测试结果y
将为负0
)x==0
或x > 15.1
,否则为{{ 1}}为正(y
),以便:
1
由于y<-c(0,0,0,1, 1, 1, 1, 1, 0,0,0,0)
0
是一个积极的结果,我想知道以哪种方式我可以确定x
预测x
的最佳阈值。我尝试过R打包的pROC和ROCR,这两种情况似乎都不是直截了当的。有人会给我一些建议吗?
答案 0 :(得分:3)
您的情况是,对于x的高值,您预测为0,对于x的低值,则预测为1,除非您始终预测0,如果x == 0.标准软件包(如pROC和ROCR)期望x的低值关联预测y = 0。您可以通过以下方式将数据转换为这种情况:
x
在代码中(使用this answer为每个截止值提取TPR和FPR):
x2 <- -x
x2[x2 == 0] <- -1000
library(ROCR)
pred <- prediction(x2, y)
perf <- performance(pred, "tpr", "fpr")
data.frame(cut=perf@alpha.values[[1]], fpr=perf@x.values[[1]],
tpr=perf@y.values[[1]])
# cut fpr tpr
# 1 Inf 0.0000000 0.0
# 2 -3.0 0.0000000 0.2
# 3 -4.0 0.0000000 0.4
# 4 -5.0 0.0000000 0.6
# 5 -12.0 0.0000000 0.8
# 6 -15.0 0.0000000 1.0
# 7 -15.3 0.1428571 1.0
# 8 -18.0 0.2857143 1.0
# 9 -20.0 0.4285714 1.0
# 10 -26.0 0.5714286 1.0
# 11 -1000.0 1.0000000 1.0
现在,您可以根据真实和误报率选择您喜欢的截止值,并记住所选截止值将从原始值中取消。