Ошибка логистической регрессии: новые уровни в категориальном столбце тестовых данных

Когда я пытался предсказать, используя модель логистической регрессии в R, у меня возникла следующая ошибка:

Ошибка

Ошибка:

pred ‹- предсказать (модель, newdata = test)
Ошибка в model.frame.default (Термины, newdata, na.action = na.action, xlev = object $ xlevels): фактор admission_type_id имеет новые уровни 8

Насколько я понимаю, тестовые данные столбца admission_type_id имеют новые уровни сравниваемых данных обучения. Я попытался посмотреть на уникальные значения и увидел, что данные Train содержат все значения данных Test.

уникальный (поезд $ admission_type_id)
1 1 3 2 6 5 8 4 < br> Уровни: 1 2 3 4 5 6 7 8

уникальный (test $ admission_type_id)
1 6 1 2 3 5 8
Уровни: 1 2 3 4 5 6 7 8

Было бы очень полезно, если бы кто-нибудь помог мне разобраться в проблеме. Спасибо.


person Hitin    schedule 09.06.2018    source источник


Ответы (1)


Проблема в том, что у вас разные уровни факторов для одного / многих предикторов:

Например, я использую данные mtcars. Он также должен присутствовать в вашем сеансе. (Прочтите мои комментарии между кодами)

mtcars_train <- mtcars[mtcars$cyl %in% c(4,6),] #Consider this as train data
mtcars_train$cyl <- as.factor(mtcars_train$cyl) #Changing cyl to factor, here cyl values are 4 and 6 only, notice there is no 8

mtcars_orig <- mtcars #Taking the entire data which contain cyl values as 4,6 and 8
mtcars_orig$cyl <- as.factor(mtcars_orig$cyl) #Converting to factors, here again we can see that levels(mtcars_orign$cyl) is 4,6 and 8

lm1 <- lm(am ~ mpg + cyl + hp , data=mtcars_train) # Building the model
predict(lm1, newdata=mtcars_orig) #Now if you try to predict you will receive the error of having missing classes

lm1$xlevels[["cyl"]] <- union(lm1$xlevels[["cyl"]], levels(mtcars_orig$cyl)) #You can fix this here by running this code, it will append the levels to your original lm1 model here

После выполнения последнего шага, если вы запустите прогноз, вы получите свой результат.

predict(lm1, newdata=mtcars_orig)

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

person PKumar    schedule 09.06.2018
comment
Спасибо за ответ, дружище. Когда я использую unique (), я вижу одинаковые уровни как в обучении, так и в тесте. Так почему возникает эта проблема? Заранее спасибо. - person Hitin; 09.06.2018
comment
@Hitin, пожалуйста, вставьте образец обоих данных, используя dput(head(dataframe,20)) в своем вопросе, трудно определить причины, не просматривая свои данные. - person PKumar; 09.06.2018
comment
@Hitin, я вижу несоответствие, вам не хватает 7 из тренировки и 4 из теста. Кажется, вы создали факторы перед разделением (следовательно, вы можете видеть уровни, даже если у вас нет фактических значений, факторы в этом случае забавны, если вы не перекодируете их, старый уровень существует), что неплохо idea, но похоже, что вы взяли плохой образец, или записей в этих классах / сегментах очень мало. - person PKumar; 09.06.2018