【问题标题】:How I can extract the RandomForest from R for use in production?如何从 R 中提取 RandomForest 以用于生产?
【发布时间】:2012-04-03 00:20:29
【问题描述】:

我有一个成功的随机森林模型,我想将它集成到另一个软件中,我知道我可以使用一些库(如 Java 中的 fastRF 或其他语言的 ALGLIB 的 DecisionForest)但是我如何使用经过训练的“模型”在 R?我必须用新语言重新训练它吗?

另一种观点是以某种方式提取它,但我不知道该怎么做......

任何帮助将不胜感激

提前致谢

【问题讨论】:

标签: java r random-forest alglib


【解决方案1】:

看看pmml 包,它为各种模型生成PMML,包括RandomForest。一个基本的例子:

#?randomForest
library(randomForest)
library(pmml)
set.seed(131)
ozone.rf <- randomForest(Ozone ~ ., data=airquality, mtry=3,importance=TRUE, na.action=na.omit)
print(ozone.rf)
ozone.rf.pmml <- pmml(ozone.rf)

【讨论】:

  • 感谢您的回答@Paolo,但是,在我拥有 PMML 文件之后,我该如何执行它?
  • 如果答案对您有用,我们将不胜感激! ;-) 关于您的问题,您需要验证是否可以以您将用于部署的语言导入 pmml 模型。
  • 你是对的!这个帖子很有用,让我投票。你能推荐我一些支持 PMML 的语言或软件吗?再次感谢您的帮助。
  • 您好@Paolo,我尝试解决(PMML)并且使用您的示例(臭氧数据集)或虹膜数据集一切正常。但是,我正在阅读 Cran (cran.r-project.org/web/packages/pmml/index.html) 中 pmml 库的文档,它没有说明任何关于 randomForest 支持的内容,只涉及决策树(它们是 randomFoest 的一部分——森林的树) ,所以,假设 pmml 库正在发挥作用是安全的吗?(再次)感谢您的时间
  • 我的建议是联系作者(您可以使用 packageDescription("pmml") 查看联系方式)并询问更多详细信息。另一种可能性是通过stats.stackexchange.com 询问这些人。祝你好运!
【解决方案2】:

randomForest 对象包含对象中每棵树的所有信息。每棵树都不是特别复杂,尽管它可能会令人困惑。

iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE,
                         proximity=TRUE)
> names(iris.rf$forest)
  [1] "ndbigtree"  "nodestatus" "bestvar"    "treemap"    "nodepred"  
  [6] "xbestsplit" "pid"        "cutoff"     "ncat"       "maxcat"    
  [11] "nrnodes"    "ntree"      "nclass"     "xlevels"   

要了解如何在 R 之外使用森林,您必须查看源代码。下载randomForest的源码包,解压tar.gz,查看src目录。在 rf.c 中,您将看到函数 classForest(对于回归,请查看 regrf.c 中的 regForest)。查看 R 函数 predict.randomForest 以了解其调用方式。您可能必须使用 getAnywhere("predict.randomForest") 在 R 中查看它。

提取 R 信息并在另一个包中进行预测需要花很多功夫,因此在实际执行此操作之前必须仔细考虑。重新安装您打算使用的软件可能更简单。

【讨论】:

  • 感谢@rjad 的回答,所以,如果我理解正确,您的建议是在新软件中重新训练随机森林,对吧?
  • 我认为如果这样做很简单,这将是最简单的方法。如果您提供一些有关您想使用哪种语言的详细信息可能会有所帮助。但请参阅下面 Paolo 的建议。
  • 我尝试(最好)在 Java 中实现它,但在 C++ 中也可以。再次感谢:)
  • 我在上一篇文章中有一个严重的拼写错误(对不起,英语不是我的主要语言),我想说的是:我是在 ALGLIB 中制作的,所以如果有人想要代码(一个非常简单的,真的)我可以分享它......再次感谢
猜你喜欢
  • 1970-01-01
  • 2012-12-18
  • 2012-03-04
  • 1970-01-01
  • 2016-12-12
  • 2018-06-02
  • 2013-12-13
  • 2017-10-21
  • 2014-11-01
相关资源
最近更新 更多