使用JPMML评估SAS生成的PMML文件时出现FMTWIDTH错误 [英] FMTWIDTH error while using JPMML to evaluate a SAS produced PMML file

查看:1058
本文介绍了使用JPMML评估SAS生成的PMML文件时出现FMTWIDTH错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个从SAS Miner生成的PMML,我无法使用JPMML 1.1.4正确评估。 JPMML 1.1.4表示它支持PMML 4.2,而PMML表示它是PMML版本4.2。

I have a PMML generated from SAS Miner that I can't get properly evaluated using JPMML 1.1.4. JPMML 1.1.4 says it supports PMML 4.2 and the PMML says it is PMML version 4.2.

下面的函数中的FMTWIDTH是SAS-EM-String-Normalize正确的PMML语法?

Is the FMTWIDTH in the below function "SAS-EM-String-Normalize" proper PMML syntax?

为什么我不能使用JPMML评估这个函数的任何想法?

Any ideas why I can't evaluation this function using JPMML?

我有我的TransformationDictionary中的函数看起来像,

I have the function in my TransformationDictionary that looks like,

<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>

我得到以下异常,


线程main中的异常org.jpmml.evaluator.TypeCheckException:
预期的INTEGER,但得到STRING(FMTWIDTH)
org.jpmml.evaluator.FieldValue.asInteger( FieldValue.java:125)at
org.jpmml.evaluator.FunctionRegistry $ 36.evaluate(FunctionRegistry.java:463)
at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:38)
at
org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203)
at
org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91)
at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:76)
at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:43)
at
org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203)
at
org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91)
at
有机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)
at
org。 jpmml.evaluator.ExpressionUtil.evaluateMapValues(ExpressionUtil.java:169)
at
org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:87)
at
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)
at
org。 jpmml.evaluator.RegressionModelEvaluator.ev aluate(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)
at
ValidPMMLTesterRandomScores .main(ValidPMMLTesterRandomScores.java:160)

Exception in thread "main" org.jpmml.evaluator.TypeCheckException: Expected INTEGER, but got STRING (FMTWIDTH) at org.jpmml.evaluator.FieldValue.asInteger(FieldValue.java:125) at org.jpmml.evaluator.FunctionRegistry$36.evaluate(FunctionRegistry.java:463) at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:38) at org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203) at org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91) at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:76) at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:43) at org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203) at org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91) at 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) at org.jpmml.evaluator.ExpressionUtil.evaluateMapValues(ExpressionUtil.java:169) at org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:87) at 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) at 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) at ValidPMMLTesterRandomScores.main(ValidPMMLTesterRandomScores.java:160)


推荐答案

根据正式定义PMML内置函数substring,它需要一个字符串参数和两个整数参数。 SAS EM生成的PMML代码尝试使用字符串参数,整数参数和另一个字符串参数 substring($ AnyCInput,1,FMTWIDTH)来调用此函数。

According to the formal definition of the PMML built-in function "substring", it requires a string argument and two integer arguments. The SAS EM generated PMML code attempts to invoke this function with a string argument, an integer argument, and another string argument substring($AnyCInput, 1, "FMTWIDTH").

可以通过使用 FieldRef 元素访问FMTWIDTH参数的值来修复此PMML片段:

This PMML fragment can be fixed by accessing the value of the "FMTWIDTH" parameter using the FieldRef element:

<Apply function="substring">
  <FieldRef field="AnyCInput"/>
  <Constant>1</Constant>
  <FieldRef field="FMTWIDTH"/>
</Apply>

总之,JPMML是正确的,SAS EM是错误的。

In conclusion, JPMML is a correct and SAS EM is wrong.

这篇关于使用JPMML评估SAS生成的PMML文件时出现FMTWIDTH错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆