Случайные предсказания леса

#r #prediction #random-forest

#r #предсказание #случайный лес

Вопрос:

Я ищу некоторые рекомендации по домашнему заданию, над которым я работаю для класса. Нам предоставляется набор данных с 14 тыс. наблюдений, и нас просят построить модель прогнозирования. Я подразделяю набор данных на обучение и тестирование (4909 наблюдений), здесь я использую пакет каретки, который предсказывает последнюю переменную «classe». Я извлек почти нулевые переменные и построил модель, но когда я попытался сделать прогнозы, я получил только 97 прогнозов. Я просмотрел файлы справки, но все еще не могу понять, где я ошибаюсь. Любые подсказки будут оценены.

Вот код:

   set.seed(1234)
  pml.training <- read.csv("./data/pml-training.csv")
  #
  library(caret) 
  inTrain <- createDataPartition(y=pml.training$classe, p=0.75, list=FALSE)
  training <- pml.training[inTrain,]
  testing <- pml.training[-inTrain,]

  # Pull out the Near Zero Value (NZV)
  nzv <- nearZeroVar(training, saveMetrics=TRUE)
  omit <- which(nzv$nzv==TRUE)
  training <- training[,-omit]
  testing <- testing[,-omit]

  # Fit the model 
  modFit <- train(classe ~., method="rf", data=training)
  modFit
  print(modFit$finalModel)
  plot(modFit)

  # Try and predict on the testing model 
  pred <- predict(modFit, newdata=testing)
  testing$predRight <- pred==testing$classe
  print(table(pred, testing$classe))
  

Спасибо, Пэт С.

Ответ №1:

Вы проверили

 sum(complete.cases(subset(testing, select = -classe)))
  

?

Комментарии:

1. Да, это 97, поэтому функция прогнозирования прогнозирует только для полных классов, поэтому я должен вменять данные.

2. @ptcesq Нет. Алгоритм не может предсказать для тех случаев / наблюдений, для которых отсутствуют значения предиктора. Он предсказывает те случаи, когда доступны все значения предиктора (97 в данном случае). Если вы хотите предсказать остальное, вам нужно либо опустить те переменные в обучении, которые в основном отсутствуют в тестовом наборе, либо приписать недостающие значения в тестовом наборе.

3. Спасибо, я попробую rfImpute() .