tidymodels逻辑回归分类中.pred_class与ROC曲线绘制疑问
二分类ROC曲线绘制:.pred_1 vs .pred_0的问题解析
核心原因:阳性类别的匹配顺序错误
roc_curve() 函数默认会把因变量(outcome)的第一个因子水平当作阳性类别。如果你的outcome变量中,0是第一个水平(可通过levels(data_test_pred$outcome)查看顺序),那么:
- 传入
.pred_1时,函数会误将0当作阳性类别,你的预测概率(对应1的概率)和实际阳性类别完全反向,导致ROC曲线落在对角线下方——本质是模型的“真阳性率”与“假阳性率”被颠倒。 - 传入
.pred_0时,预测概率对应函数默认的阳性类别(0),匹配关系正确,曲线看起来正常,但这反映的是模型对0类别的预测性能,并非你关注的1类别的性能。
解决办法
两种直接修正方式任选其一即可:
- 调整因变量的因子水平顺序
将你关注的阳性类别(1)设为第一个水平:
# 转换为因子并重新指定参考水平 data_test_pred$outcome <- relevel(factor(data_test_pred$outcome), ref = "1") # 绘制正确的ROC曲线 roc1 <- roc_curve(data_test_pred, outcome, .pred_1)
- 在roc_curve中明确指定阳性类别
无需修改因子水平,直接通过positive参数指定阳性类别:
roc1 <- roc_curve(data_test_pred, outcome, .pred_1, positive = "1")
验证
修正后,用.pred_1生成的ROC曲线会回到对角线上方,此时计算的AUC值才是模型对阳性类别1的真实预测性能。比如之前用.pred_0得到的AUC为0.8,反向的.pred_1曲线AUC会是0.2,修正后就能得到正确的0.8。
内容的提问来源于stack exchange,提问作者inprogress123
相关产品推荐
相关产品推荐

