@Override
protected <V extends Number> Map<FieldName, ?> evaluateClassification(ValueFactory<V> valueFactory, EvaluationContext context){
TreeModel treeModel = getModel();
TargetField targetField = getTargetField();
Trail trail = new Trail();
Node node = evaluateTree(trail, context);
if(node == null){
return TargetUtil.evaluateClassificationDefault(valueFactory, targetField);
}
if(!node.hasScoreDistributions()){
NodeVote result = createNodeVote(node);
return TargetUtil.evaluateVote(targetField, result);
}
double missingValuePenalty = 1d;
int missingLevels = trail.getMissingLevels();
if(missingLevels > 0){
missingValuePenalty = Math.pow(treeModel.getMissingValuePenalty(), missingLevels);
}
NodeScoreDistribution<V> result = createNodeScoreDistribution(valueFactory, node, missingValuePenalty);
return TargetUtil.evaluateClassification(targetField, result);
}