如何使用 R 向 PMML 添加自定义转换?

How do I add custom transformations to a PMML using R?

我正在尝试将两个变量的函数添加到 R 中的 PMML 中。

我尝试执行的模型是

y = a + b*exp(Sepal.Width - Sepal.Length)^2

我希望 PMML 的输入是 Sepal.Width 和 Sepal.Length。

我有以下代码来生成字段 derived_Sepal.Length,但我不知道如何使用自定义转换函数,例如 exp(Sepal.Width - Sepal.Length) ^2.

library(pmml)
library(XML)
library(pmmlTransformations)
irisBox <- WrapData(iris)
irisBox <- ZScoreXform(irisBox,"Sepal.Length")

model <- lm(Petal.Width ~ derived_Sepal.Length - Sepal.Width, data=irisBox$data)
pmmlModel <- pmml(model,transforms=irisBox)

pmmlModelEnhanced <- addLT(pmmlModel,namespace="4_2")
saveXML(pmmlModelEnhanced, file=outputPMMLFilename)

任何关于使用 R 在 PMML 中进行数据转换的一般性建议或技巧也将不胜感激。

谢谢!

目前,没有现成的工具可以将任意 R 表达式转换为 PMML。您必须使用通用 R XML API 手动编写 PMML 片段,并在将其写入文件之前将其附加到 PMML 文档。

假设您要使用派生字段 my_field:

my_field = (Sepal.Length - Sepal.Width)^2
# Use the my_field in your formula
lm = lm(Species ~ my_field, data = iris)
# Convert the lm() object to an in-memory XML DOM object
lm.pmml = pmml(lm)
# Fix the contents of the PMML/DataDictionary:
# 1) Remove the 'my_field' field definition
# 2) Add `Sepal.Length` and `Sepal.Width` field definitions - you will be referencing them in your custom expression, so they need to be available
lm.pmml = remove_datafield(lm.pmml, "my_field")
lm.pmml = add_datafield(lm.pmml, "Sepal.Width", "double", "continuous")
lm.pmml = add_datafield(lm.pmml, "Sepal.Length", "double", "continuous")
# Fix the contents of the PMML/TransformationDictionary:
# 1) Add 'my_field' field definition
lm.pmml = add_derivedfield(lm.pmml, ..)
# The PMML manipulation is done now, save it to a local filesystem file
saveXML(lm.pmml, outputPMMLFilename)

展望未来,您可能需要关注 JPMML-Converter 项目,因为自动从 R 到 PMML 的翻译是那里计划的功能。