public String getName () { // String prefix; if (parent == null) return "root"; else if (parent.parent == null) { if (parent.getFeaturePresentChild() == this) return dictionary.lookupObject(parent.featureIndex).toString(); else { assert (dictionary != null); assert (dictionary.lookupObject(parent.featureIndex) != null); return "!" + dictionary.lookupObject(parent.featureIndex).toString(); } } else { if (parent.getFeaturePresentChild() == this) return parent.getName() + "&" + dictionary.lookupObject(parent.featureIndex).toString(); else return parent.getName() + "&!" + dictionary.lookupObject(parent.featureIndex).toString(); } }
double classEntropyThreshold) if (!isRoot() && (isLeaf() || withInteriorNodes) && labelEntropy < classEntropyThreshold) { String name = getName(); logger.info("Trying to add feature "+name); child0.induceFeatures (afv, featuresAlreadyThere, perClassFeaturesAlreadyThere, newFeatureSelection, perClassNewFeatureSelection, withInteriorNodes, addPerClassFeatures, classEntropyThreshold); if (child1 != null && featurePresent) child1.induceFeatures (afv, featuresAlreadyThere, perClassFeaturesAlreadyThere, newFeatureSelection, perClassNewFeatureSelection, withInteriorNodes, addPerClassFeatures, classEntropyThreshold);
double classEntropyThreshold) if (!isRoot() && (isLeaf() || withInteriorNodes) && labelEntropy < classEntropyThreshold) { String name = getName(); logger.info("Trying to add feature "+name); child0.induceFeatures (afv, featuresAlreadyThere, perClassFeaturesAlreadyThere, newFeatureSelection, perClassNewFeatureSelection, withInteriorNodes, addPerClassFeatures, classEntropyThreshold); if (child1 != null && featurePresent) child1.induceFeatures (afv, featuresAlreadyThere, perClassFeaturesAlreadyThere, newFeatureSelection, perClassNewFeatureSelection, withInteriorNodes, addPerClassFeatures, classEntropyThreshold);
double classEntropyThreshold) if (!isRoot() && (isLeaf() || withInteriorNodes) && labelEntropy < classEntropyThreshold) { String name = getName(); logger.info("Trying to add feature "+name); child0.induceFeatures (afv, featuresAlreadyThere, perClassFeaturesAlreadyThere, newFeatureSelection, perClassNewFeatureSelection, withInteriorNodes, addPerClassFeatures, classEntropyThreshold); if (child1 != null && featurePresent) child1.induceFeatures (afv, featuresAlreadyThere, perClassFeaturesAlreadyThere, newFeatureSelection, perClassNewFeatureSelection, withInteriorNodes, addPerClassFeatures, classEntropyThreshold);
public void split (FeatureSelection fs) { if (ilist == null) throw new IllegalStateException ("Frozen. Cannot split."); InstanceList ilist0 = new InstanceList (ilist.getPipe()); InstanceList ilist1 = new InstanceList (ilist.getPipe()); for (int i = 0; i < ilist.size(); i++) { Instance instance = ilist.get(i); FeatureVector fv = (FeatureVector) instance.getData (); // xxx What test should this be? What to do with negative values? // Whatever is decided here should also go in InfoGain.calcInfoGains() if (fv.value (featureIndex) != 0) { //System.out.println ("list1 add "+instance.getUri()+" weight="+ilist.getInstanceWeight(i)); ilist1.add (instance, ilist.getInstanceWeight(i)); } else { //System.out.println ("list0 add "+instance.getUri()+" weight="+ilist.getInstanceWeight(i)); ilist0.add (instance, ilist.getInstanceWeight(i)); } } logger.info("child0="+ilist0.size()+" child1="+ilist1.size()); child0 = new Node (ilist0, this, fs); child1 = new Node (ilist1, this, fs); }
public void split (FeatureSelection fs) { if (ilist == null) throw new IllegalStateException ("Frozen. Cannot split."); InstanceList ilist0 = new InstanceList (ilist.getPipe()); InstanceList ilist1 = new InstanceList (ilist.getPipe()); for (int i = 0; i < ilist.size(); i++) { Instance instance = ilist.get(i); FeatureVector fv = (FeatureVector) instance.getData (); // xxx What test should this be? What to do with negative values? // Whatever is decided here should also go in InfoGain.calcInfoGains() if (fv.value (featureIndex) != 0) { //System.out.println ("list1 add "+instance.getUri()+" weight="+ilist.getInstanceWeight(i)); ilist1.add (instance, ilist.getInstanceWeight(i)); } else { //System.out.println ("list0 add "+instance.getUri()+" weight="+ilist.getInstanceWeight(i)); ilist0.add (instance, ilist.getInstanceWeight(i)); } } logger.info("child0="+ilist0.size()+" child1="+ilist1.size()); child0 = new Node (ilist0, this, fs); child1 = new Node (ilist1, this, fs); }
public void split (FeatureSelection fs) { if (ilist == null) throw new IllegalStateException ("Frozen. Cannot split."); InstanceList ilist0 = new InstanceList (ilist.getPipe()); InstanceList ilist1 = new InstanceList (ilist.getPipe()); for (int i = 0; i < ilist.size(); i++) { Instance instance = ilist.get(i); FeatureVector fv = (FeatureVector) instance.getData (); // xxx What test should this be? What to do with negative values? // Whatever is decided here should also go in InfoGain.calcInfoGains() if (fv.value (featureIndex) != 0) { //System.out.println ("list1 add "+instance.getUri()+" weight="+ilist.getInstanceWeight(i)); ilist1.add (instance, ilist.getInstanceWeight(i)); } else { //System.out.println ("list0 add "+instance.getUri()+" weight="+ilist.getInstanceWeight(i)); ilist0.add (instance, ilist.getInstanceWeight(i)); } } logger.info("child0="+ilist0.size()+" child1="+ilist1.size()); child0 = new Node (ilist0, this, fs); child1 = new Node (ilist1, this, fs); }
public String getName () { // String prefix; if (parent == null) return "root"; else if (parent.parent == null) { if (parent.getFeaturePresentChild() == this) return dictionary.lookupObject(parent.featureIndex).toString(); else { assert (dictionary != null); assert (dictionary.lookupObject(parent.featureIndex) != null); return "!" + dictionary.lookupObject(parent.featureIndex).toString(); } } else { if (parent.getFeaturePresentChild() == this) return parent.getName() + "&" + dictionary.lookupObject(parent.featureIndex).toString(); else return parent.getName() + "&!" + dictionary.lookupObject(parent.featureIndex).toString(); } }
public String getName () { // String prefix; if (parent == null) return "root"; else if (parent.parent == null) { if (parent.getFeaturePresentChild() == this) return dictionary.lookupObject(parent.featureIndex).toString(); else { assert (dictionary != null); assert (dictionary.lookupObject(parent.featureIndex) != null); return "!" + dictionary.lookupObject(parent.featureIndex).toString(); } } else { if (parent.getFeaturePresentChild() == this) return parent.getName() + "&" + dictionary.lookupObject(parent.featureIndex).toString(); else return parent.getName() + "&!" + dictionary.lookupObject(parent.featureIndex).toString(); } }
public void induceFeatures (InstanceList ilist, boolean withFeatureShrinkage, boolean inducePerClassFeatures) { if (inducePerClassFeatures) { int numClasses = ilist.getTargetAlphabet().size(); // int numFeatures = ilist.getDataAlphabet().size(); FeatureSelection[] pcfs = new FeatureSelection[numClasses]; for (int j = 0; j < numClasses; j++) pcfs[j] = (FeatureSelection) ilist.getPerLabelFeatureSelection()[j].clone(); for (int i = 0; i < ilist.size(); i++) { Object data = ilist.get(i).getData(); AugmentableFeatureVector afv = (AugmentableFeatureVector) data; root.induceFeatures (afv, null, pcfs, ilist.getFeatureSelection(), ilist.getPerLabelFeatureSelection(), withFeatureShrinkage, inducePerClassFeatures, addFeaturesClassEntropyThreshold); } } else { throw new UnsupportedOperationException ("Not yet implemented"); } }
public void induceFeatures (InstanceList ilist, boolean withFeatureShrinkage, boolean inducePerClassFeatures) { if (inducePerClassFeatures) { int numClasses = ilist.getTargetAlphabet().size(); // int numFeatures = ilist.getDataAlphabet().size(); FeatureSelection[] pcfs = new FeatureSelection[numClasses]; for (int j = 0; j < numClasses; j++) pcfs[j] = (FeatureSelection) ilist.getPerLabelFeatureSelection()[j].clone(); for (int i = 0; i < ilist.size(); i++) { Object data = ilist.get(i).getData(); AugmentableFeatureVector afv = (AugmentableFeatureVector) data; root.induceFeatures (afv, null, pcfs, ilist.getFeatureSelection(), ilist.getPerLabelFeatureSelection(), withFeatureShrinkage, inducePerClassFeatures, addFeaturesClassEntropyThreshold); } } else { throw new UnsupportedOperationException ("Not yet implemented"); } }
public void induceFeatures (InstanceList ilist, boolean withFeatureShrinkage, boolean inducePerClassFeatures) { if (inducePerClassFeatures) { int numClasses = ilist.getTargetAlphabet().size(); // int numFeatures = ilist.getDataAlphabet().size(); FeatureSelection[] pcfs = new FeatureSelection[numClasses]; for (int j = 0; j < numClasses; j++) pcfs[j] = (FeatureSelection) ilist.getPerLabelFeatureSelection()[j].clone(); for (int i = 0; i < ilist.size(); i++) { Object data = ilist.get(i).getData(); AugmentableFeatureVector afv = (AugmentableFeatureVector) data; root.induceFeatures (afv, null, pcfs, ilist.getFeatureSelection(), ilist.getPerLabelFeatureSelection(), withFeatureShrinkage, inducePerClassFeatures, addFeaturesClassEntropyThreshold); } } else { throw new UnsupportedOperationException ("Not yet implemented"); } }
public DecisionTree train (InstanceList trainingList) { FeatureSelection selectedFeatures = trainingList.getFeatureSelection(); DecisionTree.Node root = new DecisionTree.Node (trainingList, null, selectedFeatures); splitTree (root, selectedFeatures, 0); root.stopGrowth(); finished = true; System.out.println ("DecisionTree learned:"); root.print(); this.classifier = new DecisionTree (trainingList.getPipe(), root); return classifier; }
public DecisionTree train (InstanceList trainingList) { FeatureSelection selectedFeatures = trainingList.getFeatureSelection(); DecisionTree.Node root = new DecisionTree.Node (trainingList, null, selectedFeatures); splitTree (root, selectedFeatures, 0); root.stopGrowth(); finished = true; System.out.println ("DecisionTree learned:"); root.print(); this.classifier = new DecisionTree (trainingList.getPipe(), root); return classifier; }
protected void splitTree (DecisionTree.Node node, FeatureSelection selectedFeatures, int depth) { if (depth == maxDepth || node.getSplitInfoGain() < minInfoGainSplit) return; logger.info("Splitting feature \""+node.getSplitFeature() +"\" infogain="+node.getSplitInfoGain()); node.split(selectedFeatures); splitTree (node.getFeaturePresentChild(), selectedFeatures, depth+1); splitTree (node.getFeatureAbsentChild(), selectedFeatures, depth+1); }
protected void splitTree (DecisionTree.Node node, FeatureSelection selectedFeatures, int depth) { if (depth == maxDepth || node.getSplitInfoGain() < minInfoGainSplit) return; logger.info("Splitting feature \""+node.getSplitFeature() +"\" infogain="+node.getSplitInfoGain()); node.split(selectedFeatures); splitTree (node.getFeaturePresentChild(), selectedFeatures, depth+1); splitTree (node.getFeatureAbsentChild(), selectedFeatures, depth+1); }
protected void splitTree (DecisionTree.Node node, FeatureSelection selectedFeatures, int depth) { if (depth == maxDepth || node.getSplitInfoGain() < minInfoGainSplit) return; logger.info("Splitting feature \""+node.getSplitFeature() +"\" infogain="+node.getSplitInfoGain()); node.split(selectedFeatures); splitTree (node.getFeaturePresentChild(), selectedFeatures, depth+1); splitTree (node.getFeatureAbsentChild(), selectedFeatures, depth+1); }
public DecisionTree train (InstanceList trainingList) { FeatureSelection selectedFeatures = trainingList.getFeatureSelection(); DecisionTree.Node root = new DecisionTree.Node (trainingList, null, selectedFeatures); splitTree (root, selectedFeatures, 0); root.stopGrowth(); finished = true; System.out.println ("DecisionTree learned:"); root.print(); this.classifier = new DecisionTree (trainingList.getPipe(), root); return classifier; }