📄 decorate.java
字号:
/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* * Decorate.java * Copyright (C) 2002 Prem Melville * */package weka.classifiers.meta;import weka.classifiers.*;import java.util.*;import weka.core.*;import weka.experiment.*;/** * DECORATE is a meta-learner for building diverse ensembles of * classifiers by using specially constructed artificial training * examples. Comprehensive experiments have demonstrated that this * technique is consistently more accurate than the base classifier, * Bagging and Random Forests. Decorate also obtains higher accuracy than * Boosting on small training sets, and achieves comparable performance * on larger training sets. For more * details see: <p> * * Prem Melville and Raymond J. Mooney. <i>Constructing diverse * classifier ensembles using artificial training examples.</i> * Proceedings of the Seventeeth International Joint Conference on * Artificial Intelligence 2003.<p> * * Prem Melville and Raymond J. Mooney. <i>Creating diversity in ensembles using artificial data.</i> * Journal of Information Fusion.<BR><BR> * * Valid options are:<p> * * -D <br> * Turn on debugging output.<p> * * -W classname <br> * Specify the full class name of a weak classifier as the basis for * Decorate (default weka.classifiers.trees.j48.J48()).<p> * * -I num <br> * Specify the desired size of the committee (default 15). <p> * * -M iterations <br> * Set the maximum number of Decorate iterations (default 50). <p> * * -S seed <br> * Seed for random number generator. (default 0).<p> * * -R factor <br> * Factor that determines number of artificial examples to generate. <p> * * Options after -- are passed to the designated classifier.<p> * * @author Prem Melville (melville@cs.utexas.edu) * @version $Revision: 1.9 $ */public class Decorate extends EnsembleClassifier implements OptionHandler{ /** Set to true to get debugging output. */ protected boolean m_Debug = false; /** The model base classifier to use. */ protected Classifier m_Classifier = new weka.classifiers.trees.j48.J48(); /** Vector of classifiers that make up the committee/ensemble. */ protected Vector m_Committee = null; /** The desired ensemble size. */ protected int m_DesiredSize = 15; /** The maximum number of Decorate iterations to run. */ protected int m_NumIterations = 50; /** The seed for random number generation. */ protected int m_Seed = 0; /** Amount of artificial/random instances to use - specified as a fraction of the training data size. */ protected double m_ArtSize = 1.0 ; /** The random number generator. */ protected Random m_Random = new Random(0); /** Attribute statistics - used for generating artificial examples. */ protected Vector m_AttributeStats = null; /** * Returns an enumeration describing the available options * * @return an enumeration of all the available options */ public Enumeration listOptions() { Vector newVector = new Vector(8); newVector.addElement(new Option( "\tTurn on debugging output.", "D", 0, "-D")); newVector.addElement(new Option( "\tDesired size of ensemble.\n" + "\t(default 15)", "I", 1, "-I")); newVector.addElement(new Option( "\tMaximum number of Decorate iterations.\n" + "\t(default 50)", "M", 1, "-M")); newVector.addElement(new Option( "\tFull name of base classifier.\n" + "\t(default weka.classifiers.trees.j48.J48)", "W", 1, "-W")); newVector.addElement(new Option( "\tSeed for random number generator.\n" +"\tIf set to -1, use a random seed.\n" + "\t(default 0)", "S", 1, "-S")); newVector.addElement(new Option( "\tFactor that determines number of artificial examples to generate.\n" +"\tSpecified proportional to training set size.\n" + "\t(default 1.0)", "R", 1, "-R")); if ((m_Classifier != null) && (m_Classifier instanceof OptionHandler)) { newVector.addElement(new Option( "", "", 0, "\nOptions specific to classifier " + m_Classifier.getClass().getName() + ":")); Enumeration enum = ((OptionHandler)m_Classifier).listOptions(); while (enum.hasMoreElements()) { newVector.addElement(enum.nextElement()); } } return newVector.elements(); } /** * Parses a given list of options. Valid options are:<p> * * -D <br> * Turn on debugging output.<p> * * -W classname <br> * Specify the full class name of a weak classifier as the basis for * Decorate (required).<p> * * -I num <br> * Specify the desired size of the committee (default 15). <p> * * -M iterations <br> * Set the maximum number of Decorate iterations (default 50). <p> * * -S seed <br> * Seed for random number generator. (default 0).<p> * * -R factor <br> * Factor that determines number of artificial examples to generate. <p> * * Options after -- are passed to the designated classifier.<p> * * @param options the list of options as an array of strings * @exception Exception if an option is not supported */ public void setOptions(String[] options) throws Exception { setDebug(Utils.getFlag('D', options)); String desiredSize = Utils.getOption('I', options); if (desiredSize.length() != 0) { setDesiredSize(Integer.parseInt(desiredSize)); } else { setDesiredSize(15); } String maxIterations = Utils.getOption('M', options); if (maxIterations.length() != 0) { setNumIterations(Integer.parseInt(maxIterations)); } else { setNumIterations(50); } String seed = Utils.getOption('S', options); if (seed.length() != 0) { setSeed(Integer.parseInt(seed)); } else { setSeed(0); } String artSize = Utils.getOption('R', options); if (artSize.length() != 0) { setArtificialSize(Double.parseDouble(artSize)); } else { setArtificialSize(1.0); } String classifierName = Utils.getOption('W', options); if (classifierName.length() == 0) { throw new Exception("A classifier must be specified with" + " the -W option."); } setClassifier(Classifier.forName(classifierName, Utils.partitionOptions(options))); } /** * Gets the current settings of the Classifier. * * @return an array of strings suitable for passing to setOptions */ public String [] getOptions() { String [] classifierOptions = new String [0]; if ((m_Classifier != null) && (m_Classifier instanceof OptionHandler)) { classifierOptions = ((OptionHandler)m_Classifier).getOptions(); } String [] options = new String [classifierOptions.length + 12]; int current = 0; if (getDebug()) { options[current++] = "-D"; } options[current++] = "-S"; options[current++] = "" + getSeed(); options[current++] = "-I"; options[current++] = "" + getDesiredSize(); options[current++] = "-M"; options[current++] = "" + getNumIterations(); options[current++] = "-R"; options[current++] = "" + getArtificialSize(); if (getClassifier() != null) { options[current++] = "-W"; options[current++] = getClassifier().getClass().getName(); } options[current++] = "--"; System.arraycopy(classifierOptions, 0, options, current, classifierOptions.length); current += classifierOptions.length; while (current < options.length) { options[current++] = ""; } return options; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in the explorer/experimenter gui */ public String desiredSizeTipText() { return "the desired number of member classifiers in the Decorate ensemble. Decorate may terminate " +"before this size is reached (depending on the value of numIterations). " +"Larger ensemble sizes usually lead to more accurate models, but increases " +"training time and model complexity."; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in the explorer/experimenter gui */ public String numIterationsTipText() { return "the maximum number of Decorate iterations to run. Each iteration generates a classifier, " +"but does not necessarily add it to the ensemble. Decorate stops when the desired ensemble " +"size is reached. This parameter should be greater than " +"equal to the desiredSize. If the desiredSize is not being reached it may help to " +"increase this value."; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in the explorer/experimenter gui */ public String artificialSizeTipText() { return "determines the number of artificial examples to use during training. Specified as " +"a proportion of the training data. Higher values can increase ensemble diversity."; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in the explorer/experimenter gui */ public String seedTipText() { return "seed for random number generator used for creating artificial data." +" Set to -1 to use a random seed."; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in the explorer/experimenter guib */ public String classifierTipText() { return "the desired base learner for the ensemble."; } /** * Returns a string describing classifier * @return a description suitable for * displaying in the explorer/experimenter gui */ public String globalInfo() { return "DECORATE is a meta-learner for building diverse ensembles of " +"classifiers by using specially constructed artificial training " +"examples. Comprehensive experiments have demonstrated that this " +"technique is consistently more accurate than the base classifier, Bagging and Random Forests." +"Decorate also obtains higher accuracy than Boosting on small training sets, and achieves " +"comparable performance on larger training sets. " +"For more details see: P. Melville & R. J. Mooney. Constructing diverse classifier ensembles " +"using artificial training examples (IJCAI 2003).\n" +"P. Melville & R. J. Mooney. Creating diversity in ensembles using artificial data (submitted)."; } /** * Set debugging mode * * @param debug true if debug output should be printed */ public void setDebug(boolean debug) { m_Debug = debug; } /** * Get whether debugging is turned on * * @return true if debugging output is on */ public boolean getDebug() { return m_Debug; } /** * Set the base classifier for Decorate. * * @param newClassifier the Classifier to use. */ public void setClassifier(Classifier newClassifier) { m_Classifier = newClassifier; } /** * Get the classifier used as the base classifier * * @return the classifier used as the classifier */ public Classifier getClassifier() { return m_Classifier; } /** * Factor that determines number of artificial examples to generate. * * @return factor that determines number of artificial examples to generate */ public double getArtificialSize() { return m_ArtSize; } /** * Sets factor that determines number of artificial examples to generate. * * @param newwArtSize factor that determines number of artificial examples to generate */ public void setArtificialSize(double newArtSize) { m_ArtSize = newArtSize; } /** * Gets the desired size of the committee. * * @return the desired size of the committee */ public int getDesiredSize() { return m_DesiredSize; } /** * Sets the desired size of the committee. * * @param newDesiredSize the desired size of the committee
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -