首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑模型的混淆矩阵

逻辑模型的混淆矩阵
EN

Stack Overflow用户
提问于 2020-12-03 18:23:06
回答 1查看 56关注 0票数 0

我有一些数据,包括使用分类和非分类观察对两种田鼠进行区分。

我从89个样本中建立了一个逻辑模型,用来预测其余199个样本的群体成员

我的数据示例

代码语言:javascript
复制
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个待预测的未知观察值

代码语言:javascript
复制
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)

我的模型

代码语言:javascript
复制
model <- glm(Group ~ M1Left + M3Left + Foramen + Length + Height, 
    family = binomial(), data = train.data)
summary(model)

预测

代码语言:javascript
复制
pred <- predict(model, test.data, type = "response")

我建立了一个混淆矩阵

代码语言:javascript
复制
createConfusionMatrix=function(actual, preds){
  predClass=ifelse(preds<0.5, 0, 1)

  table(actual,predClass)
}
## Confusion matrix 
createConfusionMatrix(test.data$Group,pred)

我的输出

代码语言:javascript
复制
              predClass
actual           0   1
  multiplex      0   0
  subterraneus   0   0
  unknown       70 129

这个输出对我来说不对吗?

我能得到关于如何构建混淆矩阵的帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2020-12-04 00:24:35

您的代码正在工作(使用您共享的数据):

代码语言:javascript
复制
#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)

输出:

代码语言:javascript
复制
              predClass
actual          0  1
  multiplex     0 75
  subterraneus 57  0
  unknown      67  0

使用的一些数据:

代码语言:javascript
复制
#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"))

也许可以开始一个新的会话,然后重试。

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

https://stackoverflow.com/questions/65124061

复制
相关文章

相似问题

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