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

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

model_rf = train(Promoted ~ Department + Region+ Education+Gender+ RecruitmentChannel+TrainingNumber+Age+LengthOfService +EmployeePerformance+AvgTrainingPerformance, data=train, method='rf', tuneLength=5, trControl = fitControl)
model_rf
predicteds_rf <- predict(model_rf, newdata=test)

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

> str(trainData)
'data.frame':   54808 obs. of  12 variables:
 $ EmployeeID            : int  65438 65141 7513 2542 48945 58896 20379 16290 73202 28911 ...
 $ Department            : Factor w/ 9 levels "Analytics","Finance",..: 8 5 8 8 9 1 5 5 1 8 ...
 $ Region                : Factor w/ 34 levels "region_1","region_10",..: 32 15 11 16 19 12 13 28 13 1 ...
 $ Education             : Factor w/ 4 levels "","Bachelor's",..: 4 2 2 2 2 2 2 4 2 4 ...
 $ Gender                : Factor w/ 2 levels "f","m": 1 2 2 2 2 2 1 2 2 2 ...
 $ RecruitmentChannel    : Factor w/ 3 levels "other","referred",..: 3 1 3 1 1 3 1 3 1 3 ...
 $ TrainingNumber        : Factor w/ 5 levels "Average training",..: 5 5 5 3 5 3 5 5 5 5 ...
 $ Age                   : Factor w/ 3 levels "Middle Age","Old",..: 1 3 1 1 1 1 1 1 3 1 ...
 $ LengthOfService       : Factor w/ 6 levels "Junior","Mid Level",..: 6 2 6 6 1 6 2 2 2 2 ...
 $ EmployeePerformance   : Factor w/ 7 levels "Average Performer",..: 4 3 5 7 5 5 5 5 3 4 ...
 $ AvgTrainingPerformance: Factor w/ 6 levels "Average","Below Average",..: 5 1 2 2 4 6 2 1 6 2 ...
 $ Promoted              : Factor w/ 2 levels "Not Promoted",..: 1 1 1 1 1 1 1 1 1 1 ...

Было бы очень полезно, если бы кто-то мог дать мне какое-то предложение. Большое спасибо.

1 Ответ

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

Допустимые имена для уровней факторов должны не

  1. содержать пробелы
  2. начинаться с цифры
  3. быть пустой строкой

Как видите, ваш фрейм данных содержит все три.

Эти требования существуют, потому что всякий раз, когда caret :: train () запускает древовидную модель (здесь случайные леса), она преобразует коэффициентуровни на переменные, которые используются для разделения дерева.Следовательно, метки уровня фактора становятся именами переменных.

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

trainData %>% 
  mutate(Education = factor(Education, 
          labels = make.names(levels(Education))))

Вместо labels = выможет сделать levels = - последний изменяет данные, тогда как первый изменяет отображение (например, печатью (датафрейм)).

...