【问题标题】:How to save the forest created in R randomForest for future use如何保存在 R randomForest 中创建的森林以供将来使用
【发布时间】:2019-09-25 02:23:17
【问题描述】:

有没有办法在 R 中保存由 randomForest 创建的森林以供将来使用? 这是因为在生产环境中,人们会一遍又一遍地使用相同的模型(在本例中为森林)进行预测。

以下面的代码为例,如果testdata 现在不能用于预测,或者将来会有一组新的testdata 可用,那么再次运行randomForest() 将创建一个不同的森林(据我了解它)。

非常感谢任何评论。谢谢。

library(randomForest)
data<-data.frame(flag=c(0,1,0,1,0,1,0,0,0,0),
                 v1 = rnorm(10, 3, 1),
                 v2 = rnorm(10, 3, 1),
                 v3 = rnorm(10, 3, 1))

data$flag=as.factor(data$flag)

rf<-randomForest(flag ~ ., data=data)

pred(rf, testdata)  #testdata not yet available or a new set will be available in the future

【问题讨论】:

标签: r random-forest


【解决方案1】:

您可以使用 saveRDS 在 R 中保存对象,然后使用 readRDS 加载它们

saveRDS(rf, "mymodel.rds")
rf2 <- readRDS("mymodel.rds")

然后在一个新的会话中

library(randomForest)
data<-data.frame(flag=c(0,1,0,1,0,1,0,0,0,0),
                 v1 = rnorm(10, 3, 1),
                 v2 = rnorm(10, 3, 1),
                 v3 = rnorm(10, 3, 1))

data$flag=as.factor(data$flag)

rf <- readRDS('mymodel.rds')
predict(rf, data)

【讨论】:

  • 我试过了。它在同一个 R 会话中工作。但是,当我在新会话中运行时,我收到了 type of predictors in new data do not match that of the training data 的错误消息。我已经检查了很多次测试数据是相同的(即因子,int等)。我错过了什么吗?谢谢。
  • 不确定,您是否尝试传递完全相同的数据集?
  • 是的,我检查过了。他们是一样的。我首先使用测试数据生成预测并获得结果。然后我使用saveRDS 保存了森林,导出了测试数据并关闭了会话。在一个新会话中,我使用readRDS 恢复了森林并导入了测试数据。但是当我尝试使用恢复的森林生成预测时,它失败了。
  • 在新的 R 会话中尝试我上面添加的代码,这对我有用
  • 谢谢。根据您的输入,我发现了问题。测试数据或验证数据不能有因子变量。否则,它将在新会话中失败(但将在同一会话中工作)。我将所有内容都转换为整数/双精度数。它现在可以工作了。
猜你喜欢
  • 2016-01-03
  • 2017-12-25
  • 2016-11-11
  • 2014-06-14
  • 1970-01-01
  • 2019-11-11
  • 2019-04-15
  • 2017-09-11
  • 2015-02-20
相关资源
最近更新 更多