循环计算ROC与AUC 批量绘制多模型ROC曲线
多二分类模型的AUC计算与ROC曲线同图绘制
步骤1:批量计算各模型的AUC并存储ROC对象
把所有模型的路径整理成向量,通过循环批量加载模型、生成预测概率、计算ROC曲线与AUC,同时将每个模型的ROC对象存入列表,方便后续统一绘图。
library(pROC) library(keras) # 替换为你的所有模型文件路径 model_paths <- c("M1.h5", "M2.h5", "M3.h5") roc_list <- list() # 存储各模型的ROC对象 for (idx in seq_along(model_paths)) { # 加载模型 current_model <- load_model_hdf5(model_paths[idx]) # 生成测试集正类预测概率 pred_probs <- predict(current_model, test[, 1:10]) # 计算ROC曲线,quiet=TRUE避免重复输出计算日志 current_roc <- roc(response = test[, 11], predictor = pred_probs, quiet = TRUE) # 将ROC对象存入列表并以模型文件名命名 roc_list[[model_paths[idx]]] <- current_roc # 打印当前模型的AUC值(保留4位小数) cat("模型", model_paths[idx], "的AUC:", round(auc(current_roc), 4), "\n") }
步骤2:在同一张图中绘制所有ROC曲线
先初始化第一个模型的ROC曲线,再通过lines()依次添加其他模型的曲线,最后添加图例区分不同模型:
# 初始化绘图,绘制第一个模型的ROC曲线 plot(roc_list[[1]], main = "多二分类模型ROC曲线对比", col = "darkblue", lwd = 2, # 设置线条宽度 print.auc = TRUE # 可选:在图上直接显示AUC值 ) # 循环添加剩余模型的ROC曲线 for (idx in 2:length(roc_list)) { # 自定义不同曲线颜色,避免重叠 line_color <- c("darkred", "darkgreen", "orange")[idx-1] lines(roc_list[[idx]], col = line_color, lwd = 2, print.auc = TRUE, print.auc.y = 1 - 0.1*(idx-1) # 调整AUC值的垂直位置,防止重叠 ) } # 添加图例,位置可根据曲线分布调整(如bottomright) legend("topright", legend = names(roc_list), col = c("darkblue", "darkred", "darkgreen", "orange"), lwd = 2, bty = "n" # 可选:去掉图例边框,让图更简洁 )
关键细节说明
- 确保
test[,11]是二分类标签(可以是0/1数值型或因子型),predict()输出的必须是正类的预测概率,符合pROC::roc()的输入要求。 quiet=TRUE参数能避免循环中重复输出ROC计算的日志信息,让控制台输出更整洁。- 调整
col参数可以自定义各模型曲线的颜色,lwd控制线条粗细,提升图的可读性。 print.auc.y参数可以手动调整AUC值在图上的垂直位置,防止多个AUC值重叠。
内容的提问来源于stack exchange,提问作者user21573410
相关产品推荐
相关产品推荐

