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]
而不是 formula
和 data
。
因此正确的语法是:
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
也有效。
我正在尝试使用随机森林构建时间序列模型。但是,每次我 运行 代码时,我都会犯同样的错误,即:
[.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]
而不是 formula
和 data
。
因此正确的语法是:
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
也有效。