Проблемы с sparse.model.matrix - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь ввести данные, состоящие из 30 переменных, где 10 - факторные переменные. Я запускаю xgboost и пытаюсь использовать функцию sparse.model.matrix для горячего кодирования данных, но при этом появляется ошибка

"" "Ошибка в contrasts<- (*tmp*, value = contr.funs [1 + isOF [nn]]): контрасты могут применяться только к факторам с 2 или более уровнями "" "Можете ли вы дать мне знать, как преодолеть эту ошибку

trainm <- sparse.model.matrix(pol ~.-1, data = train)

1 Ответ

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

Ошибка связана с фактором только с одним уровнем. Пожалуйста, посмотрите этот пример, немного измененный по сравнению с sparse.model.matrix, который реализован в пакете Matrix:

library(Matrix)    
dd <- data.frame(a = gl(3,4), b = gl(4,1,12), c = gl(1,1, 12))
sparse.model.matrix(~ ., dd)

Это приводит к вашей ошибке, потому что c является фактором только с одним уровнем:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 

контрасты могут применяться только к факторам с 2 или более уровнями

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

sparse.model.matrix(~.,dd[,sapply(dd, nlevels) > 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...