我有一个从 SAS Miner 生成的 PMML,我无法使用 JPMML 1.1.4 进行正确评估。JPMML 1.1.4 说它支持 PMML 4.2,而 PMML 说它是 PMML 4.2 版。
以下函数“SAS-EM-String-Normalize”中的 FMTWIDTH 是正确的 PMML 语法吗?
任何想法为什么我不能使用 JPMML 评估这个函数?
我的 TransformationDictionary 中的函数看起来像,
<TransformationDictionary>
<DefineFunction name="SAS-EM-String-Normalize" optype="categorical" dataType="string">
<ParameterField name="FMTWIDTH" optype="continuous"/>
<ParameterField name="AnyCInput" optype="categorical"/>
<Apply function="trimBlanks">
<Apply function="uppercase">
<Apply function="substring">
<FieldRef field="AnyCInput"/>
<Constant>1</Constant>
<Constant>FMTWIDTH</Constant>
</Apply>
</Apply>
</Apply>
</DefineFunction>
</TransformationDictionary>
我得到以下异常,
线程“主”org.jpmml.evaluator.TypeCheckException 中的异常:应为 INTEGER,但在 org.jpmml.evaluator.FieldValue.asInteger(FieldValue.java:125) 的 org.jpmml.evaluator.FunctionRegistry$36 处获得了 STRING (FMTWIDTH)。在 org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203) 在 org.jpmml.evaluator.ExpressionUtil 的 org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:38) 评估(FunctionRegistry.java:463) .evaluate(ExpressionUtil.java:91) 在 org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:76) 在 org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:43) 在 org.jpmml.evaluator。 ExpressionUtil.evaluateApply(ExpressionUtil.java:203) 在 org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91) 在 org.jpmml.evaluator.ExpressionUtil。evaluateApply(ExpressionUtil.java:188) at org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91) at org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:58) at org.jpmml.evaluator.ExpressionUtil .evaluate(ExpressionUtil.java:45) 在 org.jpmml.evaluator.ExpressionUtil.evaluateMapValues(ExpressionUtil.java:169) 在 org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:87) 在 org.jpmml.evaluator。 ExpressionUtil.evaluate(ExpressionUtil.java:58) at org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:45) at org.jpmml.evaluator.RegressionModelEvaluator.evaluateRegressionTable(RegressionModelEvaluator.java:150) at org.jpmml.evaluator .RegressionModelEvaluator.evaluateClassification(RegressionModelEvaluator.java:107) 在 org.jpmml.evaluator。RegressionModelEvaluator.evaluate(RegressionModelEvaluator.java:57) at org.jpmml.evaluator.ModelEvaluator.evaluate(ModelEvaluator.java:65) at ValidPMMLTesterRandomScores.randomEvaluation(ValidPMMLTesterRandomScores.java:116) at ValidPMMLTesterRandomScores.printModelInformation(ValidPMMLTesterRandomScores.java:94) at ValidPMMLTesterRandomScores.readModelFromFile(ValidPMMLTesterRandomScores.java:142) 在 ValidPMMLTesterRandomScores.main(ValidPMMLTesterRandomScores.java:160)readModelFromFile(ValidPMMLTesterRandomScores.java:142) 在 ValidPMMLTesterRandomScores.main(ValidPMMLTesterRandomScores.java:160)readModelFromFile(ValidPMMLTesterRandomScores.java:142) 在 ValidPMMLTesterRandomScores.main(ValidPMMLTesterRandomScores.java:160)