assertEquals(NUM_FEATURES, clusteringModel.getClusteringFields().size()); assertEquals(ComparisonMeasure.Kind.DISTANCE, clusteringModel.getComparisonMeasure().getKind()); assertEquals(NUM_FEATURES, clusteringModel.getClusters().get(0).getArray().getN().intValue()); for (Cluster cluster : clusteringModel.getClusters()) {
@Override protected <V extends Number> Map<FieldName, ClusterAffinityDistribution<V>> evaluateClustering(ValueFactory<V> valueFactory, EvaluationContext context){ ClusteringModel clusteringModel = getModel(); ComparisonMeasure comparisonMeasure = clusteringModel.getComparisonMeasure(); List<ClusteringField> clusteringFields = getCenterClusteringFields(); List<FieldValue> values = new ArrayList<>(clusteringFields.size()); for(int i = 0, max = clusteringFields.size(); i < max; i++){ ClusteringField clusteringField = clusteringFields.get(i); FieldName name = clusteringField.getField(); if(name == null){ throw new MissingAttributeException(clusteringField, PMMLAttributes.CLUSTERINGFIELD_FIELD); } FieldValue value = context.evaluate(name); values.add(value); } ClusterAffinityDistribution<V> result; Measure measure = MeasureUtil.ensureMeasure(comparisonMeasure); if(measure instanceof Similarity){ result = evaluateSimilarity(valueFactory, comparisonMeasure, clusteringFields, values); } else if(measure instanceof Distance){ result = evaluateDistance(valueFactory, comparisonMeasure, clusteringFields, values); } else { throw new UnsupportedElementException(measure); } // "For clustering models, the identifier of the winning cluster is returned as the predictedValue" result.computeResult(DataType.STRING); return Collections.singletonMap(getTargetName(), result); }
public ClusteringModelEvaluator(PMML pmml, ClusteringModel clusteringModel){ super(pmml, clusteringModel); ComparisonMeasure comparisonMeasure = clusteringModel.getComparisonMeasure(); if(comparisonMeasure == null){ throw new MissingElementException(clusteringModel, PMMLElements.CLUSTERINGMODEL_COMPARISONMEASURE); } ClusteringModel.ModelClass modelClass = clusteringModel.getModelClass(); switch(modelClass){ case CENTER_BASED: break; default: throw new UnsupportedAttributeException(clusteringModel, modelClass); } CenterFields centerFields = clusteringModel.getCenterFields(); if(centerFields != null){ throw new UnsupportedElementException(centerFields); } if(!clusteringModel.hasClusteringFields()){ throw new MissingElementException(clusteringModel, PMMLElements.CLUSTERINGMODEL_CLUSTERINGFIELDS); } // End if if(!clusteringModel.hasClusters()){ throw new MissingElementException(clusteringModel, PMMLElements.CLUSTERINGMODEL_CLUSTERS); } Targets targets = clusteringModel.getTargets(); if(targets != null){ throw new MisplacedElementException(targets); } }
@Override public VisitorAction accept(Visitor visitor) { VisitorAction status = visitor.visit(this); if (status == VisitorAction.CONTINUE) { visitor.pushParent(this); if ((status == VisitorAction.CONTINUE)&&hasExtensions()) { status = PMMLObject.traverse(visitor, getExtensions()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getMiningSchema(), getOutput(), getModelStats(), getModelExplanation(), getLocalTransformations(), getComparisonMeasure()); } if ((status == VisitorAction.CONTINUE)&&hasClusteringFields()) { status = PMMLObject.traverse(visitor, getClusteringFields()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getCenterFields(), getMissingValueWeights()); } if ((status == VisitorAction.CONTINUE)&&hasClusters()) { status = PMMLObject.traverse(visitor, getClusters()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getModelVerification()); } visitor.popParent(); } if (status == VisitorAction.TERMINATE) { return VisitorAction.TERMINATE; } return VisitorAction.CONTINUE; }
@Override public VisitorAction accept(Visitor visitor) { VisitorAction status = visitor.visit(this); if (status == VisitorAction.CONTINUE) { visitor.pushParent(this); if ((status == VisitorAction.CONTINUE)&&hasExtensions()) { status = PMMLObject.traverse(visitor, getExtensions()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getMiningSchema(), getOutput(), getModelStats(), getModelExplanation(), getLocalTransformations(), getComparisonMeasure()); } if ((status == VisitorAction.CONTINUE)&&hasClusteringFields()) { status = PMMLObject.traverse(visitor, getClusteringFields()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getCenterFields(), getMissingValueWeights()); } if ((status == VisitorAction.CONTINUE)&&hasClusters()) { status = PMMLObject.traverse(visitor, getClusters()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getModelVerification()); } visitor.popParent(); } if (status == VisitorAction.TERMINATE) { return VisitorAction.TERMINATE; } return VisitorAction.CONTINUE; }