【问题标题】:PMML - Is it possible to create a TreeModel that returns multiple values (predicted fields)PMML - 是否可以创建返回多个值(预测字段)的 TreeModel
【发布时间】:2015-11-05 08:57:05
【问题描述】:

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

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

编辑

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


计分程序 部分的 documentation for the TreeModel 中,有一个名为“golfing”的 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 模型,例如基于“golfing”模型,返回一个额外的字段,如下条件:

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";
    }
}

谢谢。

【问题讨论】:

    标签: xml machine-learning classification prediction pmml


    【解决方案1】:

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

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

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

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

    为编辑更新

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

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

    更多想法:

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

    【讨论】:

    • 感谢您的快速回复。我在我的问题中添加了一个示例,以帮助澄清我想要实现的目标。请参阅编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多