private void initSegments(List<Segment> segments) { if (segments != null && !segments.isEmpty()) { for (int index = 0; index < segments.size(); index++) { Segment seg = segments.get(index); MiningSegment ms = new MiningSegment(this,seg,index); miningSegments.add(ms); } } }
public MiningSegmentWeight(MiningSegment segment) { super(); this.segmentationId = segment.getOwner().getSegmentationId(); this.segmentId = segment.getSegmentId(); List<String> targets = segment.getTargetsForWeighting(); if (targets != null && !targets.isEmpty()) { this.targetName = targets.get(0); } this.weight = segment.getWeight(); } public MiningSegmentWeight(String segmentationId, String segmentId, String targetName, Double weight) {
public MiningSegmentTransfer getSegmentTransfer( MiningSegment targetSegment, String targetFieldName) { MiningSegmentTransfer xfer = null; int lastIndex = targetSegment.getSegmentIndex() - 1; if (lastIndex < 0) { throw new IndexOutOfBoundsException("Cannot have an undefined mining field in the first segment"); } for (int idx = lastIndex; idx >= 0; idx--) { MiningSegment seg = miningSegments.get(idx); if (seg != null && seg.getInternalModel() != null) { List<PMMLOutputField> outputs = seg.getInternalModel().getOutputFields(); if (outputs != null) { for (PMMLOutputField field: outputs) { if (field.getName().equals(targetFieldName)) { xfer = new MiningSegmentTransfer(this.segmentationId, seg.getSegmentId(), targetSegment.getSegmentId()); xfer.addResultToRequestMapping(targetFieldName, targetFieldName); return xfer; } } } } } return xfer; }
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; }
private void addMissingFieldDefinition(PMML pmml, MiningSegmentation msm, MiningSegment seg) { .filter(s -> s != seg && s.getSegmentIndex() < seg.getSegmentIndex()) .map(iseg -> { return iseg.getModel(); }) .collect(Collectors.toList()); seg.getModel().getMiningFields().stream().filter(mf -> !mf.isInDictionary()).forEach(pmf -> { String fldName = pmf.getName(); boolean fieldAdded = false;
public String getTargetForWeighting() { List<String> targets = this.getTargetsForWeighting(); return (targets != null && !targets.isEmpty()) ? targets.get(0):null; }
public String getSegmentPackageName() { StringBuilder builder = new StringBuilder(segmentPackageRootName); builder.append(".mining.segment_").append(this.getSegmentId()); return builder.toString(); }
@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; }
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()); } } }
protected List<PMMLResource> getChildResources(PMML pmml_origin, Miningmodel parent, List<PMMLResource> resourceList, ClassLoader classLoader, KieModuleModel module) { if (parent != null && parent.getSegmentation() != null) { MiningSegmentation segmentation = parent.getSegmentation(); if (segmentation.getMiningSegments() != null) { List<MiningSegment> segments = segmentation.getMiningSegments(); for (MiningSegment segment : segments) { if (segment.getModel() instanceof Miningmodel) { buildResourcesFromModel(pmml_origin, (Miningmodel) segment.getModel(), resourceList, classLoader, module); } else { resourceList.add(buildResourceFromSegment(pmml_origin, segment, classLoader, module)); } } } } return resourceList; }