R语言ROCR包ROC曲线阈值设置方法及与ROSE包曲线差异问题
ROCR包阈值数量设置方法
ROCR包默认会使用所有唯一的预测概率作为阈值计算TPR、FPR,没有内置和ROSE包n.thresholds直接对应的参数,你可以手动提取计算结果后采样指定数量的阈值实现相同需求,示例代码如下:
library(ROCR) pred <- prediction(predicted, response) perf <- performance(pred, "tpr", "fpr") # 提取原始计算结果 all_thresholds <- perf@alpha.values[[1]] all_tpr <- perf@y.values[[1]] all_fpr <- perf@x.values[[1]] # 自定义采样100个阈值,可按需修改数量 n_thresholds <- 100 sample_idx <- seq(1, length(all_thresholds), length.out = n_thresholds) sampled_tpr <- all_tpr[sample_idx] sampled_fpr <- all_fpr[sample_idx] # 绘制采样后的ROC曲线,也可自定义着色逻辑实现原生colorize效果 plot(sampled_fpr, sampled_tpr, type = "l", xlab = "假正例率(FPR)", ylab = "真正例率(TPR)")
两个包ROC曲线看起来反转的原因
核心原因是两个包的默认坐标轴设置不同:
- ROCR中通过
performance(pred, "tpr", "fpr")生成的绘图对象,X轴为假正例率(FPR),取值范围01,Y轴为*真正例率(TPR)*,取值范围01,是行业内最常用的ROC曲线展示格式。 - ROSE的
roc.curve默认X轴为特异性(Specificity,即1-FPR),取值范围1~0,Y轴为真正例率(TPR),相当于把标准ROC曲线沿X轴中线翻转,所以视觉上会误以为TPR和FPR被反转。
如果调整坐标轴后结果仍不一致,可以检查两个包对正类标签的定义是否相同,手动指定统一的正类标签即可解决。
内容的提问来源于stack exchange,提问作者Blurryface
相关产品推荐
相关产品推荐

