#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