package quickml.supervised.PredictiveModelsFromPreviousVersionsToBenchMarkAgainst;
import com.google.common.collect.Maps;
import quickml.data.AttributesMap;
import quickml.data.PredictionMap;
import quickml.supervised.PredictiveModelsFromPreviousVersionsToBenchMarkAgainst.oldTree.OldLeaf;
import quickml.supervised.classifier.AbstractClassifier;
import quickml.supervised.PredictiveModelsFromPreviousVersionsToBenchMarkAgainst.oldTree.OldNode;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Created with IntelliJ IDEA.
* User: janie
* Date: 6/26/13
* Time: 3:15 PM
* To change this template use File | Settings | File Templates.
*/
public class OldTree extends AbstractClassifier {
static final long serialVersionUID = 56394564395635672L;
public final OldNode oldNode;
private Set<Serializable> classifications = new HashSet<>();
protected OldTree(OldNode oldNode, Set<Serializable> classifications) {
this.oldNode = oldNode;
this.classifications = classifications;
}
public Set<Serializable> getClassifications() {
return classifications;
}
@Override
public double getProbability(AttributesMap attributes, Serializable classification) {
OldLeaf oldLeaf = oldNode.getLeaf(attributes);
return oldLeaf.getProbability(classification);
}
@Override
public double getProbabilityWithoutAttributes(AttributesMap attributes, Serializable classification, Set<String> attributesToIgnore) {
return oldNode.getProbabilityWithoutAttributes(attributes, classification, attributesToIgnore);
}
@Override
public PredictionMap predict(AttributesMap attributes) {
OldLeaf oldLeaf = oldNode.getLeaf(attributes);
Map<Serializable, Double> probsByClassification = Maps.newHashMap();
for (Serializable classification : oldLeaf.getClassifications()) {
probsByClassification.put(classification, oldLeaf.getProbability(classification));
}
return new PredictionMap(probsByClassification);
}
@Override
public PredictionMap predictWithoutAttributes(AttributesMap attributes, Set<String> attributesToIgnore) {
Map<Serializable, Double> probsByClassification = Maps.newHashMap();
for (Serializable classification : classifications) {
probsByClassification.put(classification, getProbabilityWithoutAttributes(attributes, classification, attributesToIgnore));
}
return new PredictionMap(probsByClassification);
}
@Override
public Serializable getClassificationByMaxProb(AttributesMap attributes) {
OldLeaf oldLeaf = oldNode.getLeaf(attributes);
return oldLeaf.getBestClassification();
}
@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final OldTree oldTree = (OldTree) o;
if (!oldNode.equals(oldTree.oldNode)) return false;
return true;
}
@Override
public int hashCode() {
return oldNode.hashCode();
}
@Override
public String toString() {
StringBuilder dump = new StringBuilder();
oldNode.dump(dump);
return dump.toString();
}
}