如何在r中编码以使预测模型的阈值自动成为一个值,以使灵敏度对于模型的所有运行都是特定的比例/值?
例如,鉴于以下情况:
如何编写自动始终选择灵敏度阈值0.8的r代码,即从上方选择方案2?对于上下文,我使用的是插入符号建模框架。
这些关于阈值优化的链接没有太大帮助:
http://topepo.github.io/caret/using-your-own-model-in-train.html#Illustration5
答案 0 :(得分:0)
(1)
假设您有一个包含值和真实标签的数据。在这里,错误5和真实5
df <- data.frame(value = c(1,2,3,5,8,4,6,7,9,10),
truth = c(rep(0,5), rep(1,5)))
在阈值9、9和10被检测为真阳性,灵敏度= 40% 在阈值6(或5到6之间的任何值)处,检测到(6,7,9,10),灵敏度= 80%
要查看ROC曲线,可以使用pROC软件包
library(pROC)
roc.demo <- roc(truth ~ value, data = df)
par(pty = "s") # make it square
plot(roc.demo) # plot ROC curve
如果要百分比,请执行以下操作
roc.demo <- roc(truth ~ value, data = df, percent = T)
,然后在下面的80中替换0.8。
您可以从roc对象获取阈值
roc.demo$thresholds[roc.demo$sensitivities == 0.8]
您可能会看到它显示4.5和5.5
您也可以使用 roc.demo $敏度> 0.79&roc.demo $敏度<0.81
(2)
或者,如果您只是想要一个阈值而又不关心特异性,则可以尝试使用分位数功能
quantile(df$value[df$truth == 1],
probs = c(0.00, 0.10, 0.20, 0.30), type = 1) # percentile giving the closest number
概率= 0.20对应于80%的灵敏度
0% 10% 20% 30%
4 4 4 6
您正在寻找4到6之间的任何阈值。您可以根据需要更改概率。
希望它会有所帮助。