我有一些数据,包括使用分类和非分类观察对两种田鼠进行区分。
我从89个样本中建立了一个逻辑模型,用来预测其余199个样本的群体成员
我的数据示例
Group M1 M2 Fora Phone len height Rost
1 multiplex 2078 1649 1708 3868 5463 2355 805
2 subterraneus 1749 1482 1462 3797 4855 2218 765
3 unknown 1841 1562 1585 3750 5024 2232 821我将数据分成89个观察值来训练我的模型,并保留199个待预测的未知观察值
train.data = microtus[c(1:89),c(1:9)]
test.data = microtus[c(90:288),c(1:9)]
train.data$Group =ifelse(train.data$Group=="multiplex", 1, 0)我的模型
model <- glm(Group ~ M1Left + M3Left + Foramen + Length + Height,
family = binomial(), data = train.data)
summary(model)预测
pred <- predict(model, test.data, type = "response")我建立了一个混淆矩阵
createConfusionMatrix=function(actual, preds){
predClass=ifelse(preds<0.5, 0, 1)
table(actual,predClass)
}
## Confusion matrix
createConfusionMatrix(test.data$Group,pred)我的输出
predClass
actual 0 1
multiplex 0 0
subterraneus 0 0
unknown 70 129这个输出对我来说不对吗?
我能得到关于如何构建混淆矩阵的帮助吗?
发布于 2020-12-04 00:24:35
您的代码正在工作(使用您共享的数据):
#Code
i <- sample(1:3,288,replace = T)
#Data
microtus <- df[i,]
#Split
train.data = microtus[c(1:89),]
test.data = microtus[c(90:288),]
train.data$Group =ifelse(train.data$Group=="multiplex", 1, 0)
#Model
model <- glm(Group ~ M1 + M2 + Fora + len + height,
family = binomial(), data = train.data)
#Predict
test.data$pred <- predict(model, test.data, type = "response")
#Check
createConfusionMatrix=function(actual, preds){
predClass=ifelse(preds<0.5, 0, 1)
table(actual,predClass)
}
## Confusion matrix
createConfusionMatrix(test.data$Group,test.data$pred)输出:
predClass
actual 0 1
multiplex 0 75
subterraneus 57 0
unknown 67 0使用的一些数据:
#Data
df <- structure(list(Group = c("multiplex", "subterraneus", "unknown"
), M1 = c(2078L, 1749L, 1841L), M2 = c(1649L, 1482L, 1562L),
Fora = c(1708L, 1462L, 1585L), Phone = c(3868L, 3797L, 3750L
), len = c(5463L, 4855L, 5024L), height = c(2355L, 2218L,
2232L), Rost = c(805L, 765L, 821L)), class = "data.frame", row.names = c("1",
"2", "3"))也许可以开始一个新的会话,然后重试。
https://stackoverflow.com/questions/65124061
复制相似问题