r - 如何使用 caret 包获得混淆矩阵?
问题描述
我试图分析由caret
confusionMatrix包提供的示例,即
lvs <- c("normal", "abnormal")
truth <- factor(rep(lvs, times = c(86, 258)),
levels = rev(lvs))
pred <- factor(
c(
rep(lvs, times = c(54, 32)),
rep(lvs, times = c(27, 231))),
levels = rev(lvs))
xtab <- table(pred, truth)
confusionMatrix(xtab)
但是可以肯定的是,我不太了解它。让我们以这个非常简单的模型为例:
set.seed(42)
x <- sample(0:1, 100, T)
y <- rnorm(100)
glm(x ~ y, family = binomial('logit'))
而且我不知道如何为这个 glm 模型类似地执行混淆矩阵。你明白它是怎么做到的吗?
编辑
我尝试运行评论中提供的示例:
train <- data.frame(LoanStatus_B = as.numeric(rnorm(100)>0.5), b= rnorm(100), c = rnorm(100), d = rnorm(100))
logitMod <- glm(LoanStatus_B ~ ., data=train, family=binomial(link="logit"))
library(caret)
# Use your model to make predictions, in this example newdata = training set, but replace with your test set
pdata <- predict(logitMod, newdata = train, type = "response")
confusionMatrix(data = as.numeric(pdata>0.5), reference = train$LoanStatus_B)
但我得到错误:数据and
参考`应该是具有相同水平的因素
我做错了什么吗?
解决方案
你只需要把它们变成因子:
confusionMatrix(data = as.factor(as.numeric(pdata>0.5)),
reference = as.factor(train$LoanStatus_B))
# Confusion Matrix and Statistics
#
# Reference
# Prediction 0 1
# 0 61 31
# 1 2 6
#
# Accuracy : 0.67
# 95% CI : (0.5688, 0.7608)
# No Information Rate : 0.63
# P-Value [Acc > NIR] : 0.2357
#
# Kappa : 0.1556
#
# Mcnemar's Test P-Value : 1.093e-06
#
# Sensitivity : 0.9683
# Specificity : 0.1622
# Pos Pred Value : 0.6630
# Neg Pred Value : 0.7500
# Prevalence : 0.6300
# Detection Rate : 0.6100
# Detection Prevalence : 0.9200
# Balanced Accuracy : 0.5652
#
# 'Positive' Class : 0
推荐阅读
- python - Django:返回由外键分组的最大值的id
- angular - 在关闭它以在 Angular 中显示网络状态后再次显示小吃栏
- go - 无论如何验证Golang中第一个结构的嵌套结构项的字段?
- sql - 尝试旋转包含 case 语句的表
- javascript - 逐块上传大型视频文件(如 2gb)并添加这些块以使用 javascript ajax 和 django 获取原始文件,无需任何 api 调用
- python - Dash - 如何在不点击按钮的情况下回调自动刷新?
- php - 不显示验证
- python - 将字典键解包到带星号的列表中
- python - 当用户输入与列表中的一位匹配时,打印一些内容,如果不匹配则打印其他内容
- python - 在python for循环中设置变量/字典键以在熊猫中加载多个数据帧