我制作了一个预测航班晚到的模型。我想在假阳性率为50%的情况下查看真正例率。我可以在绘制的ROC曲线中看到这一点。但我想精确计算这个值,而不仅仅是从图表中读取。有谁有想法吗?
library(modelr)library(dplyr)library(sparklyr)library(ggplot2)library(nycflights13)data(flights)RNGkind(sample.kind="Rounding")set.seed(42)flights <- mutate(flights, late_arrival = ifelse(arr_delay > 30, 1, 0))spark_install()sc <- spark_connect(master = "local")flights_tbl <- copy_to(sc, flights, "flights")flights_tbl <- flights_tbl %>% na.omit(flights_tbl)partition <- flights_tbl %>% select(late_arrival, carrier, dep_delay, month, year) %>% sdf_random_split(train = 0.75, test = 0.25)train_tbl <- partition$traintest_tbl <- partition$test########### my modelml_formula <- formula(late_arrival ~ carrier + dep_delay + month + year)ml_log <- ml_logistic_regression(train_tbl,ml_formula)ml_logpred_lr <- ml_predict(ml_log, test_tbl) %>% collectpred_lr$p1 <- unlist(pred_lr$probability)[ c(FALSE,TRUE) ]########## my ROC curve plotROC_lr <- get_roc(L = pred_lr$late_arrival, f = pred_lr$p1)ggplot(ROC_lr, aes(x = FPR, y = TPR)) + geom_line(aes(col = "my prediction")) + ggtitle("ROC curve of my prediction", "logistic regression to predict late arrivals based on carrier, departure delay, month, and year")
回答:
我不熟悉get_roc()
,但你可以打印ROC_lr
来获取一些附近的值:
print(ROC_lr)
但你可以尝试另一个包:pROC
包有一个名为coords()
的函数,可以在ROC曲线的某个点计算值:
library(pROC)# 仅为示例提供一些随机值labels <- c(0, 1, 0, 1, 0, 0, 0, 1, 0, 0)scores <- 1:10# 你可以使用pROC::roc()代替get_roc()roc <- roc(labels, scores)# 假设你想要FPR为0.5并计算TPRfpr <- 0.5# coords()需要特异性(1 - FPR)来计算敏感性(TPR)fpr50 <- coords(roc, 1 - fpr, input = "specificity")# 从结果中获取TPRtpr <- fpr50$sensitivitytpr#[1] 0.6666667