为什么我的因子水平在逻辑回归中被逆转? (MNIST数据)

问题描述 投票:1回答:2

我正在学习将数字阅读器数据转换为数字的课程。我使用的简化数据只有2个结果,即2和7。但是在此过程中,似乎因子水平(2和7)却相反了?

到达我所在的位置:

library(dslabs)
data("mnist_27")

x_1和x_2是来自前两个预测变量(列)的值。现在适合logistic model

fit_glm <- glm(y~x_1 + x_2, data=mnist_27$train, family="binomial")
p_hat_logistic <- predict(fit_glm, newdata=mnist_27$test)
y_hat_logistic <- factor(ifelse(p_hat_logistic > 0.5, 7, 2))

在这里出现我的问题。在最后一行,如果p_hat_logistic > 0.5,函数为什么要预测7?在mnist_27$test$y中,因子级别为27。由于第一级为2,因此我们是否应该预测2是否为p_hat_logistic > 0.5?但这不起作用,因为它会导致准确性降低。

r machine-learning regression logistic-regression mnist
2个回答
1
投票

[我认为您通过glm()在逻辑回归模型中误解了响应。根据glm()的帮助页面:

对于二项式和准二项式家庭,也可以将响应指定为一个因素(当第一级表示失败而其他所有级别都表示成功时)

由于2在7之前出现,所以该模型在对数赔率范围内提供回归系数,正值增加了获得类别7的几率。

Ben的评论很重要:如果您要将其与0.5进行比较,则需要对概率尺度进行预测。另外,由于log(0.5 /(1-0.5))= 0

,您应该将预测(在对数几率标度上,即没有responseresponse="link")与0进行比较。

0
投票

它总是预测第二级,在您的情况下,您可以执行以下操作,并且结果对我来说是正确的:

p_hat_logistic <- predict(fit_glm, newdata=mnist_27$test,type="response")
y_hat_logistic <- factor(ifelse(p_hat_logistic > 0.5, 7, 2))

table(y_hat_logistic,mnist_27$test$y)

y_hat_logistic  2  7
             2 82 26
             7 24 68

caret::confusionMatrix(y_hat_logistic,mnist_27$test$y)
Confusion Matrix and Statistics

          Reference
Prediction  2  7
         2 82 26
         7 24 68

               Accuracy : 0.75           
                 95% CI : (0.684, 0.8084)
    No Information Rate : 0.53           
    P-Value [Acc > NIR] : 1.266e-10      

                  Kappa : 0.4976         

 Mcnemar's Test P-Value : 0.8875         

            Sensitivity : 0.7736         
            Specificity : 0.7234         
         Pos Pred Value : 0.7593         
         Neg Pred Value : 0.7391         
             Prevalence : 0.5300         
         Detection Rate : 0.4100         
   Detection Prevalence : 0.5400         
      Balanced Accuracy : 0.7485         

       'Positive' Class : 2    
© www.soinside.com 2019 - 2024. All rights reserved.