我有一些模型,使用ROCR
个包对预测的类百分比向量,我有一个性能对象.用规范"tpr"、"fpr"绘制性能对象,可以得到ROC曲线.
我在比较假阳性率(x)的特定阈值下的模型.我希望从性能对象中得到真阳性率(y)的值.更重要的是,我想得到用于生成该点的类百分比阈值.
最接近阈值但不高于阈值的假阳性率(x-value
)的指数应给出相应真阳性率(y-value
)的指数.我不太确定如何得到那个索引值.
更重要的是,我如何得到用来证明这一点的类概率阈值?
我有一些模型,使用ROCR
个包对预测的类百分比向量,我有一个性能对象.用规范"tpr"、"fpr"绘制性能对象,可以得到ROC曲线.
我在比较假阳性率(x)的特定阈值下的模型.我希望从性能对象中得到真阳性率(y)的值.更重要的是,我想得到用于生成该点的类百分比阈值.
最接近阈值但不高于阈值的假阳性率(x-value
)的指数应给出相应真阳性率(y-value
)的指数.我不太确定如何得到那个索引值.
更重要的是,我如何得到用来证明这一点的类概率阈值?
这就是为什么str
是我最喜欢的R函数:
library(ROCR)
data(ROCR.simple)
pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf)
> str(perf)
Formal class 'performance' [package "ROCR"] with 6 slots
..@ x.name : chr "False positive rate"
..@ y.name : chr "True positive rate"
..@ alpha.name : chr "Cutoff"
..@ x.values :List of 1
.. ..$ : num [1:201] 0 0 0 0 0.00935 ...
..@ y.values :List of 1
.. ..$ : num [1:201] 0 0.0108 0.0215 0.0323 0.0323 ...
..@ alpha.values:List of 1
.. ..$ : num [1:201] Inf 0.991 0.985 0.985 0.983 ...
啊哈!这是一个S4 class,所以我们可以使用@
来访问插槽.以下是如何制作data.frame
:
cutoffs <- data.frame(cut=perf@alpha.values[[1]], fpr=perf@x.values[[1]],
tpr=perf@y.values[[1]])
> head(cutoffs)
cut fpr tpr
1 Inf 0.000000000 0.00000000
2 0.9910964 0.000000000 0.01075269
3 0.9846673 0.000000000 0.02150538
4 0.9845992 0.000000000 0.03225806
5 0.9834944 0.009345794 0.03225806
6 0.9706413 0.009345794 0.04301075
如果您有一个想要达到的fpr阈值,您可以将其子集为data.frame
,以找到低于该fpr阈值的最大tpr:
cutoffs <- cutoffs[order(cutoffs$tpr, decreasing=TRUE),]
> head(subset(cutoffs, fpr < 0.2))
cut fpr tpr
96 0.5014893 0.1495327 0.8494624
97 0.4997881 0.1588785 0.8494624
98 0.4965132 0.1682243 0.8494624
99 0.4925969 0.1775701 0.8494624
100 0.4917356 0.1869159 0.8494624
101 0.4901199 0.1962617 0.8494624