001package javax.visrec.ml.classification; 002 003import java.util.HashMap; 004import java.util.Map; 005 006/** 007 * EnsambleClassifier is a group of classifiers that provide common 008 * classification result, which gives better accuracy then each individual 009 * classifier. Usually average or most frequent answer is used as a final result. 010 * 011 * @author Zoran Sevarac 012 * @param <T> The input type which is to be classified. 013 * @param <R> Return type of the classifier. 014 * @since 1.0 015 */ 016public final class EnsambleClassifier<T, R> implements Classifier<T, R> { 017 018 private final Map<String, Classifier<T, R>> classifiers = new HashMap<>(); 019 020 @Override 021 public Map<R, Float> classify(T input) { 022 classifiers.values().stream() // or parallelStream 023 .forEach(c -> c.classify(input)); 024 // get the highest class frequency 025 //.collect(); // get average scores? This method can be overriden, provide default impl here 026 // return merged classification result of all classifiers - mean or most frequent? 027 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 028 } 029 030 // or just provide method for adding swith some intrenal id? 031 public void addClassifier(String classifierId, Classifier<T, R> classifier) { 032 classifiers.put(classifierId, classifier); 033 } 034 035 public Classifier getClassifier(String classiferId) { 036 return classifiers.get(classiferId); 037 } 038 039 public void remove(String classifierId) { 040 classifiers.remove(classifierId); 041 } 042 043}