使用插入符号包是否有可能获得特定阈值的混淆矩阵?


13

我已经获得了train二进制响应的逻辑回归模型(通过),并且已经通过confusionMatrixin 获得了逻辑混淆矩阵caret。它给了我逻辑模型混淆矩阵,尽管我不确定要使用什么阈值来获取它。如何使用confusionMatrixin 获得特定阈值的混淆矩阵caret


我没有答案,但是通常在帮助文件中会回答类似这样的问题。如果失败,则可以查看源代码本身。您可以通过键入confusionmatrix不带括号的方式将源打印到控制台。
shadowtalker 2014年

目前还不清楚您到底做了什么。您是否glmstats包中调用了函数并将其结果传递给confusionMatrix?我不知道有人可以做到这一点,而阅读手册并不清楚一个人可以做到。还是你predict有事吗?一个简短的例子会有所帮助。
2014年

1
@Calimo我已使用该train函数caret来拟合模型,这使我可以将其指定为二项式族的glm。然后,我predict对通过生成的对象使用了该函数train
黑色牛奶

Answers:


11

R中的大多数分类模型都会产生类别预测和每个类别的概率。对于二进制数据,几乎在每种情况下,类别预测都是基于50%的概率临界值。

glm是一样的 与一起使用caret,可以predict(object, newdata)为您提供预测的类别,predict(object, new data, type = "prob")并为您提供特定于类别的概率(当object由生成时train)。

您可以通过定义自己的模型并应用所需的截止值来做不同的事情。该caret 网站还有一个示例,该示例使用重采样来优化概率截止。

tl; dr

confusionMatrix 使用预测的类别,因此有50%的概率截止

最高


14

假设有一个很简单的方法tune <- train(...)

probsTest <- predict(tune, test, type = "prob")
threshold <- 0.5
pred      <- factor( ifelse(probsTest[, "yes"] > threshold, "yes", "no") )
pred      <- relevel(pred, "yes")   # you may or may not need this; I did
confusionMatrix(pred, test$response)

显然,您可以将阈值设置为想要尝试的阈值,或者选择“最佳”阈值,其中最佳意味着最高的组合特异性和敏感性:

library(pROC)
probsTrain <- predict(tune, train, type = "prob")
rocCurve   <- roc(response = train$response,
                      predictor = probsTrain[, "yes"],
                      levels = rev(levels(train$response)))
plot(rocCurve, print.thres = "best")

在查看Max发布的示例之后,我不确定是否存在一些统计上的细微差别,从而使我的方法不太理想。


在输出的rocCurve图中,这三个值是什么意思?例如,根据我的数据,它表示0.289(0.853,0.831)。0.289是否表示在划定二进制结果时应使用的最佳阈值?即,每个具有预测概率> 0.289的情况将被编码为“ 1”,而每个具有预测概率<0.289的情况将被编码为“ 0”,而不是caret包装的0.5默认阈值?
coip

2
是的,这是完全正确的,并且括号中的其他两个值是敏感性和特异性(不过,老实说,我忘记了是哪个)
efh0888 '18

2
另外,从那时起,我发现您可以从roc曲线中提取出来,使用rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]该曲线,您还可以根据需要灵活地对它们进行加权。...最后要注意的一点是,实际上,您可能希望调整阈值(例如您可以使用任何模型超参数),如Max 在此处所述。
efh0888 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.