PMML的TransformedValue输出 - 特定于实现的差异

时间:2015-12-23 10:28:06

标签: pmml

我的PMML模型中有一些派生字段,我希望将其作为输出字段公开。而且......我可以在Augustus和JPMML(通过OpenScoring)中使用它,但我似乎必须略有不同。我想知道是否有人有任何关于他们正在做什么的观点正确? PMML规范似乎并未100%明确。

对于JPMML,我可以通过引用我想要的派生字段来实现,我必须避免在MiningSchema中将它们包含为“预测”。

<MiningSchema>
    <MiningField name="foo_input" usageType="active"/>
</MiningSchema>
<Output>
    <OutputField name="foo_output" dataType="integer" feature="transformedValue" optype="continuous">
        <FieldRef field="foo_derived"/>
    </OutputField>
</Output>

但这与奥古斯都没有关系。为此,我需要将这些输出声明为MiningSchema中的“预测”字段。

<MiningSchema>
    <MiningField name="foo_input" usageType="active"/>
    <MiningField name="foo_output" usageType="predicted"/>
</MiningSchema>
<Output>
    <OutputField name="foo_output" dataType="integer" feature="transformedValue" optype="continuous">
        <FieldRef field="foo_derived"/>
    </OutputField>
</Output>

所以我必须生成不同的PMML,这取决于我对目标评分环境的期望......这听起来不太好。但哪一个做得对?或者是否有另一种表达方式可以更方便?

在上述所有片段中, foo_derived 只是基于 foo_input 输入值的派生字段。似乎没有任何区别,无论是本地转型还是全球转型。

<DerivedField name="foo_derived" dataType="integer" optype="continuous">
    <Apply function="+"> <!-- example definition, actual one is a bit more complicated -->
        <FieldRef field="foo_input"/>
        <Constant dataType="integer">1</Constant>
    </Apply>
</DerivedField>

1 个答案:

答案 0 :(得分:0)

MiningSchema element声明必须“导入”哪个字段值才能对模型元素进行评分。此外,如果模型元素表示监督学习模型,它可以声明唯一目标字段的名称:

  

target:用于监督模型的训练目标的字段。

Augustus似乎假设MiningSchema元素还必须声明哪些字段值是“导出的”。但是,PMML规范不以任何方式支持此假设。 OutputField元素是一个独立的实体,其存在不需要被任何其他元素“确认”。

因此,您应该考虑使用JPMML导出模型。如果你还需要在Augustus上对它们进行评分,那么你可以考虑使用JPMML的访问者API暂时重新排列它们。