📄 lmt.java
字号:
if (getErrorOnProbabilities()) {
options[current++] = "-P";
}
options[current++] = "-I";
options[current++] = ""+getNumBoostingIterations();
options[current++] = "-M";
options[current++] = ""+getMinNumInstances();
while (current < options.length) {
options[current++] = "";
}
return options;
}
/**
* Get the value of convertNominal.
*
* @return Value of convertNominal.
*/
public boolean getConvertNominal(){
return m_convertNominal;
}
/**
* Get the value of splitOnResiduals.
*
* @return Value of splitOnResiduals.
*/
public boolean getSplitOnResiduals(){
return m_splitOnResiduals;
}
/**
* Get the value of fastRegression.
*
* @return Value of fastRegression.
*/
public boolean getFastRegression(){
return m_fastRegression;
}
/**
* Get the value of errorOnProbabilities.
*
* @return Value of errorOnProbabilities.
*/
public boolean getErrorOnProbabilities(){
return m_errorOnProbabilities;
}
/**
* Get the value of numBoostingIterations.
*
* @return Value of numBoostingIterations.
*/
public int getNumBoostingIterations(){
return m_numBoostingIterations;
}
/**
* Get the value of minNumInstances.
*
* @return Value of minNumInstances.
*/
public int getMinNumInstances(){
return m_minNumInstances;
}
/**
* Set the value of convertNominal.
*
* @param c Value to assign to convertNominal.
*/
public void setConvertNominal(boolean c){
m_convertNominal = c;
}
/**
* Set the value of splitOnResiduals.
*
* @param c Value to assign to splitOnResiduals.
*/
public void setSplitOnResiduals(boolean c){
m_splitOnResiduals = c;
}
/**
* Set the value of fastRegression.
*
* @param c Value to assign to fastRegression.
*/
public void setFastRegression(boolean c){
m_fastRegression = c;
}
/**
* Set the value of errorOnProbabilities.
*
* @param c Value to assign to errorOnProbabilities.
*/
public void setErrorOnProbabilities(boolean c){
m_errorOnProbabilities = c;
}
/**
* Set the value of numBoostingIterations.
*
* @param c Value to assign to numBoostingIterations.
*/
public void setNumBoostingIterations(int c){
m_numBoostingIterations = c;
}
/**
* Set the value of minNumInstances.
*
* @param c Value to assign to minNumInstances.
*/
public void setMinNumInstances(int c){
m_minNumInstances = c;
}
/**
* Returns the type of graph this classifier
* represents.
* @return Drawable.TREE
*/
public int graphType() {
return Drawable.TREE;
}
/**
* Returns graph describing the tree.
*
* @exception Exception if graph can't be computed
*/
public String graph() throws Exception {
return m_tree.graph();
}
/**
* Returns the size of the tree
* @return the size of the tree
*/
public int measureTreeSize(){
return m_tree.numNodes();
}
/**
* Returns the number of leaves in the tree
* @return the number of leaves in the tree
*/
public int measureNumLeaves(){
return m_tree.numLeaves();
}
/**
* Returns an enumeration of the additional measure names
* @return an enumeration of the measure names
*/
public Enumeration enumerateMeasures() {
Vector newVector = new Vector(2);
newVector.addElement("measureTreeSize");
newVector.addElement("measureNumLeaves");
return newVector.elements();
}
/**
* Returns the value of the named measure
* @param additionalMeasureName the name of the measure to query for its value
* @return the value of the named measure
* @exception IllegalArgumentException if the named measure is not supported
*/
public double getMeasure(String additionalMeasureName) {
if (additionalMeasureName.compareToIgnoreCase("measureTreeSize") == 0) {
return measureTreeSize();
} else if (additionalMeasureName.compareToIgnoreCase("measureNumLeaves") == 0) {
return measureNumLeaves();
} else {
throw new IllegalArgumentException(additionalMeasureName
+ " not supported (LMT)");
}
}
/**
* Returns a string describing classifier
* @return a description suitable for
* displaying in the explorer/experimenter gui
*/
public String globalInfo() {
return "Classifier for building 'logistic model trees', which are classification trees with "
+"logistic regression functions at the leaves. The algorithm can deal with binary and multi-class "
+"target variables, numeric and nominal attributes and missing values. "
+"For more information see: N.Landwehr, M.Hall, E. Frank 'Logistic Model Trees' (ECML 2003).";
}
/**
* Returns the tip text for this property
* @return tip text for this property suitable for
* displaying in the explorer/experimenter gui
*/
public String convertNominalTipText() {
return "Convert all nominal attributes to binary ones before building the tree. "
+"This means that all splits in the final tree will be binary.";
}
/**
* Returns the tip text for this property
* @return tip text for this property suitable for
* displaying in the explorer/experimenter gui
*/
public String splitOnResidualsTipText() {
return "Set splitting criterion based on the residuals of LogitBoost. "
+"There are two possible splitting criteria for LMT: the default is to use the C4.5 "
+"splitting criterion that uses information gain on the class variable. The other splitting "
+"criterion tries to improve the purity in the residuals produces when fitting the logistic "
+"regression functions. The choice of the splitting criterion does not usually affect classification "
+"accuracy much, but can produce different trees.";
}
/**
* Returns the tip text for this property
* @return tip text for this property suitable for
* displaying in the explorer/experimenter gui
*/
public String fastRegressionTipText() {
return "Use heuristic that avoids cross-validating the number of Logit-Boost iterations at every node. "
+"When fitting the logistic regression functions at a node, LMT has to determine the number of LogitBoost "
+"iterations to run. Originally, this number was cross-validated at every node in the tree. "
+"To save time, this heuristic cross-validates the number only once and then uses that number at every "
+"node in the tree. Usually this does not decrease accuracy but improves runtime considerably.";
}
/**
* Returns the tip text for this property
* @return tip text for this property suitable for
* displaying in the explorer/experimenter gui
*/
public String errorOnProbabilitiesTipText() {
return "Minimize error on probabilities instead of misclassification error when cross-validating the number "
+"of LogitBoost iterations. When set, the number of LogitBoost iterations is chosen that minimizes "
+"the root mean squared error instead of the misclassification error.";
}
/**
* Returns the tip text for this property
* @return tip text for this property suitable for
* displaying in the explorer/experimenter gui
*/
public String numBoostingIterationsTipText() {
return "Set a fixed number of iterations for LogitBoost. If >= 0, this sets a fixed number of LogitBoost "
+"iterations that is used everywhere in the tree. If < 0, the number is cross-validated.";
}
/**
* Returns the tip text for this property
* @return tip text for this property suitable for
* displaying in the explorer/experimenter gui
*/
public String minNumInstancesTipText() {
return "Set the minimum number of instances at which a node is considered for splitting. "
+"The default value is 15.";
}
/**
* Main method for testing this class
*
* @param String options
*/
public static void main (String [] argv) throws Exception{
System.out.println(Evaluation.evaluateModel(new LMT(), argv));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -