我正在学习将mnist数字阅读器数据转换为predict的logistic-regression数字的课程。我使用的简化数据只有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
中,因子级别为2
和7
。由于第一级为2
,因此我们是否应该预测2
是否为p_hat_logistic > 0.5
?但这不起作用,因为它会导致准确性降低。
[我认为您通过glm()
在逻辑回归模型中误解了响应。根据glm()
的帮助页面:
对于二项式和准二项式家庭,也可以将响应指定为一个因素(当第一级表示失败而其他所有级别都表示成功时)
由于2在7之前出现,所以该模型在对数赔率范围内提供回归系数,正值增加了获得类别7的几率。
Ben的评论很重要:如果您要将其与0.5进行比较,则需要对概率尺度进行预测。另外,由于log(0.5 /(1-0.5))= 0
,您应该将预测(在对数几率标度上,即没有response
或response="link"
)与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