package edu.stanford.nlp.coref.hybrid.rf;
import java.io.Serializable;
import edu.stanford.nlp.ling.RVFDatum;
import edu.stanford.nlp.stats.Counter;
import edu.stanford.nlp.util.Index;
public class DecisionTree implements Serializable {
private static final long serialVersionUID = -4198470422641238244L;
public DecisionTreeNode root;
public Index<String> featureIndex;
public DecisionTree(Index<String> featureIndex) {
this.featureIndex = featureIndex;
this.root = null;
}
public double probabilityOfTrue(RVFDatum<Boolean, String> datum) {
return probabilityOfTrue(datum.asFeaturesCounter());
}
public double probabilityOfTrue(Counter<String> features) {
DecisionTreeNode cur = root;
while(!cur.isLeaf()) {
double value = features.getCount(featureIndex.get(cur.idx));
cur = (value < cur.split)? cur.children[0] : cur.children[1];
}
return (cur.split); // at the leaf node, idx represents true or false. 1: true, 0: false, split represents probability of true.
}
}