PMML - 是否可以创建一个返回多个值的TreeModel(预测字段)

时间:2015-08-12 16:15:05

标签: xml machine-learning classification prediction pmml

我刚刚开始学习PMML,我认为TreeModel几乎适合我想要实现的目标,但我有一个问题我无法解决这个问题。文档:

是否可以让TreeModel返回多个值?我找到some examples of TreeModels,但所有这些都只声明了一个“预测”字段,我需要的是如果如果节点的谓词计算为TRUE,则模型返回多个值。这甚至可能吗?如果是这样,你会如何实现?

修改

添加了我想要实现的示例:

评分程序部分的documentation for the TreeModel中,有一个名为“打高尔夫球”的TreeModel示例。在那个例子中,请更正,如果我错了,逻辑结构告诉哪个值将被赋予字段(预测)“whatIdo”,一旦模型被评估,就可以这样表达:

if(outlook=="sunny") {
    whatIdo="will play";
    if(temperature<90 AND temperature>50){
        whatIdo="will play";
        if(humidity<80){
            whatIdo="will play";
        }
        else if(humidity>=80){
            whatIdo="no play";
        }
    }
    else if(temperature>=90 OR temperature<=50){
        whatIdo="no play";
    }

}
else if(outlook=="overcast" OR outlook=="rain"){
    whatIdo="may play";
    if(temperature > 60 AND temperature < 100 AND outlook="overcast" AND humidity <70 AND windy="false"){
        whatIdo="may play";
    }
    else if(outlook=="rain" AND humidity<70 ){
        whatIdo="no play";
    }
}

我需要知道的是,除了 whatIdo 字段之外,我还可以返回其他值,例如另一个名为“ whatElseIdo ”的字段。 是否有可能创建一个PMML模型,例如,基于“高尔夫球”模型,返回一个额外的字段,如下所示:

if(outlook=="sunny") {
    whatIdo="will play";
    whatElseIdo="will have a picnic";
    if(temperature<90 AND temperature>50){
        whatIdo="will play";
        whatElseIdo="will have a picnic";
        if(humidity<80){
            whatIdo="will play";
            whatElseIdo="will have a picnic";
        }
        else if(humidity>=80){
            whatIdo="no play";
            whatElseIdo="no have a picnic";
        }
    }
    else if(temperature>=90 OR temperature<=50){
        whatIdo="no play";
        whatElseIdo="no have a picnic";
    }

}
else if(outlook=="overcast" OR outlook=="rain"){
    whatIdo="may play";
    whatElseIdo="may have a picnic";
    if(temperature > 60 AND temperature < 100 AND outlook="overcast" AND humidity <70 AND windy="false"){
        whatIdo="may play";
        whatElseIdo="may have a picnic";
    }
    else if(outlook=="rain" AND humidity<70 ){
        whatIdo="no play";
        whatElseIdo="no have a picnic";
    }
}

感谢。

1 个答案:

答案 0 :(得分:0)

PMML以标量值运行。可以模仿&#34;模仿&#34;类似于集合的行为,如果TreeModel的预测是一个字符串值,它以特定于应用程序的数据格式编码多个值。

例如,您可以将多个水果值编码为逗号分隔列表:

<TreeModel>
  <Node score="apple,orange,pineappe">
    <True/>
  </Node>
</TreeModel>

但是,最好将这些业务逻辑保留在PMML文件之外。让您的TreeModel预测标量值,并在一些其他应用程序层中执行从一个值空间到另一个值空间的映射(例如&#34; fruitbasket_11&#34; - &gt;&#34; apple,orange,pineapple&#34;)

已更新以进行修改

决策树是一种经典的监督学习方法。它使用具有单个预测字段的数据集进行训练。因此,TreeModel元素也仅支持单个预测字段。

但是,PMML非常灵活,如果你真的需要,可以让你解决这个限制。

更多想法:

  • 重写上述答案,以便score属性代表地图,而不是列表。例如<Node score="firstfruit=apple,secondfruit=orange,thirdfruit=pineapple">
  • 如果您需要准确表示两个预测字段,并且第二个预测字段具有唯一值(即具有类似标识符的属性),则可以将其存储为id属性。例如,<Node score="may play" id="golfing_location_11">id属性的值可用作entityId输出功能。
  • 对于每个预测字段,都有一个单独的TreeModel元素。然后,使用PMML&#39; model segmentation mechanism将所有TreeModel元素组合成主模型。