@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);
}
result.computeResult(DataType.STRING);
return Collections.singletonMap(getTargetName(), result);
}