Ошибка пакета каретки R - по крайней мере один из уровней класса не является допустимым именем переменной R - PullRequest
0 голосов
/ 25 июня 2018

Я получаю следующую ошибку в R при укладке с использованием пакета Caret.

"Ошибка: по крайней мере один из уровней классов не является допустимым именем переменной R; это приведет к ошибкам при генерировании вероятностей классов, поскольку имена переменных будут преобразованы в not5, X5sets. Пожалуйста, используйте уровни факторов, которые можно использовать как допустимые имена переменных R (см.? make.names для справки). "

Ниже приведен код, который я пытаюсь запустить.

library(caretEnsemble)
control <- trainControl(method="repeatedcv", number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)
algorithmList <- c('rpart', 'knn', 'svmRadial')
set.seed(222)
models <- caretList(Tsets ~ MatchSurface + MatchRound + AgeDiff + SameHand + HeightDiff, data=up_sample, trControl=control, methodList=algorithmList)
results <- resamples(models)

Когда я удаляю classProbs=TRUE, код запускается, но я хочу сохранить это, так как есть дополнительный код, который я пытаюсь запустить после этого, который требует этого. Все мои переменные являются факторами или целыми числами, и я изменил все классы, чтобы у них не было «0» и «1». Поэтому я не могу понять, почему код не запускается.

Я приложил изображение структуры данных ниже. Было бы здорово, если бы у кого-нибудь был совет.

Спасибо, Aisling

Data Structure

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Когда caretList () запускает древовидную модель (здесь rpart, но также применяется к случайным лесам), она преобразует уровни факторов в переменные, которые используются для разбиения дерева.Для этих переменных имена, начинающиеся с цифры, не допускаются и не содержат пробелов.Таким образом, для каждой из этих переменных вы можете преобразовать имена уровней в допустимые метки с помощью следующего кода.

up_sample %>% 
  mutate(Tsets = factor(Tsets, 
                        labels = make.names(levels(Tsets))))
0 голосов
/ 28 марта 2019

Попробуйте изменить целевую переменную на «да» / «нет» вместо 1 / 0.

...