You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

利用caret的lift绘制两种算法ROC曲线,实现同图分色与AUC标注

同图展示双ROC曲线并标注AUC的最简方法

这事儿其实挺简单的,核心就是把两个模型的ROC数据合并,用ggplot的颜色映射区分曲线,再加上AUC标注就行。我给你捋个最简流程,附代码示例:

1. 合并ROC曲线数据

不管你是从caret的lift工具里提取的曲线点,还是其他方式生成的,先把两个模型的**FPR(假阳性率)和TPR(真阳性率)**数据合并到一个数据框里,同时新增一列标记模型名称,方便ggplot识别分组:

# 假设你从lift工具得到的两个ROC数据框是roc_model1和roc_model2(均包含fpr、tpr列)
roc_combined <- rbind(
  cbind(roc_model1, model = "模型A"),
  cbind(roc_model2, model = "模型B")
)

2. 计算AUC值

用pROC包的auc()函数就能快速算出AUC,如果你已有测试集的真实标签和模型的预测概率,直接计算即可:

library(pROC)
# test_data为测试集,response是真实标签列,predict(...)获取模型的正类预测概率
auc_modelA <- auc(test_data$response, predict(modelA, test_data, type = "prob")[,2])
auc_modelB <- auc(test_data$response, predict(modelB, test_data, type = "prob")[,2])

3. 绘制双ROC曲线+AUC标注

这里提供两种标注AUC的方式,你可以按需选择:

方式一:AUC整合到图例(最简洁)

直接把AUC值加到模型名称后面,图例会自动展示,不用额外标注:

library(ggplot2)
# 给模型名称添加AUC后缀
roc_combined$model <- factor(roc_combined$model,
                             levels = c("模型A", "模型B"),
                             labels = c(paste0("模型A (AUC = ", round(auc_modelA, 3), ")"),
                                        paste0("模型B (AUC = ", round(auc_modelB, 3), ")")))

# 绘制曲线
ggplot(roc_combined, aes(x = fpr, y = tpr, color = model)) +
  geom_line(linewidth = 1) +  # 曲线加粗提升可读性
  geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "gray50") +  # 添加随机猜测基线
  labs(x = "假阳性率 (FPR)", y = "真阳性率 (TPR)", title = "两种算法的ROC曲线对比", color = "模型") +
  theme_minimal()

方式二:图内指定位置标注AUC(更灵活)

如果不想占用图例空间,可以把AUC文本放到图的角落或其他位置:

library(ggplot2)

ggplot(roc_combined, aes(x = fpr, y = tpr, color = model)) +
  geom_line(linewidth = 1) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "gray50") +
  labs(x = "假阳性率 (FPR)", y = "真阳性率 (TPR)", title = "两种算法的ROC曲线对比", color = "模型") +
  # 自定义标注位置,x/y值可根据你的曲线范围调整
  annotate("text", x = 0.7, y = 0.2, 
           label = paste0("模型A AUC = ", round(auc_modelA, 3)), color = "#F8766D") +
  annotate("text", x = 0.7, y = 0.15, 
           label = paste0("模型B AUC = ", round(auc_modelB, 3)), color = "#00BFC4") +
  theme_minimal()

补充:如果你的ROC数据来自caret的lift()对象,提取FPR和TPR的方式是lift_obj$x(对应FPR)和lift_obj$y(对应TPR),直接转成数据框即可使用。

内容的提问来源于stack exchange,提问作者Keshav M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:19:46