jpmml中的InvalidFeatureException

时间:2015-10-02 13:45:55

标签: pmml

我有以下pmml文件:

<?xml version="1.0" ?>
<PMML>
<Header copyright="">
    <Timestamp>2015-10-02 14:41:20.278000</Timestamp>
</Header>
<DataDictionary numberOfFields="5">
    <DataField dataType="double" name="sepal length" optype="continuous"/>
    <DataField dataType="double" name="sepal width" optype="continuous"/>
    <DataField dataType="double" name="petal length" optype="continuous"/>
    <DataField dataType="double" name="petal width" optype="continuous"/>
    <DataField dataType="string" name="result" optype="categorical">
        <Value value="iris setosa"/>
        <Value value="iris versicolor"/>
        <Value value="iris virginica"/>
    </DataField>
</DataDictionary>
<RegressionModel functionName="regression" modelName="IrisRegression" normalizationMethod="softmax" targetFieldName="result">
    <MiningSchema>
        <MiningField name="sepal length"/>
        <MiningField name="sepal width"/>
        <MiningField name="petal length"/>
        <MiningField name="petal width"/>
        <MiningField name="result" usageType="predicted"/>
    </MiningSchema>
    <RegressionTable intercept="0.265606167976">
        <NumericPredictor coefficient="0.414988328296" name="sepal length"/>
        <NumericPredictor coefficient="1.46129738856" name="sepal width"/>
        <NumericPredictor coefficient="-2.2621411772" name="petal length"/>
        <NumericPredictor coefficient="-1.02909509924" name="petal width"/>
    </RegressionTable>
    <RegressionTable intercept="1.08542374239">
        <NumericPredictor coefficient="0.416639685595" name="sepal length"/>
        <NumericPredictor coefficient="-1.60083318526" name="sepal width"/>
        <NumericPredictor coefficient="0.577657628678" name="petal length"/>
        <NumericPredictor coefficient="-1.38553842866" name="petal width"/>
    </RegressionTable>
    <RegressionTable intercept="-1.21471457808">
        <NumericPredictor coefficient="-1.70752515382" name="sepal length"/>
        <NumericPredictor coefficient="-1.53426833999" name="sepal width"/>
        <NumericPredictor coefficient="2.47097168077" name="petal length"/>
        <NumericPredictor coefficient="2.55538211298" name="petal width"/>
    </RegressionTable>
</RegressionModel>
</PMML>

当我尝试使用jpmml-evaluator评估它时,我收到此错误:     org.jpmml.evaluator.InvalidFeatureException:RegressionModel

通过线性回归可以正常工作。有什么想法我得到这个错误?我的pmml文件不知何故错了吗?

编辑:我将functionName更改为regression,现在出现以下错误:

org.jpmml.evaluator.InvalidFeatureException: RegressionTable
    at org.jpmml.evaluator.RegressionModelEvaluator.evaluateClassification(RegressionModelEvaluator.java:140)
    at org.jpmml.evaluator.RegressionModelEvaluator.evaluate(RegressionModelEvaluator.java:70)
    at org.jpmml.evaluator.ModelEvaluator.evaluate(ModelEvaluator.java:345)
    at tryEvaluator.Example.somefunction(Example.java:75)
    at tryEvaluator.Example.main(Example.java:110)

1 个答案:

答案 0 :(得分:0)

根据PMML specification,回归类型RegressionModel元素包含多个RegressionTable子元素是违法的。

以下是相关引用:

  

如果模型用于预测数值字段,则只有一个RegressionTable,并且可能缺少属性targetCategory。如果模型用于预测分类字段,则有两个或更多个RegressionTable,每个都必须使用唯一值定义属性targetCategory。

您可以通过将RegressionModel@functionName属性的值从regression更改为classification来修复PMML文档。显然,你正在处理分类型问题。