package net.varkhan.data.learn.ensemble; import net.varkhan.data.learn.Classifier; import java.util.HashSet; import java.util.Set; /** * <b></b>. * <p/> * * @author varkhan * @date 12/26/13 * @time 6:57 PM */ public class ConsensusClassifier<K,T,C> implements Classifier<K,T,C> { protected final Classifier<K,T,C>[] components; public ConsensusClassifier(Classifier<K,T,C>... components) { this.components = components; } @Override public K invoke(T obs, C ctx) { Set<K> keys = new HashSet<K>(components.length); for(Classifier<K,T,C> c: components) { keys.add(c.invoke(obs, ctx)); } K key = null; double prb = 0; for(K k: keys) { double p = confidence(k, obs, ctx); if(prb<p) { key = k; prb = p; } } return key; } @Override public double confidence(K key, T obs, C ctx) { double p = 1; for(Classifier<K,T,C> c: components) { p *= c.confidence(key, obs, ctx); } return p; } }