首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中使用ROC曲线找出我的加权二元logistic回归(glm)的最佳分界值

在R中使用ROC曲线找出我的加权二元logistic回归(glm)的最佳分界值
EN

Stack Overflow用户
提问于 2020-03-22 21:36:18
回答 1查看 683关注 0票数 1

我已经在Rstudio中建立了一个用于流失预测的二进制逻辑回归。由于此模型使用的数据不平衡,因此我还包括了权重。然后,我试图通过尝试和错误来找到最佳截止点,但是为了完成我的研究,我必须结合ROC曲线来找到最佳截止点。下面我提供了用于构建模型的脚本(fit2)。权重存储在“W”中。这表明,错误识别流失的成本是错误识别非流失的成本的14倍。

代码语言:javascript
运行
复制
#CH1 logistic regression

library(caret)
W = 14
lvl = levels(trainingset$CH1)
print(lvl)
#if positive we give it the defined weight, otherwise set it to 1
fit_wts = ifelse(trainingset$CH1==lvl[2],W,1)
fit2 = glm(CH1 ~ RET + ORD + LVB + REVA + OPEN + REV2KF + CAL + PSIZEF + COM_P_C + PEN + SHOP, data = trainingset, weight=fit_wts, family=binomial(link='logit'))
# we test it on the test set
predlog1 = ifelse(predict(fit2,testset,type="response")>0.5,lvl[2],lvl[1])
predlog1 = factor(predlog1,levels=lvl)
predlog1
confusionMatrix(pred,testset$CH1,positive=lvl[2])

对于这项研究,我还使用pROC包构建了决策树的ROC曲线。然而,当然,相同的脚本对逻辑回归并不是相同的。我已经使用下面的脚本创建了逻辑回归的ROC曲线。

代码语言:javascript
运行
复制
prob=predict(fit2, testset, type=c("response"))
testset$prob=prob
library(pROC)
g <- roc(CH1 ~ prob, data = testset, )
g
plot(g)

这导致了下面的ROC曲线。

如何获得ROC曲线的最佳截止值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 16:09:28

获得“最佳”截止值完全独立于模型的类型,因此您可以像使用pROC的任何其他类型的模型一样获得它。使用coords函数:

代码语言:javascript
运行
复制
 coords(g, "best", transpose = FALSE)

或者直接在绘图上:

代码语言:javascript
运行
复制
plot(g, print.thres=TRUE)

现在,上述方法简单地最大化了敏感性和特异性的总和。这通常太简单了,您可能需要一个适合您的用例的“最佳”的清晰定义。这在很大程度上超出了这个问题的范围,但是作为一个起点,您应该看看Best Thresholds section of the documentation of the coords function中的一些基本选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60799990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档