Random forest error: Error in `[.data.frame`(data, , all.vars(Terms), drop = FALSE) : undefined columns selected

Random forest error: Error in `[.data.frame`(data, , all.vars(Terms), drop = FALSE) : undefined columns selected

我正在尝试使用随机森林构建时间序列模型。但是,每次我 运行 代码时,我都会犯同样的错误,即:

[.data.frame(data, all.vars(Terms), drop = 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")

我希望有人能发现我的错误

谢谢,

公式应与data中的变量名称相对应。例如。 y ~ . 使用 data 中的所有其他变量预测 y。或者,您可以使用 y = df.ts[,1], x = df.ts[, -1] 而不是 formuladata

因此正确的语法是:

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

请注意,因变量应位于为训练模型而提供的数据集中,而不是写作 df.ts[ 1],正确的表示法是列名 "ts.t" 相关提供数据集的所有列,即从 2 到 6。 这是解决你的错误。 干杯!!

只需使用 caret::train(var~., Data) 而不是 train(Data$var~., data=Data) 就可以了。

对我来说,使用 classProbs = TRUE 而不是 classProbs = FALSE 也有效。