/** * Retrieves a Map with entries that consist of * key -> a model identifier * value -> the List of raw MiningField objects belonging to the model referenced by the key * @return The Map of model identifiers and their corresponding list of raw MiningField objects */ public Map<String, List<MiningField>> getMiningFields() { Map<String, List<MiningField>> miningFieldsMap = new HashMap<>(); for (PMML4Model model : getModels()) { List<MiningField> miningFields = model.getRawMiningFields(); miningFieldsMap.put(model.getModelId(), miningFields); model.getChildModels(); } return miningFieldsMap; }
@Override public String getModelExternalMiningBeansRules(String modelName) { PMML4Model model = getModelsMap().get(modelName); return model != null ? model.getExternalBeansMiningRules() : null; } }
public boolean checkForMiningFieldMapping() { List<PMMLMiningField> miningFields = this.internalModel.getMiningFields(); for (PMMLMiningField field : miningFields) { if (!field.isInDictionary()) { System.out.println("must search for output named: "+field.getName()); } } return false; }
/** * Retrieves a Map with entries that consist of * key -> a model identifier * value -> the PMML4Model object that the key refers to * where the PMML4Model does not indicate a parent model (i.e. the * model is not a child model) * @return The Map of model identifiers and their corresponding PMML4Model objects */ @Override public Map<String, PMML4Model> getRootModels() { Map<String, PMML4Model> rootModels = new HashMap<>(); for (PMML4Model model : this.modelsMap.values()) { if (model.getParentModel() == null) { rootModels.put(model.getModelId(), model); } } return rootModels; }
/** * Recursive method that adds children models (i.e. models contained within models) * to the internal map of models * @param parentModel The model which may contain child models */ private void addChildModelsToMap(PMML4Model parentModel) { Map<String, PMML4Model> childModels = parentModel.getChildModels(); if (childModels != null && !childModels.isEmpty()) { for (PMML4Model model : childModels.values()) { modelsMap.put(model.getModelId(), model); addChildModelsToMap(model); } } }
protected PMMLResource buildResourceFromSegment(PMML pmml_origin, MiningSegment segment, ClassLoader classLoader, KieModuleModel module) { PMML pmml = new PMML(); DataDictionary dd = pmml_origin.getDataDictionary(); pmml.setDataDictionary(dd); pmml.setHeader(pmml_origin.getHeader()); pmml.getAssociationModelsAndBaselineModelsAndClusteringModels().add(segment.getModel().getRawModel()); addMissingFieldDefinition(pmml, segment.getOwner(), segment); helper.setPack(segment.getModel().getModelPackageName());//PMML4Helper.pmmlDefaultPackageName()+".mining.segment_"+segment.getSegmentId()); StringBuilder rules = new StringBuilder(this.compile(pmml, classLoader)); String extBeanMiningRules = segment.getModel().getExternalBeansMiningRules(); if (extBeanMiningRules != null) { rules.append(extBeanMiningRules); } KieBaseModel kbModel = module.newKieBaseModel(segment.getOwner().getOwner().getModelId() + "_" + segment.getOwner().getSegmentationId() + "_SEGMENT_" + segment.getSegmentId()); kbModel.addPackage(helper.getPack()) .setDefault(false) .setEventProcessingMode(EventProcessingOption.CLOUD); KieSessionModel ksm = kbModel.newKieSessionModel("SEGMENT_" + segment.getSegmentId()); ksm.setDefault(true); PMMLResource resource = new PMMLResource(helper.getPack()); resource.setKieBaseModel(kbModel); resource.addRules(segment.getModel().getModelId(), rules.toString()); return resource; }
public Map<String, String> getJavaClasses(InputStream stream) { Map<String, String> javaClasses = new HashMap<>(); PMML pmml = loadModel(PMML, stream); if (pmml != null && results.isEmpty()) { PMML4Unit unit = new PMML4UnitImpl(pmml); if (unit != null) { List<PMML4Model> models = unit.getModels(); models.forEach(model -> { Map.Entry<String, String> inputPojo = model.getMappedMiningPojo(); Map.Entry<String, String> ruleUnit = model.getMappedRuleUnit(); Map.Entry<String, String> outcome = null; if (model.getModelType() == PMML4ModelType.TREE) { outcome = ((Treemodel) model).getTreeNodeJava(); } if (inputPojo != null) { javaClasses.put(inputPojo.getKey(), inputPojo.getValue()); } if (ruleUnit != null) { javaClasses.put(ruleUnit.getKey(), ruleUnit.getValue()); } if (outcome != null) { javaClasses.put(outcome.getKey(), outcome.getValue()); } }); } } return javaClasses; }
}) .collect(Collectors.toList()); seg.getModel().getMiningFields().stream().filter(mf -> !mf.isInDictionary()).forEach(pmf -> { String fldName = pmf.getName(); boolean fieldAdded = false; for (Iterator<PMML4Model> iter = models.iterator(); iter.hasNext() && !fieldAdded; ) { PMML4Model mdl = iter.next(); PMMLOutputField outfield = mdl.findOutputField(fldName); PMMLMiningField target = (outfield != null && outfield.getTargetField() != null) ? mdl.findMiningField(outfield.getTargetField()) : null; if (outfield != null) { DataField e = null;
public Map<String, String> getModelPackageNames() { Map<String, String> packageNames = new HashMap<>(); packageNames.put("root", getRootPackage()); for (PMML4Model model : this.getModels()) { packageNames.put(model.getModelId(), model.getModelPackageName()); } return packageNames; }
@Override public Map<String, PMML4Model> getModels(PMML4ModelType type, PMML4Model parent) { Map<String, PMML4Model> filteredModels = new HashMap<>(); Map<String, PMML4Model> unfilteredModels = parent == null ? getRootModels() : getChildModels(parent.getModelId()); if (unfilteredModels != null && !unfilteredModels.isEmpty()) { for (PMML4Model model : unfilteredModels.values()) { if (model.getModelType() == type) { filteredModels.put(model.getModelId(), model); } } } return filteredModels; }
public String getSegmentRuleUnit() { if (this.segmentRuleUnit == null || this.segmentRuleUnit.trim().isEmpty()) { this.segmentRuleUnit = this.getModel().getModelPackageName()+"."+this.getModel().getRuleUnitClassName(); } return this.segmentRuleUnit; }
private PMMLOutputField getChildOutputField( PMML4Model parentModel, String fieldName) { PMMLOutputField output = null; for (Iterator<PMML4Model> childIter = parentModel.getChildModels().values().iterator(); childIter.hasNext() && output == null;) { PMML4Model child = childIter.next(); List<PMMLOutputField> fields = child.getOutputFields(); if (fields != null && !fields.isEmpty()) { for (Iterator<PMMLOutputField> fieldIter = fields.iterator(); fieldIter.hasNext() && output == null;) { PMMLOutputField fld = fieldIter.next(); if (fieldName.equals(fld.getName())) { output = fld; } } } if (child instanceof Miningmodel && output == null) { output = getChildOutputField(child,fieldName); } } return output; }
/** * Initializes the internal map of models. This map includes all models that are * defined within the PMML, including child models (i.e. models contained within models) */ private void initModelsMap() { modelsMap = new HashMap<>(); List<PMML4Model> rootModels = modelFactory.getModels(this); if (rootModels != null && !rootModels.isEmpty()) { for (PMML4Model model : rootModels) { modelsMap.put(model.getModelId(), model); addChildModelsToMap(model); } } else { throw new IllegalStateException("BRMS-PMML requires at least one model of the model types that are recognized"); } }
/** * Retrieves a Map whose entries consist of * key -> a model identifier * value -> the PMML4Model object that the key refers to * where the PMML4Model indicates that it * @param parentModelId * @return */ public Map<String, PMML4Model> getChildModels(String parentModelId) { PMML4Model parent = modelsMap.get(parentModelId); Map<String, PMML4Model> childMap = parent.getChildModels(); return (childMap != null && !childMap.isEmpty()) ? new HashMap<>(childMap) : new HashMap<>(); }
public String getModelPackageName() { String pkgName = ""; if (this.getParentModel() != null) { pkgName = this.getParentModel().getModelPackageName(); } else { pkgName = this.getOwner().getRootPackage(); } return pkgName.concat("." + this.getModelId()); }
public DataDictionary getDataDictionary() { if (this.getParentModel() == null) { return this.getOwner().getRawPMML().getDataDictionary(); } return this.getParentModel().getDataDictionary(); }
PMML4Model rootModel = unit.getRootModel(); if (rootModel != null) { helper.setPack(rootModel.getModelPackageName()); KieBaseModel kbm = module.newKieBaseModel(rootModel.getModelId()); kbm.addPackage(helper.getPack()) .setDefault(true) PMMLResource resource = new PMMLResource(helper.getPack()); StringBuilder bldr = new StringBuilder(this.compile(pmml, classLoader)); String extBeanMiningRules = unit.getModelExternalMiningBeansRules(rootModel.getModelId()); if (extBeanMiningRules != null) { bldr.append(extBeanMiningRules); resource.addRules(rootModel.getModelId(), bldr.toString()); resources.add(resource);
protected void initChildModels() { childModels = new HashMap<>(); Iterator<Serializable> extenIter = rawModel.getExtensionsAndMiningSchemasAndOutputs().iterator(); segmentation = null; while (extenIter.hasNext() && segmentation == null) { Object obj = extenIter.next(); if (obj instanceof Segmentation) { segmentation = new MiningSegmentation(this,(Segmentation)obj); } } if (segmentation != null) { List<MiningSegment> segments = segmentation.getMiningSegments(); DataDictionary dd = this.getDataDictionary(); for (MiningSegment seg : segmentation.getMiningSegments()) { childModels.put(seg.getModel().getModelId(), seg.getModel()); } } }
public List<String> getTargetsForWeighting() { return this.internalModel.getMiningFields().stream() .filter(mf -> mf.getFieldUsageType() == FIELDUSAGETYPE.TARGET || mf.getFieldUsageType() == FIELDUSAGETYPE.PREDICTED) .map(mf -> { return pmmlHelper.compactAsJavaId(mf.getName(), true); }) .collect(Collectors.toList()); }
@Override public List<PMMLMiningField> getMiningFields() { List<PMMLMiningField> fields = super.getMiningFields(); for (PMMLMiningField field : fields) { String type = field.getType(); if (type == null || type.trim().isEmpty()) { fields.remove(field); } } if (this.segmentation != null) { segmentation.getMiningSegments().stream() .flatMap(ms -> ms.getModel().getMiningFields().stream() ) .filter(fld -> !fields.contains(fld)) .forEach(fields::add); } return fields; }