/** * Method for building this classifier. * * @param training the data to train with * @throws Exception if the training fails */ public void buildClassifier(Instances training) throws Exception { m_Random = new Random(m_Seed); super.buildClassifier(training); m_Random = null; }
/** * Parses a given list of options. * * <p> * <!-- options-start --> * Valid options are: * * <p> * * <pre> -C <num> * Number of sub-committees. (Default 3)</pre> * * <pre> -P <num> * Percentage of weight mass to base training on. * (default 100, reduce to around 90 speed up)</pre> * * <pre> -Q * Use resampling for boosting.</pre> * * <pre> -S <num> * Random number seed. * (default 1)</pre> * * <pre> -I <num> * Number of iterations. * (default 10)</pre> * * <pre> -D * If set, classifier is run in debug mode and * may output additional info to the console</pre> * * <pre> -W * Full name of base classifier. * (default: weka.classifiers.trees.DecisionStump)</pre> * * <pre> * Options specific to classifier weka.classifiers.trees.DecisionStump: * </pre> * * <pre> -D * If set, classifier is run in debug mode and * may output additional info to the console</pre> * * <!-- options-end --> * Options after -- are passed to the designated classifier. * * <p> * * @param options the list of options as an array of strings * @throws Exception if an option is not supported */ public void setOptions(String[] options) throws Exception { String subcmtyString = Utils.getOption('C', options); if (subcmtyString.length() != 0) { setNumSubCmtys(Integer.parseInt(subcmtyString)); } else { setNumSubCmtys(3); } super.setOptions(options); }
/** * Sets the weights for the next iteration. * * @param training the data to train with * @param reweight the reweighting factor * @throws Exception in case of an error */ protected void setWeights(Instances training, double reweight) throws Exception { int subCmtySize = m_Classifiers.length / m_NumSubCmtys; if ((m_NumIterationsPerformed + 1) % subCmtySize == 0) { if (getDebug()) System.err.println(m_NumIterationsPerformed + " " + subCmtySize); double oldSumOfWeights = training.sumOfWeights(); // Randomly set the weights of the training instances to the poisson distributon for (int i = 0; i < training.numInstances(); i++) { training.instance(i).setWeight(-Math.log((m_Random.nextDouble() * 9999) / 10000)); } // Renormailise weights double sumProbs = training.sumOfWeights(); for (int i = 0; i < training.numInstances(); i++) { training.instance(i).setWeight(training.instance(i).weight() * oldSumOfWeights / sumProbs); } } else { super.setWeights(training, reweight); } }