如何导出R随机森林模型以便在没有API调用的情况下在Excel VBA中使用

时间:2017-09-30 14:38:52

标签: r excel-vba machine-learning random-forest pmml

问题:

我有一个在R中训练过的随机森林模型。我需要在一个独立的Excel工具中部署这个模型,该工具将被350个销售网络中的人用来根据用户输入电子表格的数据执行实时预测

我该怎么做?

约束:

  • 要求用户在本地计算机上安装R不是一种选择。

  • 让服务器(物理或云)提供评分API不是一种选择。

到目前为止我做了什么?

1。 PMML

我可以用PMML(XML结构)导出模型。从研究中我可以看到有用于在Python和Java中加载和执行PMML输入的库。但是我没有在VBA / VB中找到任何实现。

2。 Zementis

我研究了一个名为Zementis的解决方案,该解决方案提供了一个Excel插件来部署PMML模型。但是根据我的理解,这需要对实际模型执行发生的云服务器(例如AWS)进行Web服务调用。我的IT安全部门不允许这样做。

3。其他

最常见的建议似乎是调用R来加载模型并运行预测函数。如上所述,这不是一个可行的选择。

详细背景:

随机森林模型在R中训练,c。 30个变量。该模型用于推荐产品的“个性化”价格,作为销售流程的一部分。

该模型需要分发到销售网络,约有350名用户。业务的偏好是将模型集成到销售团队当前用来计算交易盈利能力的现有电子表格工具中。

这意味着我需要能够以可在Excel VBA中实现的方式导出模型。

考虑到时间尺度,实施需要是自包含的,没有IT基础设施或额外的应用程序安装。我们正在与该组织的IT团队合作开发基于服务器的解决方案,但他们的部署时间为12个月+这意味着我们需要在短期内采用战术解决方案。

2 个答案:

答案 0 :(得分:2)

这是获取树的“规则”的一种方法(使用mtcars数据集的示例)

install.packages("randomForest")
library(randomForest)

head(mtcars)
set.seed(1)
fit <- randomForest(mpg ~ ., data=mtcars, importance=TRUE, proximity=TRUE)
print(fit)

## Look at variable importance:
importance(fit)

# Print the rules for each tree in the forest
install.packages("rattle")
library(rattle)
printRandomForests(fit)

使用500棵树的规则可能是不现实的,但也许你可以在你的vba中实现100棵树然后取平均结果(用于连续响应)或预测在树中投票最多的类(作出明确答复)。

答案 1 :(得分:0)

也许您可以在工作表上重新创建模型。 据我所知,Excel可以导入XML结构(在开发工具功能区上)。

编辑:1)将纯文本编辑器中的pmml结构保存为.xml文件。

2)在Excel 2013中打开文件(也许其他版本也可以这样做)

3)单击错误消息并打开文件。树木像一张桌子一样开放,有点滑稽,但可识别。

4)创建预测计算(VBA中的通用fn)以对树进行操作。