使用R语言pROC包在已有P-R曲线上叠加另一条曲线的方法
P-R曲线叠加实现方案
lines()函数无法直接识别ROC对象对应的P-R维度坐标映射,只需对第二个模型的ROC对象同样调用coords()提取精确率、召回率数值,再传入lines()即可完成曲线叠加。
注意:绘制第一条P-R曲线时要手动将x、y轴范围设置为
[0,1],避免第二条曲线的坐标点超出首条曲线的轴范围被截断。
完整可运行代码
# 加载pROC包 library(pROC) # 读取示例数据、构建两个模型的ROC对象 m1 <- readRDS(url("https://www.dropbox.com/s/7nes3pjclnuv8dw/m1.rds?dl=1")) m2 <- readRDS(url("https://www.dropbox.com/s/condmtltovq0iqu/m2.rds?dl=1")) roc1 <- roc(m1$outcome, m1$probability) roc2 <- roc(m2$outcome, m2$probability) # 分别提取两个模型的P-R曲线坐标点 pr1 <- coords(roc1, "all", ret = c("precision", "recall")) pr2 <- coords(roc2, "all", ret = c("precision", "recall")) # 绘制第一条P-R曲线,固定坐标轴范围 plot(precision ~ recall, data = pr1, type = "l", xlim = c(0, 1), ylim = c(0, 1), main = "Precision-Recall Curves", xlab = "Recall", ylab = "Precision") # 叠加第二条P-R曲线,可通过线型、颜色区分不同模型 lines(precision ~ recall, data = pr2, type = "l", lty = 2, col = "grey35") # 可选:添加图例 legend("bottomleft", legend = c("Model 1", "Model 2"), lty = c(1, 2), col = c("black", "grey35"))
代码运行后即可生成包含两条P-R曲线的可视化结果,后续可按照R基础绘图的语法自定义配色、标注、网格等元素,和已实现的ROC叠加绘图逻辑完全一致。
内容的提问来源于stack exchange,提问作者Chris T.
相关产品推荐
相关产品推荐

