提问人:bvowe 提问时间:11/17/2023 更新时间:11/17/2023 访问量:29
R 函数计算阈值下的精度
R Function To Calculate Accuracy at Threshold
问:
DATA = read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
MODEL = glm(admit ~ gre + gpa + rank, data = DATA, family = "binomial")
ACTUAL = DATA$admit
PRED = predict(MODEL, type = "response")
HAVE = data.frame(ACTUAL = ACTUAL, PRED = PRED)
我拟合了我的模型并将 ACTUAL 和 PRED 值存储在 HAVE 中,这给出了一个包含实际值和模型预测值的数据框。
为了计算模型精度,我必须将 PRED 值转换为 0 和 1,我可以在不同的级别执行此操作,例如,如果 PRED < .1,那么 0 则为 1。然后我可以比较准确性。我想知道,如果我希望在一堆级别上转录准确性,我该如何进行此计算,比如说?CHECK = seq(0,1,.05)
例如,我可以手动执行此操作,但是如何找到功能和有效的方法来执行此操作?
HAVE$PRED05 = with(HAVE, ifelse(PRED < .05,0,1))
with(HAVE, table(ACTUAL,PRED05))
答:
1赞
MrFlick
11/17/2023
#1
你可以很容易地编写自己的函数。我们可以添加一些检查并像这样对其进行矢量化
evaluate <- Vectorize(function(data, cutoff) {
stopifnot(cutoff >= 0 & cutoff <= 1)
stopifnot(all(c('ACTUAL','PRED') %in% names(data)))
pred <- ifelse(data$PRED < cutoff, 0 , 1)
table(data$ACTUAL, pred, dnn=list("actual", paste0("pred (", cutoff, ")")))
}, "cutoff")
通过使用 Vectorize,我们可以一次传入多个检查值。例如
CHECK = seq(0,1,.05)
evaluate(HAVE, CHECK)
将返回所有表的列表。
有一些软件包可以帮助解决这个问题。例如,包。您可以比较差值截止值的精度。ROCR
library(ROCR)
pred <- with(HAVE, prediction(PRED, ACTUAL))
plot(performance(pred, "acc"))
评论