减少随机森林模型内存大小

机器算法验证 r 回归 随机森林 模型评估
2022-03-27 13:31:32

我已经使用 R 中的随机森林对我的数据创建了一个回归模型。输出非常大,我想知道是否有任何方法可以将其减少到仅进行预测所需的部分?

训练数据集包含 20 个变量和约 45,000 行,这也很大。我的代码在下面列出。

data <- readRDS("data.Rds")

require("data.table")
require("doParallel")
require("randomForest")

train <- data[ which(set == "train")]
test <- data[ which(set == "test")]
rm(data)

x <- data.table(train[, 2:21, with=FALSE])
y <- as.vector(as.matrix(train[, 23, with=FALSE]))

cl <- makeCluster(detectCores())
registerDoParallel(cl, cores=4)
time <- system.time({rf.fit <- foreach(ntree=rep(500, 6),
                               .combine=combine,
                               .multicombine=TRUE,
                               .packages="randomForest") %dopar% 
                   {randomForest(x, y, ntree=ntree)}})
stopCluster(cl)

saveRDS(rf.fit, "rf.fit.Rds")

其输出约为 230 MB。一旦我有了模型,是否可以减小尺寸以使其更易于使用?我的目标是识别重要变量,并对新数据进行预测。

1个回答

我使用此功能将默认插入符号输出从 137 MB 减少到 3 MB。您仍然可以将此模型用于 $finalModel 的预测

## Clean Model to Save Memory

## http://stats.stackexchange.com/questions/102667/reduce-random-forest-model-memory-size
stripRF <- function(cm) {
  cm$finalModel$predicted <- NULL 
  cm$finalModel$oob.times <- NULL 
  cm$finalModel$y <- NULL
  cm$finalModel$votes <- NULL
  cm$control$indexOut <- NULL
  cm$control$index    <- NULL
  cm$trainingData <- NULL

  attr(cm$terms,".Environment") <- c()
  attr(cm$formula,".Environment") <- c()

  cm
}