2016-12-17 8 views
1

Я пытаюсь построить модель временного ряда, используя случайный лес. Тем не менее, я получаю ту же ошибку, каждый раз, когда я запускаю код, который:Случайная ошибка леса: ошибка в `.data.frame` (данные,, all.vars (термины), drop = FALSE): выбраны неопределенные столбцы

Ошибка в [.data.frame (данные,, all.vars (Условия), падение = FALSE): неопределенных столбцов выбран

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

Вот мой код:

library(randomForest) 
library(caret) 

fitControl <- trainControl(
    method = "repeatedcv", 
    number = 10, 
    repeats = 1, 
    classProbs = FALSE, 
    verboseIter = TRUE, 
    preProcOptions=list(thresh=0.95,na.remove=TRUE,verbose=TRUE)) 

set.seed(1234) 

rf_grid <- expand.grid(mtry = c(1:6)) 

fit <- train(df.ts[,1]~., 
     data=df.ts[,2:6], 
     method="rf", 
     preProcess=c("center","scale"), 
     tuneGrid = rf_grid, 
     trControl=fitControl, 
     ntree = 200, 
     metric="RMSE") 

Для воспроизводимым Например, вы можете запустить код на следующий набор данных:

df.ts <- structure(list(ts.t = c(315246, 219908, 193014, 231970, 248246, 
+ 247112, 268218, 263637, 264306, 245730, 256548, 227525, 304468, 
+ 229614, 202985), ts1 = c(233913, 315246, 219908, 193014, 231970, 
+ 248246, 247112, 268218, 263637, 264306, 245730, 256548, 227525, 
+ 304468, 229614), ts2 = c(253534, 233913, 315246, 219908, 193014, 
+ 231970, 248246, 247112, 268218, 263637, 264306, 245730, 256548, 
+ 227525, 304468), ts3 = c(226650, 253534, 233913, 315246, 219908, 
+ 193014, 231970, 248246, 247112, 268218, 263637, 264306, 245730, 
+ 256548, 227525), ts6 = c(213268, 242558, 250554, 226650, 253534, 
+ 233913, 315246, 219908, 193014, 231970, 248246, 247112, 268218, 
+ 263637, 264306), ts12 = c(333842, 210279, 193051, 174262, 216712, 
+ 144327, 213268, 242558, 250554, 226650, 253534, 233913, 315246, 
+ 219908, 193014)), .Names = c("ts.t", "ts1", "ts2", "ts3", "ts6", "ts12"), row.names = 13:27, class = "data.frame") 

Я надеюсь, что кто-то может обнаружить свою ошибку (ы)

Спасибо,

ответ

2

Формула должна соответствовать именам переменных в data. Например. y ~ . прогнозирует y, используя все остальные переменные в data. В качестве альтернативы вы можете использовать y = df.ts[,1], x = df.ts[, -1] вместо formula и data.

Таким образом, правильный синтаксис будет:

fit <- train(ts.t ~ ., 
      data=df.ts, 
      method="rf", 
      preProcess=c("center","scale"), 
      tuneGrid = rf_grid, 
      trControl=fitControl, 
      ntree = 200, 
      metric="RMSE") 

 Смежные вопросы

  • Нет связанных вопросов^_^