|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectweka.classifiers.Classifier
weka.classifiers.trees.ADTree
Class for generating an alternating decision tree. The basic algorithm is based on:
Freund, Y., Mason, L.: The alternating decision tree learning algorithm. Proceeding of the Sixteenth International Conference on Machine Learning, Bled, Slovenia, (1999) 124-133.
This version currently only supports two-class problems. The number of boosting iterations needs to be manually tuned to suit the dataset and the desired complexity/accuracy tradeoff. Induction of the trees has been optimized, and heuristic search methods have been introduced to speed learning.Valid options are:
-B num
Set the number of boosting iterations
(default 10)
-E num
Set the nodes to expand: -3(all), -2(weight), -1(z_pure), >=0 seed for random walk
(default -3)
-D
Save the instance data with the model
Field Summary | |
protected int |
m_boostingIterations
Option - the number of boosting iterations o perform |
protected int |
m_examplesCounted
Statistics - the number of instances processed during search |
protected int |
m_lastAddedSplitNum
The number of the last splitter added to the tree |
protected ReferenceInstances |
m_negTrainInstances
The training instances with negative class - referencing the training dataset |
protected int |
m_nodesExpanded
Statistics - the number of prediction nodes investigated during search |
protected int[] |
m_nominalAttIndices
An array containing the inidices to the nominal attributes in the data |
protected int[] |
m_numericAttIndices
An array containing the inidices to the numeric attributes in the data |
protected ReferenceInstances |
m_posTrainInstances
The training instances with positive class - referencing the training dataset |
protected java.util.Random |
m_random
The random number generator - used for the random search heuristic |
protected int |
m_randomSeed
Option - the seed to use for a random search |
protected PredictionNode |
m_root
The root of the tree |
protected boolean |
m_saveInstanceData
Option - whether the tree should remember the instance data |
protected PredictionNode |
m_search_bestInsertionNode
The best node to insert under, as found so far by the latest search |
protected Instances |
m_search_bestPathNegInstances
The negative instances that apply to the best path found so far |
protected Instances |
m_search_bestPathPosInstances
The positive instances that apply to the best path found so far |
protected Splitter |
m_search_bestSplitter
The best splitter to insert, as found so far by the latest search |
protected double |
m_search_smallestZ
The smallest Z value found so far by the latest search |
protected int |
m_searchPath
Option - the search mode |
protected Instances |
m_trainInstances
The instances used to train the tree |
protected double |
m_trainTotalWeight
The total weight of the instances - used to speed Z calculations |
static int |
SEARCHPATH_ALL
The search modes |
static int |
SEARCHPATH_HEAVIEST
|
static int |
SEARCHPATH_RANDOM
|
static int |
SEARCHPATH_ZPURE
|
static Tag[] |
TAGS_SEARCHPATH
|
Fields inherited from class weka.classifiers.Classifier |
m_Debug |
Fields inherited from interface weka.core.Drawable |
BayesNet, NOT_DRAWABLE, TREE |
Constructor Summary | |
ADTree()
|
Method Summary | |
private double[] |
attributeValueWeights(Instances instances,
int attIndex)
Simultanously sum the weights of all attribute values for all instances. |
void |
boost()
Performs a single boosting iteration, using two-class optimized method. |
void |
buildClassifier(Instances instances)
Builds a classifier for a set of instances. |
private double |
calcPredictionValue(Instances posInstances,
Instances negInstances)
Calculates the prediction value used for a particular set of instances. |
private double |
calcZpure(Instances posInstances,
Instances negInstances)
Calculates the Z-pure value for a particular set of instances. |
java.lang.Object |
clone()
Creates a clone that is identical to the current tree, but is independent. |
private double |
conditionedZOnRows(double[][] distribution)
Calculates the Z-value from the rows of a weight distribution array. |
double[] |
distributionForInstance(Instance instance)
Returns the class probability distribution for an instance. |
void |
done()
Frees memory that is no longer needed for a final model - will no longer be able to increment the classifier after calling this. |
java.util.Enumeration |
enumerateMeasures()
Returns an enumeration of the additional measure names. |
private void |
evaluateNominalSplitSingle(int attIndex,
PredictionNode currentNode,
Instances posInstances,
Instances negInstances)
Investigates the option of introducing a nominal split under currentNode. |
private void |
evaluateNumericSplitSingle(int attIndex,
PredictionNode currentNode,
Instances posInstances,
Instances negInstances,
Instances allInstances)
Investigates the option of introducing a two-way numeric split under currentNode. |
private double[] |
findLowestZNominalSplit(Instances posInstances,
Instances negInstances,
int attIndex)
Finds the nominal attribute value to split on that results in the lowest Z-value. |
private double[] |
findLowestZNumericSplit(Instances instances,
int attIndex)
Finds the numeric split-point that results in the lowest Z-value. |
private void |
generateAttributeIndicesSingle()
Generates the m_nominalAttIndices and m_numericAttIndices arrays to index the respective attribute types in the training data. |
double |
getMeasure(java.lang.String additionalMeasureName)
Returns the value of the named measure. |
int |
getNumOfBoostingIterations()
Gets the number of boosting iterations. |
java.lang.String[] |
getOptions()
Gets the current settings of ADTree. |
protected int |
getRandom(int max)
Gets the next random value. |
int |
getRandomSeed()
Gets random seed for a random walk. |
boolean |
getSaveInstanceData()
Gets whether the tree is to save instance data. |
SelectedTag |
getSearchPath()
Gets the method of searching the tree for a new insertion. |
java.lang.String |
globalInfo()
Returns a string describing classifier |
private void |
goDownAllPathsSingle(PredictionNode currentNode,
Instances posInstances,
Instances negInstances)
Continues single (two-class optimized) search by investigating every node in the subtree under currentNode. |
private void |
goDownHeaviestPathSingle(PredictionNode currentNode,
Instances posInstances,
Instances negInstances)
Continues single (two-class optimized) search by investigating only the path with the most heavily weighted instances. |
private void |
goDownRandomPathSingle(PredictionNode currentNode,
Instances posInstances,
Instances negInstances)
Continues single (two-class optimized) search by investigating a random path. |
private void |
goDownZpurePathSingle(PredictionNode currentNode,
Instances posInstances,
Instances negInstances)
Continues single (two-class optimized) search by investigating only the path with the best Z-pure value at each branch. |
java.lang.String |
graph()
Returns graph describing the tree. |
protected void |
graphTraverse(PredictionNode currentNode,
java.lang.StringBuffer text,
int splitOrder,
int predOrder,
Instances instances)
Traverses the tree, graphing each node. |
int |
graphType()
Returns the type of graph this classifier represents. |
void |
initClassifier(Instances instances)
Sets up the tree ready to be trained, using two-class optimized method. |
java.lang.String |
legend()
Returns the legend of the tree, describing how results are to be interpreted. |
java.util.Enumeration |
listOptions()
Returns an enumeration describing the available options.. |
static void |
main(java.lang.String[] argv)
Main method for testing this class. |
double |
measureExamplesProcessed()
Returns the number of examples "counted". |
double |
measureNodesExpanded()
Returns the number of nodes expanded. |
double |
measureNumLeaves()
Calls measure function for leaf size - the number of prediction nodes. |
double |
measureNumPredictionLeaves()
Calls measure function for prediction leaf size - the number of prediction nodes without children. |
double |
measureTreeSize()
Calls measure function for tree size - the total number of nodes. |
void |
merge(ADTree mergeWith)
Merges two trees together. |
void |
next(int iteration)
Performs one iteration. |
int |
nextSplitAddedOrder()
Returns the next number in the order that splitter nodes have been added to the tree, and records that a new splitter has been added. |
protected int |
numOfAllNodes(PredictionNode root)
Returns the total number of nodes in a tree. |
java.lang.String |
numOfBoostingIterationsTipText()
|
protected int |
numOfPredictionLeafNodes(PredictionNode root)
Returns the number of leaf nodes in a tree - prediction nodes without children. |
protected int |
numOfPredictionNodes(PredictionNode root)
Returns the number of prediction nodes in a tree. |
protected double |
predictionValueForInstance(Instance inst,
PredictionNode currentNode,
double currentValue)
Returns the class prediction value (vote) for an instance. |
java.lang.String |
randomSeedTipText()
|
java.lang.String |
saveInstanceDataTipText()
|
private void |
searchForBestTestSingle()
Performs a search for the best test (splitter) to add to the tree, by aiming to minimize the Z value. |
private void |
searchForBestTestSingle(PredictionNode currentNode,
Instances posInstances,
Instances negInstances)
Recursive function that carries out search for the best test (splitter) to add to this part of the tree, by aiming to minimize the Z value. |
java.lang.String |
searchPathTipText()
|
void |
setNumOfBoostingIterations(int b)
Sets the number of boosting iterations. |
void |
setOptions(java.lang.String[] options)
Parses a given list of options. |
void |
setRandomSeed(int seed)
Sets random seed for a random walk. |
void |
setSaveInstanceData(boolean v)
Sets whether the tree is to save instance data. |
void |
setSearchPath(SelectedTag newMethod)
Sets the method of searching the tree for a new insertion. |
java.lang.String |
toString()
Returns a description of the classifier. |
protected java.lang.String |
toString(PredictionNode currentNode,
int level)
Traverses the tree, forming a string that describes it. |
private void |
updateWeights(Instances posInstances,
Instances negInstances,
double predictionValue)
Updates the weights of instances that are influenced by a new prediction value. |
Methods inherited from class weka.classifiers.Classifier |
classifyInstance, debugTipText, forName, getDebug, makeCopies, setDebug |
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static final int SEARCHPATH_ALL
public static final int SEARCHPATH_HEAVIEST
public static final int SEARCHPATH_ZPURE
public static final int SEARCHPATH_RANDOM
public static final Tag[] TAGS_SEARCHPATH
protected Instances m_trainInstances
protected PredictionNode m_root
protected java.util.Random m_random
protected int m_lastAddedSplitNum
protected int[] m_numericAttIndices
protected int[] m_nominalAttIndices
protected double m_trainTotalWeight
protected ReferenceInstances m_posTrainInstances
protected ReferenceInstances m_negTrainInstances
protected PredictionNode m_search_bestInsertionNode
protected Splitter m_search_bestSplitter
protected double m_search_smallestZ
protected Instances m_search_bestPathPosInstances
protected Instances m_search_bestPathNegInstances
protected int m_nodesExpanded
protected int m_examplesCounted
protected int m_boostingIterations
protected int m_searchPath
protected int m_randomSeed
protected boolean m_saveInstanceData
Constructor Detail |
public ADTree()
Method Detail |
public java.lang.String globalInfo()
public void initClassifier(Instances instances) throws java.lang.Exception
initClassifier
in interface IterativeClassifier
instances
- the instances to train the tree with
java.lang.Exception
- if training data is unsuitablepublic void next(int iteration) throws java.lang.Exception
next
in interface IterativeClassifier
iteration
- the index of the current iteration (0-based)
java.lang.Exception
- if this iteration failspublic void boost() throws java.lang.Exception
java.lang.Exception
- if try to boost without setting up tree first or there are no
instances to train withprivate void generateAttributeIndicesSingle()
private void searchForBestTestSingle() throws java.lang.Exception
java.lang.Exception
- if search failsprivate void searchForBestTestSingle(PredictionNode currentNode, Instances posInstances, Instances negInstances) throws java.lang.Exception
currentNode
- the root of the subtree to be searched, and the current node
being considered as parent of a new splitposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this node
java.lang.Exception
- if search failsprivate void goDownAllPathsSingle(PredictionNode currentNode, Instances posInstances, Instances negInstances) throws java.lang.Exception
currentNode
- the root of the subtree to be searchedposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this node
java.lang.Exception
- if search failsprivate void goDownHeaviestPathSingle(PredictionNode currentNode, Instances posInstances, Instances negInstances) throws java.lang.Exception
currentNode
- the root of the subtree to be searchedposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this node
java.lang.Exception
- if search failsprivate void goDownZpurePathSingle(PredictionNode currentNode, Instances posInstances, Instances negInstances) throws java.lang.Exception
currentNode
- the root of the subtree to be searchedposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this node
java.lang.Exception
- if search failsprivate void goDownRandomPathSingle(PredictionNode currentNode, Instances posInstances, Instances negInstances) throws java.lang.Exception
currentNode
- the root of the subtree to be searchedposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this node
java.lang.Exception
- if search failsprivate void evaluateNominalSplitSingle(int attIndex, PredictionNode currentNode, Instances posInstances, Instances negInstances)
attIndex
- index of a nominal attribute to create a split fromcurrentNode
- the parent under which a split is to be consideredposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this nodeprivate void evaluateNumericSplitSingle(int attIndex, PredictionNode currentNode, Instances posInstances, Instances negInstances, Instances allInstances) throws java.lang.Exception
attIndex
- index of a numeric attribute to create a split fromcurrentNode
- the parent under which a split is to be consideredposInstances
- the positive-class instances that apply at this nodenegInstances
- the negative-class instances that apply at this nodeallInstances
- all of the instances the apply at this node (pos+neg combined)
java.lang.Exception
private double calcPredictionValue(Instances posInstances, Instances negInstances)
posInstances
- the positive-class instancesnegInstances
- the negative-class instances
private double calcZpure(Instances posInstances, Instances negInstances)
posInstances
- the positive-class instancesnegInstances
- the negative-class instances
private void updateWeights(Instances posInstances, Instances negInstances, double predictionValue)
posInstances
- positive-class instances to which the prediction value appliesnegInstances
- negative-class instances to which the prediction value appliespredictionValue
- the new prediction valueprivate double[] findLowestZNominalSplit(Instances posInstances, Instances negInstances, int attIndex)
posInstances
- the positive-class instances to splitnegInstances
- the negative-class instances to splitattIndex
- the index of the nominal attribute to find a split for
private double[] attributeValueWeights(Instances instances, int attIndex)
instances
- the instances to get the weights fromattIndex
- index of the attribute to be evaluated
private double[] findLowestZNumericSplit(Instances instances, int attIndex) throws java.lang.Exception
instances
- the instances to find a split forattIndex
- the index of the numeric attribute to find a split for
java.lang.Exception
private double conditionedZOnRows(double[][] distribution)
distribution
- the weight distribution
public double[] distributionForInstance(Instance instance)
distributionForInstance
in class Classifier
instance
- the instance to be classified
protected double predictionValueForInstance(Instance inst, PredictionNode currentNode, double currentValue)
inst
- the instancecurrentNode
- the root of the tree to get the values fromcurrentValue
- the current value before adding the value contained in the
subtree
public java.lang.String toString()
protected java.lang.String toString(PredictionNode currentNode, int level)
currentNode
- the current node under investigationlevel
- the current level in the tree
public int graphType()
graphType
in interface Drawable
public java.lang.String graph() throws java.lang.Exception
graph
in interface Drawable
java.lang.Exception
- if something goes wrongprotected void graphTraverse(PredictionNode currentNode, java.lang.StringBuffer text, int splitOrder, int predOrder, Instances instances) throws java.lang.Exception
currentNode
- the currentNode under investigationtext
- the string built so farsplitOrder
- the order the parent splitter was added to the treepredOrder
- the order this predictor was added to the split
java.lang.Exception
- if something goes wrongpublic java.lang.String legend()
public java.lang.String numOfBoostingIterationsTipText()
public int getNumOfBoostingIterations()
public void setNumOfBoostingIterations(int b)
b
- the number of boosting iterations to usepublic java.lang.String searchPathTipText()
public SelectedTag getSearchPath()
public void setSearchPath(SelectedTag newMethod)
newMethod
- the new tree searching modepublic java.lang.String randomSeedTipText()
public int getRandomSeed()
public void setRandomSeed(int seed)
public java.lang.String saveInstanceDataTipText()
public boolean getSaveInstanceData()
public void setSaveInstanceData(boolean v)
public java.util.Enumeration listOptions()
listOptions
in interface OptionHandler
listOptions
in class Classifier
public void setOptions(java.lang.String[] options) throws java.lang.Exception
-B num
Set the number of boosting iterations
(default 10)
-E num
Set the nodes to expand: -3(all), -2(weight), -1(z_pure), >=0 seed for random walk
(default -3)
-D
Save the instance data with the model
setOptions
in interface OptionHandler
setOptions
in class Classifier
options
- the list of options as an array of strings
java.lang.Exception
- if an option is not supportedpublic java.lang.String[] getOptions()
getOptions
in interface OptionHandler
getOptions
in class Classifier
public double measureTreeSize()
public double measureNumLeaves()
public double measureNumPredictionLeaves()
public double measureNodesExpanded()
public double measureExamplesProcessed()
public java.util.Enumeration enumerateMeasures()
enumerateMeasures
in interface AdditionalMeasureProducer
public double getMeasure(java.lang.String additionalMeasureName)
getMeasure
in interface AdditionalMeasureProducer
additionalMeasureName
- the name of the measure to query for its value
java.lang.IllegalArgumentException
- if the named measure is not supportedprotected int numOfAllNodes(PredictionNode root)
root
- the root of the tree being measured
protected int numOfPredictionNodes(PredictionNode root)
root
- the root of the tree being measured
protected int numOfPredictionLeafNodes(PredictionNode root)
root
- the root of the tree being measured
protected int getRandom(int max)
max
- the maximum value (+1) to be returned
public int nextSplitAddedOrder()
public void buildClassifier(Instances instances) throws java.lang.Exception
buildClassifier
in class Classifier
instances
- the instances to train the classifier with
java.lang.Exception
- if something goes wrongpublic void done()
done
in interface IterativeClassifier
public java.lang.Object clone()
clone
in interface IterativeClassifier
public void merge(ADTree mergeWith) throws java.lang.Exception
mergeWith
- the tree to merge with
java.lang.Exception
- if merge could not be performedpublic static void main(java.lang.String[] argv)
argv
- the options
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |