@Override public Map<FieldName, ?> predictScores(Map<FieldName, FieldValue> preProcInputs) { LOG.debug("Predicting scores for pre processed inputs: = [{}]", preProcInputs); Map<FieldName, ?> predictedScores = eval.evaluate(preProcInputs); LOG.debug("Predicted scores = [{}]", predictedScores); return predictedScores; }
public JPmmlModelRunner(Evaluator evaluator, ModelOutputs modelOutputs) { this.eval = evaluator; this.modelOutputs = modelOutputs; activeFields = evaluator.getActiveFields(); predictedFields = eval.getPredictedFields(); outputFields = eval.getOutputFields(); }
private static ModelOutputs create(PMML pmmlModel, List<String> streams) { final Set<String> fieldNames = new LinkedHashSet<>(); final Evaluator evaluator = JpmmlFactory.newEvaluator(pmmlModel); for (FieldName predictedField : evaluator.getPredictedFields()) { fieldNames.add(predictedField.getValue()); } for (FieldName outputField : evaluator.getOutputFields()) { fieldNames.add(outputField.getValue()); } final Map<String, Fields> toDeclare = streams.stream() .collect(Collectors.toMap(Function.identity(), (x) -> new Fields(new ArrayList<>(fieldNames)))); return new JpmmlModelOutputs(toDeclare); } }
evaluator.verify(); List<InputField> inputFields = evaluator.getInputFields(); List<TargetField> targetFields = evaluator.getTargetFields(); Map<FieldName, ?> results = evaluator.evaluate(arguments);
private List<MLModelField> doGetOutputFieldsForPMMLStream(String pmmlContents) throws SAXException, JAXBException, UnsupportedEncodingException { List<MLModelField> fieldNames = new ArrayList<>(); PMMLManager pmmlManager = new PMMLManager(IOUtil.unmarshal(new ByteArrayInputStream(pmmlContents.getBytes("UTF-8")))); Evaluator modelEvaluator = (ModelEvaluator<?>) pmmlManager.getModelManager(null, ModelEvaluatorFactory.getInstance()); modelEvaluator.getPredictedFields().forEach((f) -> fieldNames.add(getModelField(modelEvaluator.getDataField(f)))); modelEvaluator.getOutputFields().forEach((f) -> { OutputField outputField = modelEvaluator.getOutputField(f); ResultFeatureType resultFeatureType = outputField.getFeature(); if (resultFeatureType != ResultFeatureType.PREDICTED_VALUE && resultFeatureType != ResultFeatureType.PREDICTED_DISPLAY_VALUE) { fieldNames.add(getModelField(outputField)); } }); return fieldNames; }
List<FieldName> activeFields = evaluator.getActiveFields(); for (FieldName activeField : activeFields) { FieldValue activeValue = evaluator.prepare(activeField, rawValue); Map<FieldName, ?> results = evaluator.evaluate(arguments);
static protected EvaluationResponse evaluate(Evaluator evaluator, EvaluationRequest request){ logger.info("Received {}", request); Map<String, ?> requestArguments = request.getArguments(); EvaluationResponse response = new EvaluationResponse(request.getId()); Map<FieldName, FieldValue> arguments = new LinkedHashMap<>(); List<InputField> inputFields = evaluator.getInputFields(); for(InputField inputField : inputFields){ FieldName inputName = inputField.getName(); String key = inputName.getValue(); Object value = requestArguments.get(key); if(value == null && !requestArguments.containsKey(key)){ logger.warn("Evaluation request {} does not specify an input field {}", request.getId(), key); } FieldValue inputValue = inputField.prepare(value); arguments.put(inputName, inputValue); } logger.debug("Evaluation request {} has prepared arguments: {}", request.getId(), arguments); Map<FieldName, ?> results = evaluator.evaluate(arguments); // Jackson does not support the JSON serialization of <code>null</code> map keys results = replaceNullKey(results); logger.debug("Evaluation response {} has result: {}", response.getId(), results); response.setResults(EvaluatorUtil.decode(results)); logger.info("Returned {}", response); return response; }
@Override public Result evaluate(Map<Descriptor, ?> values) throws Exception { org.jpmml.evaluator.Evaluator evaluator = (org.jpmml.evaluator.Evaluator) getModelManager(); Map<FieldName, org.jpmml.evaluator.FieldValue> arguments = new LinkedHashMap<FieldName, org.jpmml.evaluator.FieldValue>(); Map<FieldName, DataField> dataFieldMap = new LinkedHashMap<FieldName, DataField>(); List<Descriptor> descriptors = getDescriptors(); for(Descriptor descriptor : descriptors){ FieldName field = FieldNameUtil.encodeDescriptor(descriptor); DataField dataField = dataFieldMap.get(field); if(dataField == null){ dataField = evaluator.getDataField(field); // For compatibility with generic PMML producer software if(dataField == null){ field = new FieldName(descriptor.getId()); dataField = evaluator.getDataField(field); } // End if if(dataField == null){ throw new IllegalArgumentException(); } dataFieldMap.put(field, dataField); } Object value = values.get(descriptor); org.jpmml.evaluator.FieldValue fieldValue = EvaluatorUtil.prepare(evaluator, field, value); arguments.put(field, fieldValue); } Map<FieldName, ?> result = evaluator.evaluate(arguments); Object targetValue = result.get(evaluator.getTargetField()); return new Result(EvaluatorUtil.decode(targetValue), values); }
Map variables = new HashMap(); variables.put("ANGLE", "3.0"); variables.put("PI", "3.14"); Evaluator evaluator = new Evaluator(); evaluator.setVariables(variables); String result = evaluator.evaluate("#{ANGLE} * #{PI} / 2"));
private List<MLModelField> doGetInputFieldsFromPMMLStream(String pmmlContents) throws SAXException, JAXBException, UnsupportedEncodingException { final List<MLModelField> fieldNames = new ArrayList<>(); PMMLManager pmmlManager = new PMMLManager(IOUtil.unmarshal(new ByteArrayInputStream(pmmlContents.getBytes("UTF-8")))); Evaluator modelEvaluator = (ModelEvaluator<?>) pmmlManager.getModelManager(null, ModelEvaluatorFactory.getInstance()); for (FieldName predictedField: modelEvaluator.getActiveFields()) { fieldNames.add(getModelField(modelEvaluator.getDataField(predictedField))); } return fieldNames; }
/** * @see LoadingModelEvaluatorBuilder#load(InputStream) * @see LoadingModelEvaluatorBuilder#load(InputStream, String) */ @Deprecated static public Evaluator createEvaluator(InputStream is) throws SAXException, JAXBException { EvaluatorBuilder evaluatorBuilder = new LoadingModelEvaluatorBuilder() .load(is); Evaluator evaluator = evaluatorBuilder.build(); // Perform self-testing evaluator.verify(); return evaluator; } }
static private List<OutputField> getProbabilityFields(Evaluator evaluator, TargetField targetField){ List<OutputField> outputFields = evaluator.getOutputFields();
Byte right = dataTypeMap.get(this.evaluator.getDataField(activeField).getDataType().toString()); if (left != right) if (failOnTypeMatching) { DataField dataField = this.evaluator.getDataField(predictedField); String dataType = dataField.getDataType().toString(); OutputField dataField = this.evaluator.getOutputField(outputField); if (dataField.getDataType() == null) { fieldSchemas.add(new Schema.FieldSchema(outputFieldAlias,DataType.BYTEARRAY));
evaluator.verify(); List<InputField> inputFields = evaluator.getInputFields(); List<InputField> groupFields = Collections.emptyList(); Map<FieldName, ?> results = evaluator.evaluate(arguments); List<TargetField> targetFields = evaluator.getTargetFields(); List<OutputField> outputFields = evaluator.getOutputFields();
private List<MLModelField> doGetOutputFieldsForPMMLStream(String pmmlContents) throws SAXException, JAXBException { List<MLModelField> fieldNames = new ArrayList<>(); PMMLManager pmmlManager = new PMMLManager(IOUtil.unmarshal(new ByteArrayInputStream(pmmlContents.getBytes()))); Evaluator modelEvaluator = (ModelEvaluator<?>) pmmlManager.getModelManager(null, ModelEvaluatorFactory.getInstance()); modelEvaluator.getPredictedFields().forEach((f) -> fieldNames.add(getModelField(modelEvaluator.getDataField(f)))); modelEvaluator.getOutputFields().forEach((f) -> { OutputField outputField = modelEvaluator.getOutputField(f); ResultFeatureType resultFeatureType = outputField.getFeature(); if (resultFeatureType != ResultFeatureType.PREDICTED_VALUE && resultFeatureType != ResultFeatureType.PREDICTED_DISPLAY_VALUE) { fieldNames.add(getModelField(outputField)); } }); return fieldNames; }
List<InputField> inputFields = evaluator.getInputFields(); for (InputField inputField : inputFields) { FieldName inputFieldName = inputField.getName(); Map<FieldName, ?> results = evaluator.evaluate(arguments);
private static ModelOutputs create(PMML pmmlModel, List<String> streams) { final Set<String> fieldNames = new LinkedHashSet<>(); final Evaluator evaluator = JpmmlFactory.newEvaluator(pmmlModel); for (FieldName predictedField : evaluator.getPredictedFields()) { fieldNames.add(predictedField.getValue()); } for (FieldName outputField : evaluator.getOutputFields()) { fieldNames.add(outputField.getValue()); } final Map<String, Fields> toDeclare = new LinkedHashMap<>(); for (String stream : streams) { toDeclare.put(stream, new Fields(new ArrayList<>(fieldNames))); } return new JpmmlModelOutputs(toDeclare); } }
private List<MLModelField> doGetInputFieldsFromPMMLStream(String pmmlContents) throws SAXException, JAXBException { final List<MLModelField> fieldNames = new ArrayList<>(); PMMLManager pmmlManager = new PMMLManager(IOUtil.unmarshal(new ByteArrayInputStream(pmmlContents.getBytes()))); Evaluator modelEvaluator = (ModelEvaluator<?>) pmmlManager.getModelManager(null, ModelEvaluatorFactory.getInstance()); for (FieldName predictedField : modelEvaluator.getActiveFields()) { fieldNames.add(getModelField(modelEvaluator.getDataField(predictedField))); } return fieldNames; }
@Override public Evaluator getEvaluator() throws Exception { PMML pmml = getPMML(); EvaluatorBuilder evaluatorBuilder = new ModelEvaluatorBuilder(pmml); Evaluator evaluator = evaluatorBuilder.build(); evaluator.verify(); return evaluator; }
/** * <p> * Appends all output fields. * </p> * * @see Evaluator#getOutputFields() */ public TransformerBuilder withOutputCols(){ Evaluator evaluator = getEvaluator(); List<OutputField> outputFields = evaluator.getOutputFields(); for(OutputField outputField : outputFields){ this.columnProducers.add(new OutputColumnProducer(outputField, null)); } return this; }