我正在测试 jpmml 评估器。我有以下代码:
PMML pmml = readPMML(new File(file));
ModelEvaluatorFactory mef = ModelEvaluatorFactory.newInstance();
ModelEvaluator<?> modelEvaluator = mef.newModelManager(pmml);
Evaluator eval = (Evaluator)modelEvaluator;
List<FieldName> active = eval.getActiveFields();
ArrayList<String> input = new ArrayList<String>();
input.add(Double.toString(test_pmml.getXP_TEST_PMML_CAPITAL()));
input.add(Double.toString(test_pmml.getXP_TEST_PMML_NBTER()));
input.add(Double.toString(test_pmml.getXP_TEST_PMML_ARRIER()));
input.add(Double.toString(test_pmml.getXP_TEST_PMML_EFFECTI()));
Map<FieldName, FieldValue> args = new LinkedHashMap<FieldName, FieldValue>();
int i = 0;
for (FieldName field : active) {
FieldValue value = eval.prepare(field, input.get(i));
args.put(field, value);
i++;
}
Map<FieldName, ?> results = eval.evaluate(args);
FieldName target = eval.getTargetField();
System.out.println("target value : " + results.get(target));
我在评估行收到此错误:
org.jpmml.evaluator.TypeCheckException: Expected STRING, but got null
我理解这个错误,但我不知道它为什么会触发。我确保 myargs
不为空,并且不包含任何空值。没有问题,为什么fields
。我想也许我没有正确转换我的双精度值,但是使用String.valueOf()
而不是Double.toString
没有解决问题。我在这里缺少什么吗?