package edu.cmu.minorthird.classify.multi; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import edu.cmu.minorthird.classify.Feature; import edu.cmu.minorthird.classify.Instance; import edu.cmu.minorthird.util.UnionIterator; import edu.cmu.minorthird.util.gui.Viewer; /** * An instance that has predicted values from each dimension added as features * * @author Cameron Williams */ public class InstanceFromPrediction implements Instance{ private Instance instance; private Set<Feature> history; /** * @param instance - the instance to extend * @param previousLabels - element k is the classLabel of the example * (k+1) positions before this instance in the sequence. */ public InstanceFromPrediction(Instance instance,String[] previousLabels){ this.instance=instance; history=new HashSet<Feature>(); for(int i=0;i<previousLabels.length;i++){ history.add(new Feature(new String[]{"Predicted Label for Dimension: "+i, previousLabels[i]})); } } /** Return the wrapped instance. */ public Instance asPlainInstance(){ return instance; } // // delegate to wrapped instance // @Override final public Object getSource(){ return instance.getSource(); } @Override final public String getSubpopulationId(){ return instance.getSubpopulationId(); } @Override final public Iterator<Feature> numericFeatureIterator(){ return instance.numericFeatureIterator(); } // // extend the binary feature set // @Override final public Iterator<Feature> binaryFeatureIterator(){ return new UnionIterator<Feature>(history.iterator(),instance.binaryFeatureIterator()); } @Override final public Iterator<Feature> featureIterator(){ return new UnionIterator<Feature>(history.iterator(),instance.featureIterator()); } @Override final public int numFeatures(){ return history.size()+instance.numFeatures(); } @Override final public double getWeight(Feature f){ if(history.contains(f)) return 1.0; else return instance.getWeight(f); } @Override public String toString(){ return "[instFromPrediction "+history+" "+instance+"]"; } @Override final public Viewer toGUI(){ return new GUI.InstanceViewer(this); } }