如何在 R 中使用 pmml 文件进行预测

Posted

技术标签:

【中文标题】如何在 R 中使用 pmml 文件进行预测【英文标题】:How to make predictions using a pmml file in R 【发布时间】:2016-07-06 03:56:06 【问题描述】:

我使用 R 中 pmml 库中的 pmml 函数创建了一个 xml 文件。

adamodel_ios=ada(label~.,data=train_iOS, iter=ntrees, verbose=TRUE, loss="ada", bag.frac=0.7, nu=0.1, control=defctrl, type="real")
Ptrain_iOS = predict(adamodel_iOS,newdata=train_iOS, type="prob")

library(pmml)
adapmml_iOS=pmml(adamodel_iOS)
saveXML(adapmml_iOS,"model_iOS.xml")

save.image()

在第一行的训练模型之后,我找到了训练数据的对应概率。

现在我想使用这个 xml 文件来生成对一组数据的预测(基本上又是训练集)。我如何在 R 中做到这一点?我看到在java和spark中,我们可以加载pmml函数生成的xml文件,然后有可以进行预测的函数。

基本上,我在 R 中寻找一个函数,它可以将此 xml 文件作为输入,然后返回一个对象,该对象又将一些数据点作为输入并返回它们具有标签 0 和 1 的概率。

我找到了一个链接: Can PMML models be read in R?

但没用

【问题讨论】:

如果您在 R 中训练模型,并在 R 中使用模型,那么您为什么还需要 PMML? predict(adamodel_iOS) 怎么了? 我期待这个问题。 :) 我更大的目的是将这个模型传输到火花集群中,以对数百万个数据点进行预测。这就是我以 pmml 格式记录模型的原因。但是事情出了问题,因为 adamodel 生成的分数与 Spark 代码生成的分数不匹配。因此,为了调试,我想确保在将模型记录为 pmml 格式的过程中没有任何变化。这就是为什么我想将 pmml 文件加载到 R 中,然后查看它预测的训练数据值是否与 adamodel 输出的值相同。 R 的pmml 包的pmml.ada() 函数正在导出损坏的模型。不要浪费时间调试它。 哦……这是个坏消息!您能否将我引导到一些有关 pmml(adamodel_object)故障的更多信息的来源。我的 adamodel 预测标签 0 或 1,但 pmml() 调用后生成的 xml 文件包含 -1 和 1 作为标签。 这些模型在某种意义上被破坏了,因为某些树分割条件编码不正确。尝试开发一个玩具问题(例如,使用iris 数据集,预测鸢尾花实例是否为杂色)并亲自查看。 【参考方案1】:

查看link 以获取 PMML 生产者和消费者的列表。如您所见,R 被列为生产者而不是消费者。此外,还列出了 R 可以生成相应 PMML 文件的算法。

用于 PMML 验证器、转换器以及使用 PMML 模型对数据进行评分的最全面的工具是 ADAPA,它不是免费的。

KNIME 是一个开源的拖放分析工具,支持导入和导出 PMML 文件(并非适用于所有模型,功能有限。)它也支持 R、Python 和 Java。

【讨论】:

【参考方案2】:

虽然是很久以前的事了,但还是想分享一下大家可以使用“reticulate”调用python的pypmml包在R中实现你的想法,为了更友好,让预测看起来更像R中的predict函数,我将它封装起来,封装的地址在这里enter link description here

【讨论】:

以上是关于如何在 R 中使用 pmml 文件进行预测的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark MLlib:如何从 PMML 导入模型

可以在 R 中读取 PMML 模型吗?

R arules / apriori - 如何实际实现

pmml(模型标准化)

如何在 R 中导出时间序列模型?

pmml4s model.predict() 返回数组而不是单个值