如何从R中提取RandomForest以供生产使用?

9

我有一个成功的随机森林模型,我想将其集成到另一个软件中。我知道我可以使用一些库来实现(例如Java中的fastRF或其他语言中的ALGLIB's DecisionForest),但是该如何在其他语言中使用在R中训练好的"model"呢? 我需要在新语言中重新训练吗?

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

任何帮助都将不胜感激。

先感谢您。


回复较晚,但是这个电子邮件线程可能对您有所帮助。 - nalzok
2个回答

13

可以看一下 pmml 包,该包可生成各种模型(包括 RandomForest)的 PMML 。以下是一个基本示例:

#?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文件之后,我该如何执行它? - nanounanue
1
如果这个答案对您有帮助,欢迎点赞!;-) 关于您的问题,您需要验证是否可以在部署时使用的语言中导入pmml模型。 - Paolo
你说得对!这篇文章很有用,让我投票支持一下。你能推荐一些支持PMML的编程语言或软件吗?再次感谢你的帮助。 - nanounanue
不客气!如果没有人提供有效的解决方案,您可以选择此答案作为您问题的选定答案;-) - Paolo
我会将这个答案标记为正确的,让我尝试使用jpmml库来执行pmml,如果可以的话,这将是答案 :) - nanounanue
显示剩余3条评论

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,所以,如果我理解正确的话,你的建议是在新软件中重新训练随机森林,对吗? - nanounanue
我认为如果可以轻松地这样做,这将是最简单的方法。如果您能提供一些关于您想要使用的编程语言的详细信息,可能会有所帮助。但请注意下面Paolo的建议。 - rjad
我尝试用Java来实现它(最好),但C++也可以。再次感谢 :) - nanounanue
在上一篇帖子中,我犯了一个可怕的拼写错误(很抱歉,英语不是我的母语),我想说的是:我用ALGLIB完成了它,所以如果有人想要这个代码(非常简单),我可以分享给你们...再次感谢。 - nanounanue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接