拟合随机森林模型和 return 指定数据结果的函数

A function to fit a random forest model and return the results of specified data

考虑以下数据框:

dat1 <- data.frame(Loc = rep(c("NY","MA","FL","GA"), each = 1000),
                   Region = rep(c("a","b","c","d"),each = 1000),
                   ID = rep(c(1:10), each=200),
                   var1 = rnorm(1000),
                   var2=rnorm(1000),
                   var3=rnorm(1000))

LocRegionID 的两个分组变量。假设我有其他几个数据框,如 dat1。我正在尝试编写一个自动将随机森林模型拟合到数据的函数。我想指定我希望它使用的数据框、分组变量和列。 我已经尝试了以下函数的变体,但是当我尝试 运行 它们

时,不断收到错误消息说 Error in get(dat, envir = .GlobalEnv) : invalid first argument
library(caret)
library(randomForest)
rand.f <- function(dat,groupvar,cols){
  model <- train(groupvar ~ paste0(cols,collapse = "+"), data = dat, method = "rf", trControl = trainControl("cv", number = 10), importance = T)
  c.e <- model$finalModel$confusion[, "class.error"]
  print(c.e)
}
rand.f(dat="dat1", groupvar = "Region", cols = 5:6)
  model$bestTune 
##################
rand.f <- function(dat,groupvar,cols){
  model <- train(get(dat, envir=.GlobalEnv)[,groupvar] ~ paste0(cols,collapse = "+"), data = dat, method = "rf", trControl = trainControl("cv", number = 10), importance = T)
  c.e <- model$finalModel$confusion[, "class.error"]
  print(c.e)
}
rand.f(dat="dat1", groupvar = "Region", cols = 5:6)
  model$bestTune 

我做错了什么?

以下应该有效:

rand.f <- function(dat,outcome){
  model <- train(x = dat[, cols, drop=F]
                 , y = dat[, outcome]
                 , method = "rf"
                 , trControl = trainControl("cv", number = 2)
                 , importance = T)

  c.e <- model$finalModel$confusion[, "class.error"]

  return(c.e)
}

这也适用于数字以及列名的向量,例如

cols <- colnames(dat1)[5:6]

请注意,我重命名了 'grouping' 变量,因为不太清楚在此上下文中分组变量应该是什么。我已将其重命名为可预测的结果,以突出其代表的含义。如果您确实尝试预测该区域,则可以忽略此评论。

如果您确实想为数据中的不同组触发此函数,即为不同的子集分离森林,那么您最好在此函数之外执行此操作。