使用R语言pROC包获取ROC曲线最佳阈值出现负值问题求助
R语言pROC包提取ROC曲线最佳阈值为负值的解决方法
问题成因
- 逻辑回归
predict()函数默认返回结果为对数几率(log-odds),而非大众认知中0-1区间的概率值。对数几率本身取值范围为(-∞, +∞),因此得到负阈值属于正常计算结果,并非程序运行错误。 coords()函数参数配置错误:你传入了input="threshold"参数,该参数的作用是告知函数第二个输入值的类型为阈值,但你实际传入的是"best"关键字,二者不匹配可能导致返回结果不符合预期。
修复方案
- 调整预测值输出为概率格式
修改predict调用代码,增加type="response"参数,让输出结果落在0-1的概率区间,后续得到的阈值也会对应落在0-1区间:
pre <- predict(QualityLog, qualityTrain, type = "response")
- 修正
coords函数参数
移除错误的input参数,正确的最佳阈值提取写法如下:
coord <- coords(modelroc, x = "best", ret = "threshold")
如果需要同时提取该阈值对应的灵敏度、特异度指标,可以修改ret参数配置:
coord <- coords(modelroc, x = "best", ret = c("threshold", "sensitivity", "specificity"))
- 特殊场景说明
如果你业务场景中确实需要使用对数几率作为预测值,负阈值属于完全合理的结果,只要模型AUC、分类效果符合预期就可以正常使用,无需额外调整。
内容的提问来源于stack exchange,提问作者Nemo13
相关产品推荐
相关产品推荐

