Почему моя регрессионная модель логистики c не имеет коэффициента 2 уровня? (Ошибка: `data` и` reference` должны быть факторами с одинаковыми уровнями.) - PullRequest
0 голосов
/ 13 января 2020

Из прочтения похожих вопросов я знаю, что проблема в том, что yhat.logisticReg не имеет коэффициента 2 уровня, в то время как training.prepped$TARGET_FLAG. Я предполагаю, что проблема может быть решена путем изменения моей модели или прогноза, так что yhat.logisticReg является фактором 2 уровня. Как я могу это сделать?

logisticReg = glm(TARGET_FLAG ~ .,
                  data = training.prepped,
                  family = binomial())
yhat.logisticReg = predict(logisticReg, training.prepped, type = "response")
confusionMatrix(yhat.logisticReg, training.prepped$TARGET_FLAG)

Error: `data` and `reference` should be factors with the same levels.
str(training.prepped$TARGET_FLAG)
Factor w/ 2 levels "0","1": 1 1 1 1 1 2 1 2 2 1 ...

str(yhat.logisticReg)
 Named num [1:8161] 0.1656 0.2792 0.3717 0.0894 0.272 ...
 - attr(*, "names")= chr [1:8161] "1" "2" "3" "4" ...

Ответы [ 2 ]

1 голос
/ 13 января 2020

Может потребоваться сначала выбрать пороговое значение, а затем преобразовать действительные данные в двоичные значения, например,

a <- c(0.2, 0.7, 0.4)
threshold <- 0.5
binary_a <- factor(as.numeric(a>threshold))

str(binary_a)
Factor w/ 2 levels "0","1": 1 2 1
0 голосов
/ 13 января 2020

В каретке библиотеки есть метод confusionMatrix, в котором реализовано несколько метрик. Позвонив overall, вы можете получить точность. Если вам нужен другой показатель c, вы можете проверить, реализовали ли они его, и просто вызвать его.

library(caret)
acc = c()
for(value in yhat.logisticReg)
{
  predictions <- ifelse(yhat.logisticReg <= value, 0, 1)
  confusion_matrix = confusionMatrix(predictions, yhat.logisticReg)
  acc = c(acc,confusion_matrix$overall["Accuracy"])
}

best_acc = max(acc)
best_threshold  = yhat.logisticReg[which.max(acc)]
...