3

我刚刚开始学习一些关于 PMML 的知识,我认为TreeModel几乎符合我想要实现的目标,但是我有一个问题我无法通过阅读文档来解决:

是否可以让 TreeModel 返回多个值?我找到了 TreeModels 的一些示例,但它们都只声明了一个“预测”字段,我需要的是,如果节点的谓词评估为 TRUE ,则​​模型返回多个值。这甚至可能吗?如果是这样,您将如何实施?

编辑

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


评分程序部分的 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";
    }
}

谢谢。

4

1 回答 1

1

PMML 使用标量值进行操作。如果 TreeModel 的预测是一个字符串值,它以特定于应用程序的数据格式对多个值进行编码,则可以“模拟”类似集合的行为。

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

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

但是,最好将此类业务逻辑排除在您的 PMML 文件之外。让您的 TreeModel 预测一个标量值,并在其他应用层执行从一个值空间到另一个值空间的映射(例如“fruitbasket_11”->“apple,orange,pineapple”)。

为编辑更新

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

但是,PMML 相当灵活,如果您确实需要,可以让您绕过这个限制。

还有一些想法:

  • 修改上面的答案,使score属性代表一个地图,而不是一个列表。例如<Node score="firstfruit=apple,secondfruit=orange,thirdfruit=pineapple">.
  • 如果您需要准确表示两个预测字段,并且第二个预测字段具有唯一值(即具有类似标识符的属性),则可以将其存储为id属性。例如,<Node score="may play" id="golfing_location_11">。该id属性的值可用作entityId输出特征。
  • 对于每个预测字段,都有一个单独的 TreeModel 元素。然后,使用 PMML 的模型分割机制将所有这些 TreeModel 元素组合成一个主模型。
于 2015-08-12T18:53:14.140 回答