Почему уровни моего фактора поменялись местами в логистической регрессии c? (Данные MNIST) - PullRequest
1 голос
/ 14 марта 2020

Я прохожу курс, где использую di git данные считывателя для цифр с , Я использую упрощенные данные только с 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))

Вот здесь и возникает моя проблема. В последней строке, почему функция должна предсказывать 7, если p_hat_logistic > 0.5? В mnist_27$test$y уровни факторов равны 2 & 7. Так как первый уровень - 2, разве мы не должны предсказать 2, если p_hat_logistic > 0.5? Но это не работает, так как приводит к снижению точности.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Я думаю, что вы неправильно поняли ответ в логистической регрессионной модели c через glm(). Согласно странице справки для glm():

Для биномиальных и квазибиномиальных семейств ответ также может быть указан как фактор (когда первый уровень обозначает провал, а все остальные успехи)

Поскольку 2 предшествует 7, то модель предоставляет коэффициенты регрессии по шкале логарифмических коэффициентов, а положительные значения увеличивают шансы на получение категории 7.

Комментарий Бена важен, хотя: вам нужно иметь прогнозы на шкала вероятностей - вы хотите сравнить ее с 0,5. В качестве альтернативы вы должны сравнить прогнозы (по шкале логарифмов, т. Е. Без response или response="link") с 0, поскольку log (0,5 / (1-0,5)) = 0

0 голосов
/ 14 марта 2020

Это всегда предсказывает второй уровень, в вашем случае, вы можете сделать ниже, и результаты выглядят правильно для меня:

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    
...