Переменная динамического отклика для случайного леса

#r #machine-learning #shiny #random-forest

#r #машинное обучение #блестящий #случайный лес

Вопрос:

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

У меня возникают проблемы с randomforest() функцией, особенно когда я пытаюсь указать переменную ответа в качестве первого столбца набора данных. Для приведенного ниже примера я использую набор данных iris и переместил переменную отклика, Species, в первый столбец.

Это была моя попытка:

 model <- randomForest(names(DATA[1]) ~ ., data = DATA, ntree = 500, mtry = 3, importance = TRUE)
 

Однако это не работает.
Ошибка, которую я получаю,:

Ошибка: переменные длины отличаются (найдено для «Видов»)

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

 model <- randomForest(Species ~ ., data = DATA, ntree = 500, mtry = 3, importance = TRUE)
 

Я пытался использовать paste() функцию, чтобы сотворить какое-то волшебство, но мне это не удалось.

Как я должен написать код, чтобы заставить его работать?

Ответ №1:

Похоже, вы хотите построить формулу из строки. Вы можете использовать eval и parse для этого. Что-то вроде этого должно работать:

 model <- randomForest(eval(parse(text = paste(names(DATA)[1], "~ ."))), 
                      data = DATA, ntree = 500, mtry = 3, importance = TRUE)
 

Пример использования исходного набора данных iris:

 model <- randomForest(eval(parse(text = paste(names(iris)[5], "~ ."))), 
                      data = iris, ntree = 500, mtry = 3, importance = TRUE)

model

Call:
 randomForest(formula = eval(parse(text = paste(names(iris)[5],      "~ ."))), data = iris, 
              ntree = 500, mtry = 3, importance = TRUE) 
           Type of random forest: classification
                 Number of trees: 500
No. of variables tried at each split: 3

        OOB estimate of  error rate: 4%
Confusion matrix:
           setosa versicolor virginica class.error
setosa         50          0         0        0.00
versicolor      0         47         3        0.06
virginica       0          3        47        0.06