Классификация ошибок логистической регрессии
У меня есть вопрос, связанный с оценкой прогноза модели логистической регрессии. Я новичок в этом, поэтому, пожалуйста, потерпите меня. Сначала я покажу, что я сделал с LDA, потому что я хочу иметь подобный "уровень ошибочной классификации", когда я закончу с моей логистической регрессией.
install.packages("ElemStatLearn")
library(ElemStatLearn)
# training data
train = vowel.train
# but we only need to preform everything on the first two classes
train.new = train[1:3]
# test data
test = vowel.test
test.new = test[1:3]
# normalizing the training data (0 mean and sd 1)
my_scale <- function(x) sweep(sweep(x, 2, colMeans(x)), 2, apply(x, 2, sd),
'/')
train.scaled = my_scale(train.new[,2:3])
train.scaled = cbind(y = train.new[,1], train.scaled)
test.scaled = my_scale(test[,2:11])
test.scaled = cbind(y = test[,1], test.scaled)
# LDA
library(MASS)
train.lda = lda(y~ ., data = train.scaled)
train.lda.values <- predict(train.lda, newdata=train.scaled)
train.lda.rate <- mean(train.lda.values$class != train.scaled[,1])
train.lda.rate
test.lda.values <- predict(train.lda, newdata=test.scaled)
test.lda.rate <- mean(test.lda.values$class != test.scaled[,1])
test.lda.rate
Это дает train.lda.rate = 0,5265152 и test.lda.rate = 0,461039.
Теперь я хочу, чтобы в принципе можно было извлечь такие же уровни ошибочной классификации из логистической регрессии, но я знаю, что после того, как я использую предикат () в моей модели логистической регрессии, не будет опции $class. Поэтому мне интересно, как найти предсказанные классы, чтобы я мог видеть, равны ли они исходным классам, и, следовательно, получить показатели классификации, как я делал выше.
Вот мой код для логистической регрессии:
train.scaled$y <- as.factor(train.scaled$y)
logit <- glm(y ~ ., data = train.scaled, family = "binomial")
pred.train.logit <- predict(logit, newdata=train.scaled, type = "response",
se = TRUE)
РЕДАКТИРОВАТЬ
После реализации решения, предоставленного в комментариях, я сделал следующее:
compare.train = data.frame(Actual=train.scaled$y,
Predicted_probability=predict(logit, type="response"),
Predicted = ifelse(predict(logit, type="response") > 0.5, 1, 0))
pred.train.logit.error <- mean(compare.train$Predicted != train$y)
pred.train.logit.error
Что дало мне ошибку ошибочной классификации 0,9715909. Это кажется немного высоким и заставляет меня думать, что я где-то ошибся. Мы ценим любые предложения!
ДРУГОЕ РЕДАКТИРОВАНИЕ
Я пошел дальше с предложением в комментариях и использовал полиномиальную логистическую регрессию, чтобы иметь дело с 11 классами.
library("nnet")
multi.logit.train <- multinom(y ~ ., data = train.new)
summary(multi.logit.train)
head(fitted(multi.logit.train))
predicted.train = predict(multi.logit.train, data=train.new, type="probs")
head(predicted.train)
Я здесь так близко, потому что голова (предиката) похожа на правильную структуру, я просто получаю ошибку атомного вектора - я думаю, что мне нужно изменить классы (1-11) на тип фактора, но я не положительны.
> str(predicted.train)
> num [1:528, 1:11] 6.06e-01 4.13e-01 8.41e-03 1.71e-05 1.80e-05 ...
> - attr(*, "dimnames")=List of 2
> ..$ : chr [1:528] "1" "2" "3" "4" ...
> ..$ : chr [1:11] "1" "2" "3" "4" ...