weka.classifiers.Evaluation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of weka-dev Show documentation
Show all versions of weka-dev Show documentation
The Waikato Environment for Knowledge Analysis (WEKA), a machine
learning workbench. This version represents the developer version, the
"bleeding edge" of development, you could say. New functionality gets added
to this version.
/*
* 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 3 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, see .
*/
/*
* Evaluation.java
* Copyright (C) 2011-2012 University of Waikato, Hamilton, New Zealand
*
*/
package weka.classifiers;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import weka.classifiers.evaluation.AbstractEvaluationMetric;
import weka.classifiers.evaluation.Prediction;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.RevisionHandler;
import weka.core.Summarizable;
/**
* Class for evaluating machine learning models. Delegates to the actual
* implementation in weka.classifiers.evaluation.Evaluation.
*
*
*
* -------------------------------------------------------------------
*
*
* General options when evaluating a learning scheme from the command-line:
*
*
* -t filename
* Name of the file with the training data. (required)
*
*
* -T filename
* Name of the file with the test data. If missing a cross-validation is
* performed.
*
*
* -c index
* Index of the class attribute (1, 2, ...; default: last).
*
*
* -x number
* The number of folds for the cross-validation (default: 10).
*
*
* -no-cv
* No cross validation. If no test file is provided, no evaluation is done.
*
*
* -split-percentage percentage
* Sets the percentage for the train/test set split, e.g., 66.
*
*
* -preserve-order
* Preserves the order in the percentage split instead of randomizing the data
* first with the seed value ('-s').
*
*
* -s seed
* Random number seed for the cross-validation and percentage split (default:
* 1).
*
*
* -m filename
* The name of a file containing a cost matrix.
*
*
* -l filename
* Loads classifier from the given file. In case the filename ends with ".xml",
* a PMML file is loaded or, if that fails, options are loaded from XML.
*
*
* -d filename
* Saves classifier built from the training data into the given file. In case
* the filename ends with ".xml" the options are saved XML, not the model.
*
*
* -v
* Outputs no statistics for the training data.
*
*
* -o
* Outputs statistics only, not the classifier.
*
*
* -i
* Outputs information-retrieval statistics per class.
*
*
* -k
* Outputs information-theoretic statistics.
*
*
* -classifications
* "weka.classifiers.evaluation.output.prediction.AbstractOutput + options"
* Uses the specified class for generating the classification output. E.g.:
* weka.classifiers.evaluation.output.prediction.PlainText or :
* weka.classifiers.evaluation.output.prediction.CSV
*
* -p range
* Outputs predictions for test instances (or the train instances if no test
* instances provided and -no-cv is used), along with the attributes in the
* specified range (and nothing else). Use '-p 0' if no attributes are desired.
*
* Deprecated: use "-classifications ..." instead.
*
*
* -distribution
* Outputs the distribution instead of only the prediction in conjunction with
* the '-p' option (only nominal classes).
*
* Deprecated: use "-classifications ..." instead.
*
*
* -no-predictions
* Turns off the collection of predictions in order to conserve memory.
*
*
* -r
* Outputs cumulative margin distribution (and nothing else).
*
*
* -g
* Only for classifiers that implement "Graphable." Outputs the graph
* representation of the classifier (and nothing else).
*
*
* -xml filename | xml-string
* Retrieves the options from the XML-data instead of the command line.
*
*
* -threshold-file file
* The file to save the threshold data to. The format is determined by the
* extensions, e.g., '.arff' for ARFF format or '.csv' for CSV.
*
*
* -threshold-label label
* The class label to determine the threshold data for (default is the first
* label)
*
*
* -------------------------------------------------------------------
*
*
* Example usage as the main of a classifier (called FunkyClassifier):
*
* public static void main(String [] args) {
* runClassifier(new FunkyClassifier(), args);
* }
*
*
*
* ------------------------------------------------------------------
*
*
* Example usage from within an application:
* Instances trainInstances = ... instances got from somewhere
* Instances testInstances = ... instances got from somewhere
* Classifier scheme = ... scheme got from somewhere
*
* Evaluation evaluation = new Evaluation(trainInstances);
* evaluation.evaluateModel(scheme, testInstances);
* System.out.println(evaluation.toSummaryString());
*
*
*
* @author Eibe Frank ([email protected])
* @author Len Trigg ([email protected])
* @version $Revision: 14449 $
*/
public class Evaluation implements Serializable, Summarizable, RevisionHandler {
/** For serialization */
private static final long serialVersionUID = -170766452472965668L;
public static final String[] BUILT_IN_EVAL_METRICS = weka.classifiers.evaluation.Evaluation.BUILT_IN_EVAL_METRICS;
/** The actual evaluation object that we delegate to */
protected weka.classifiers.evaluation.Evaluation m_delegate;
/**
* Utility method to get a list of the names of all built-in and plugin
* evaluation metrics
*
* @return the complete list of available evaluation metrics
*/
public static List getAllEvaluationMetricNames() {
return weka.classifiers.evaluation.Evaluation.getAllEvaluationMetricNames();
}
public Evaluation(Instances data) throws Exception {
m_delegate = new weka.classifiers.evaluation.Evaluation(data);
}
public Evaluation(Instances data, CostMatrix costMatrix) throws Exception {
m_delegate = new weka.classifiers.evaluation.Evaluation(data, costMatrix);
}
/**
* Returns the header of the underlying dataset.
*
* @return the header information
*/
public Instances getHeader() {
return m_delegate.getHeader();
}
/**
* Returns the list of plugin metrics in use (or null if there are none)
*
* @return the list of plugin metrics
*/
public List getPluginMetrics() {
return m_delegate.getPluginMetrics();
}
/**
* Get the named plugin evaluation metric
*
* @param name the name of the metric (as returned by
* AbstractEvaluationMetric.getName()) or the fully qualified class
* name of the metric to find
*
* @return the metric or null if the metric is not in the list of plugin
* metrics
*/
public AbstractEvaluationMetric getPluginMetric(String name) {
return m_delegate.getPluginMetric(name);
}
/**
* Set a list of the names of metrics to have appear in the output. The
* default is to display all built in metrics and plugin metrics that haven't
* been globally disabled.
*
* @param display a list of metric names to have appear in the output
*/
public void setMetricsToDisplay(List display) {
m_delegate.setMetricsToDisplay(display);
}
/**
* Get a list of the names of metrics to have appear in the output The default
* is to display all built in metrics and plugin metrics that haven't been
* globally disabled.
*
* @return a list of metric names to have appear in the output
*/
public List getMetricsToDisplay() {
return m_delegate.getMetricsToDisplay();
}
/**
* Toggle the output of the metrics specified in the supplied list.
*
* @param metricsToToggle a list of metrics to toggle
*/
public void toggleEvalMetrics(List metricsToToggle) {
m_delegate.toggleEvalMetrics(metricsToToggle);
}
/**
* Sets whether to discard predictions, ie, not storing them for future
* reference via predictions() method in order to conserve memory.
*
* @param value true if to discard the predictions
* @see #predictions()
*/
public void setDiscardPredictions(boolean value) {
m_delegate.setDiscardPredictions(value);
}
/**
* Returns whether predictions are not recorded at all, in order to conserve
* memory.
*
* @return true if predictions are not recorded
* @see #predictions()
*/
public boolean getDiscardPredictions() {
return m_delegate.getDiscardPredictions();
}
/**
* Returns the area under ROC for those predictions that have been collected
* in the evaluateClassifier(Classifier, Instances) method. Returns
* Utils.missingValue() if the area is not available.
*
* @param classIndex the index of the class to consider as "positive"
* @return the area under the ROC curve or not a number
*/
public double areaUnderROC(int classIndex) {
return m_delegate.areaUnderROC(classIndex);
}
/**
* Calculates the weighted (by class size) AUC.
*
* @return the weighted AUC.
*/
public double weightedAreaUnderROC() {
return m_delegate.weightedAreaUnderROC();
}
/**
* Returns the area under precision-recall curve (AUPRC) for those predictions
* that have been collected in the evaluateClassifier(Classifier, Instances)
* method. Returns Utils.missingValue() if the area is not available.
*
* @param classIndex the index of the class to consider as "positive"
* @return the area under the precision-recall curve or not a number
*/
public double areaUnderPRC(int classIndex) {
return m_delegate.areaUnderPRC(classIndex);
}
/**
* Calculates the weighted (by class size) AUPRC.
*
* @return the weighted AUPRC.
*/
public double weightedAreaUnderPRC() {
return m_delegate.weightedAreaUnderPRC();
}
/**
* Returns a copy of the confusion matrix.
*
* @return a copy of the confusion matrix as a two-dimensional array
*/
public double[][] confusionMatrix() {
return m_delegate.confusionMatrix();
}
/**
* Performs a (stratified if class is nominal) cross-validation for a
* classifier on a set of instances. Now performs a deep copy of the
* classifier before each call to buildClassifier() (just in case the
* classifier is not initialized properly).
*
* @param classifier the classifier with any options set.
* @param data the data on which the cross-validation is to be performed
* @param numFolds the number of folds for the cross-validation
* @param random random number generator for randomization
* @throws Exception if a classifier could not be generated successfully or
* the class is not defined
*/
public void crossValidateModel(Classifier classifier, Instances data, int numFolds, Random random)
throws Exception {
m_delegate.crossValidateModel(classifier, data, numFolds, random);
}
/**
* Performs a (stratified if class is nominal) cross-validation for a
* classifier on a set of instances. Now performs a deep copy of the
* classifier before each call to buildClassifier() (just in case the
* classifier is not initialized properly).
*
* @param classifier the classifier with any options set.
* @param data the data on which the cross-validation is to be performed
* @param numFolds the number of folds for the cross-validation
* @param random random number generator for randomization
* @param forPredictionsPrinting varargs parameter that, if supplied, is
* expected to hold a
* weka.classifiers.evaluation.output.prediction.AbstractOutput
* object
* @throws Exception if a classifier could not be generated successfully or
* the class is not defined
*/
public void crossValidateModel(Classifier classifier, Instances data,
int numFolds, Random random, Object... forPredictionsPrinting)
throws Exception {
m_delegate.crossValidateModel(classifier, data, numFolds, random,
forPredictionsPrinting);
}
/**
* Performs a (stratified if class is nominal) cross-validation for a
* classifier on a set of instances.
*
* @param classifierString a string naming the class of the classifier
* @param data the data on which the cross-validation is to be performed
* @param numFolds the number of folds for the cross-validation
* @param options the options to the classifier. Any options
* @param random the random number generator for randomizing the data accepted
* by the classifier will be removed from this array.
* @throws Exception if a classifier could not be generated successfully or
* the class is not defined
*/
public void crossValidateModel(String classifierString, Instances data,
int numFolds, String[] options, Random random) throws Exception {
m_delegate.crossValidateModel(classifierString, data, numFolds, options,
random);
}
/**
* Evaluates a classifier with the options given in an array of strings.
*
*
* Valid options are:
*
*
* -t filename
* Name of the file with the training data. (required)
*
*
* -T filename
* Name of the file with the test data. If missing a cross-validation is
* performed.
*
*
* -c index
* Index of the class attribute (1, 2, ...; default: last).
*
*
* -x number
* The number of folds for the cross-validation (default: 10).
*
*
* -no-cv
* No cross validation. If no test file is provided, no evaluation is done.
*
*
* -split-percentage percentage
* Sets the percentage for the train/test set split, e.g., 66.
*
*
* -preserve-order
* Preserves the order in the percentage split instead of randomizing the data
* first with the seed value ('-s').
*
*
* -s seed
* Random number seed for the cross-validation and percentage split (default:
* 1).
*
*
* -m filename
* The name of a file containing a cost matrix.
*
*
* -l filename
* Loads classifier from the given file. In case the filename ends with
* ".xml",a PMML file is loaded or, if that fails, options are loaded from
* XML.
*
*
* -d filename
* Saves classifier built from the training data into the given file. In case
* the filename ends with ".xml" the options are saved XML, not the model.
*
*
* -v
* Outputs no statistics for the training data.
*
*
* -o
* Outputs statistics only, not the classifier.
*
*
* -i
* Outputs detailed information-retrieval statistics per class.
*
*
* -k
* Outputs information-theoretic statistics.
*
*
* -classifications
* "weka.classifiers.evaluation.output.prediction.AbstractOutput + options"
* Uses the specified class for generating the classification output. E.g.:
* weka.classifiers.evaluation.output.prediction.PlainText or :
* weka.classifiers.evaluation.output.prediction.CSV
*
* -p range
* Outputs predictions for test instances (or the train instances if no test
* instances provided and -no-cv is used), along with the attributes in the
* specified range (and nothing else). Use '-p 0' if no attributes are
* desired.
*
* Deprecated: use "-classifications ..." instead.
*
*
* -distribution
* Outputs the distribution instead of only the prediction in conjunction with
* the '-p' option (only nominal classes).
*
* Deprecated: use "-classifications ..." instead.
*
*
* -no-predictions
* Turns off the collection of predictions in order to conserve memory.
*
*
* -r
* Outputs cumulative margin distribution (and nothing else).
*
*
* -g
* Only for classifiers that implement "Graphable." Outputs the graph
* representation of the classifier (and nothing else).
*
*
* -xml filename | xml-string
* Retrieves the options from the XML-data instead of the command line.
*
*
* -threshold-file file
* The file to save the threshold data to. The format is determined by the
* extensions, e.g., '.arff' for ARFF format or '.csv' for CSV.
*
*
* -threshold-label label
* The class label to determine the threshold data for (default is the first
* label)
*
*
* @param classifierString class of machine learning classifier as a string
* @param options the array of string containing the options
* @throws Exception if model could not be evaluated successfully
* @return a string describing the results
*/
public static String evaluateModel(String classifierString, String[] options)
throws Exception {
return weka.classifiers.evaluation.Evaluation.evaluateModel(
classifierString, options);
}
/**
* Evaluates a classifier with the options given in an array of strings.
*
*
* Valid options are:
*
*
* -t name of training file
* Name of the file with the training data. (required)
*
*
* -T name of test file
* Name of the file with the test data. If missing a cross-validation is
* performed.
*
*
* -c class index
* Index of the class attribute (1, 2, ...; default: last).
*
*
* -x number of folds
* The number of folds for the cross-validation (default: 10).
*
*
* -no-cv
* No cross validation. If no test file is provided, no evaluation is done.
*
*
* -split-percentage percentage
* Sets the percentage for the train/test set split, e.g., 66.
*
*
* -preserve-order
* Preserves the order in the percentage split instead of randomizing the data
* first with the seed value ('-s').
*
*
* -s seed
* Random number seed for the cross-validation and percentage split (default:
* 1).
*
*
* -m file with cost matrix
* The name of a file containing a cost matrix.
*
*
* -l filename
* Loads classifier from the given file. In case the filename ends with
* ".xml",a PMML file is loaded or, if that fails, options are loaded from
* XML.
*
*
* -d filename
* Saves classifier built from the training data into the given file. In case
* the filename ends with ".xml" the options are saved XML, not the model.
*
*
* -v
* Outputs no statistics for the training data.
*
*
* -o
* Outputs statistics only, not the classifier.
*
*
* -i
* Outputs detailed information-retrieval statistics per class.
*
*
* -k
* Outputs information-theoretic statistics.
*
*
* -classifications
* "weka.classifiers.evaluation.output.prediction.AbstractOutput + options"
* Uses the specified class for generating the classification output. E.g.:
* weka.classifiers.evaluation.output.prediction.PlainText or :
* weka.classifiers.evaluation.output.prediction.CSV
*
* -p range
* Outputs predictions for test instances (or the train instances if no test
* instances provided and -no-cv is used), along with the attributes in the
* specified range (and nothing else). Use '-p 0' if no attributes are
* desired.
*
* Deprecated: use "-classifications ..." instead.
*
*
* -distribution
* Outputs the distribution instead of only the prediction in conjunction with
* the '-p' option (only nominal classes).
*
* Deprecated: use "-classifications ..." instead.
*
*
* -no-predictions
* Turns off the collection of predictions in order to conserve memory.
*
*
* -r
* Outputs cumulative margin distribution (and nothing else).
*
*
* -g
* Only for classifiers that implement "Graphable." Outputs the graph
* representation of the classifier (and nothing else).
*
*
* -xml filename | xml-string
* Retrieves the options from the XML-data instead of the command line.
*
*
* @param classifier machine learning classifier
* @param options the array of string containing the options
* @throws Exception if model could not be evaluated successfully
* @return a string describing the results
*/
public static String evaluateModel(Classifier classifier, String[] options)
throws Exception {
return weka.classifiers.evaluation.Evaluation.evaluateModel(classifier,
options);
}
/**
* Evaluates the classifier on a given set of instances. Note that the data
* must have exactly the same format (e.g. order of attributes) as the data
* used to train the classifier! Otherwise the results will generally be
* meaningless.
*
* @param classifier machine learning classifier
* @param data set of test instances for evaluation
* @param forPredictionsPrinting varargs parameter that, if supplied, is
* expected to hold a
* weka.classifiers.evaluation.output.prediction.AbstractOutput
* object
* @return the predictions
* @throws Exception if model could not be evaluated successfully
*/
public double[] evaluateModel(Classifier classifier, Instances data,
Object... forPredictionsPrinting) throws Exception {
return m_delegate.evaluateModel(classifier, data, forPredictionsPrinting);
}
/**
* Evaluates the supplied distribution on a single instance.
*
* @param dist the supplied distribution
* @param instance the test instance to be classified
* @param storePredictions whether to store predictions for nominal classifier
* @return the prediction
* @throws Exception if model could not be evaluated successfully
*/
public double evaluationForSingleInstance(double[] dist, Instance instance,
boolean storePredictions) throws Exception {
return m_delegate.evaluationForSingleInstance(dist, instance,
storePredictions);
}
/**
* Evaluates the classifier on a single instance and records the prediction.
*
* @param classifier machine learning classifier
* @param instance the test instance to be classified
* @return the prediction made by the clasifier
* @throws Exception if model could not be evaluated successfully or the data
* contains string attributes
*/
public double evaluateModelOnceAndRecordPrediction(Classifier classifier,
Instance instance) throws Exception {
return m_delegate
.evaluateModelOnceAndRecordPrediction(classifier, instance);
}
/**
* Evaluates the classifier on a single instance.
*
* @param classifier machine learning classifier
* @param instance the test instance to be classified
* @return the prediction made by the clasifier
* @throws Exception if model could not be evaluated successfully or the data
* contains string attributes
*/
public double evaluateModelOnce(Classifier classifier, Instance instance)
throws Exception {
return m_delegate.evaluateModelOnce(classifier, instance);
}
/**
* Evaluates the supplied distribution on a single instance.
*
* @param dist the supplied distribution
* @param instance the test instance to be classified
* @return the prediction
* @throws Exception if model could not be evaluated successfully
*/
public double evaluateModelOnce(double[] dist, Instance instance)
throws Exception {
return m_delegate.evaluateModelOnce(dist, instance);
}
/**
* Evaluates the supplied distribution on a single instance.
*
* @param dist the supplied distribution
* @param instance the test instance to be classified
* @return the prediction
* @throws Exception if model could not be evaluated successfully
*/
public double evaluateModelOnceAndRecordPrediction(double[] dist,
Instance instance) throws Exception {
return m_delegate.evaluateModelOnceAndRecordPrediction(dist, instance);
}
/**
* Evaluates the supplied prediction on a single instance.
*
* @param prediction the supplied prediction
* @param instance the test instance to be classified
* @throws Exception if model could not be evaluated successfully
*/
public void evaluateModelOnce(double prediction, Instance instance)
throws Exception {
m_delegate.evaluateModelOnce(prediction, instance);
}
/**
* Returns the predictions that have been collected.
*
* @return a reference to the FastVector containing the predictions that have
* been collected. This should be null if no predictions have been
* collected.
*/
public ArrayList predictions() {
return m_delegate.predictions();
}
/**
* Wraps a static classifier in enough source to test using the weka class
* libraries.
*
* @param classifier a Sourcable Classifier
* @param className the name to give to the source code class
* @return the source for a static classifier that can be tested with weka
* libraries.
* @throws Exception if code-generation fails
*/
public static String wekaStaticWrapper(Sourcable classifier, String className)
throws Exception {
return weka.classifiers.evaluation.Evaluation.wekaStaticWrapper(classifier,
className);
}
/**
* Gets the number of test instances that had a known class value (actually
* the sum of the weights of test instances with known class value).
*
* @return the number of test instances with known class
*/
public final double numInstances() {
return m_delegate.numInstances();
}
/**
* Gets the coverage of the test cases by the predicted regions at the
* confidence level specified when evaluation was performed.
*
* @return the coverage of the test cases by the predicted regions
*/
public final double coverageOfTestCasesByPredictedRegions() {
return m_delegate.coverageOfTestCasesByPredictedRegions();
}
/**
* Gets the average size of the predicted regions, relative to the range of
* the target in the training data, at the confidence level specified when
* evaluation was performed.
*
* @return the average size of the predicted regions
*/
public final double sizeOfPredictedRegions() {
return m_delegate.sizeOfPredictedRegions();
}
/**
* Gets the number of instances incorrectly classified (that is, for which an
* incorrect prediction was made). (Actually the sum of the weights of these
* instances)
*
* @return the number of incorrectly classified instances
*/
public final double incorrect() {
return m_delegate.incorrect();
}
/**
* Gets the percentage of instances incorrectly classified (that is, for which
* an incorrect prediction was made).
*
* @return the percent of incorrectly classified instances (between 0 and 100)
*/
public final double pctIncorrect() {
return m_delegate.pctIncorrect();
}
/**
* Gets the total cost, that is, the cost of each prediction times the weight
* of the instance, summed over all instances.
*
* @return the total cost
*/
public final double totalCost() {
return m_delegate.totalCost();
}
/**
* Gets the average cost, that is, total cost of misclassifications (incorrect
* plus unclassified) over the total number of instances.
*
* @return the average cost.
*/
public final double avgCost() {
return m_delegate.avgCost();
}
/**
* Gets the number of instances correctly classified (that is, for which a
* correct prediction was made). (Actually the sum of the weights of these
* instances)
*
* @return the number of correctly classified instances
*/
public final double correct() {
return m_delegate.correct();
}
/**
* Gets the percentage of instances correctly classified (that is, for which a
* correct prediction was made).
*
* @return the percent of correctly classified instances (between 0 and 100)
*/
public final double pctCorrect() {
return m_delegate.pctCorrect();
}
/**
* Gets the number of instances not classified (that is, for which no
* prediction was made by the classifier). (Actually the sum of the weights of
* these instances)
*
* @return the number of unclassified instances
*/
public final double unclassified() {
return m_delegate.unclassified();
}
/**
* Gets the percentage of instances not classified (that is, for which no
* prediction was made by the classifier).
*
* @return the percent of unclassified instances (between 0 and 100)
*/
public final double pctUnclassified() {
return m_delegate.pctUnclassified();
}
/**
* Returns the estimated error rate or the root mean squared error (if the
* class is numeric). If a cost matrix was given this error rate gives the
* average cost.
*
* @return the estimated error rate (between 0 and 1, or between 0 and maximum
* cost)
*/
public final double errorRate() {
return m_delegate.errorRate();
}
/**
* Returns value of kappa statistic if class is nominal.
*
* @return the value of the kappa statistic
*/
public final double kappa() {
return m_delegate.kappa();
}
@Override
public String getRevision() {
return m_delegate.getRevision();
}
/**
* Returns the correlation coefficient if the class is numeric.
*
* @return the correlation coefficient
* @throws Exception if class is not numeric
*/
public final double correlationCoefficient() throws Exception {
return m_delegate.correlationCoefficient();
}
/**
* Returns the mean absolute error. Refers to the error of the predicted
* values for numeric classes, and the error of the predicted probability
* distribution for nominal classes.
*
* @return the mean absolute error
*/
public final double meanAbsoluteError() {
return m_delegate.meanAbsoluteError();
}
/**
* Returns the mean absolute error of the prior.
*
* @return the mean absolute error
*/
public final double meanPriorAbsoluteError() {
return m_delegate.meanPriorAbsoluteError();
}
/**
* Returns the relative absolute error.
*
* @return the relative absolute error
* @throws Exception if it can't be computed
*/
public final double relativeAbsoluteError() throws Exception {
return m_delegate.relativeAbsoluteError();
}
/**
* Returns the root mean squared error.
*
* @return the root mean squared error
*/
public final double rootMeanSquaredError() {
return m_delegate.rootMeanSquaredError();
}
/**
* Returns the root mean prior squared error.
*
* @return the root mean prior squared error
*/
public final double rootMeanPriorSquaredError() {
return m_delegate.rootMeanPriorSquaredError();
}
/**
* Returns the root relative squared error if the class is numeric.
*
* @return the root relative squared error
*/
public final double rootRelativeSquaredError() {
return m_delegate.rootRelativeSquaredError();
}
/**
* Calculate the entropy of the prior distribution.
*
* @return the entropy of the prior distribution
* @throws Exception if the class is not nominal
*/
public final double priorEntropy() throws Exception {
return m_delegate.priorEntropy();
}
/**
* Return the total Kononenko & Bratko Information score in bits.
*
* @return the K&B information score
* @throws Exception if the class is not nominal
*/
public final double KBInformation() throws Exception {
return m_delegate.KBInformation();
}
/**
* Return the Kononenko & Bratko Information score in bits per instance.
*
* @return the K&B information score
* @throws Exception if the class is not nominal
*/
public final double KBMeanInformation() throws Exception {
return m_delegate.KBMeanInformation();
}
/**
* Return the Kononenko & Bratko Relative Information score.
*
* @return the K&B relative information score
* @throws Exception if the class is not nominal
*/
public final double KBRelativeInformation() throws Exception {
return m_delegate.KBRelativeInformation();
}
/**
* Returns the total entropy for the null model.
*
* @return the total null model entropy
*/
public final double SFPriorEntropy() {
return m_delegate.SFPriorEntropy();
}
/**
* Returns the entropy per instance for the null model.
*
* @return the null model entropy per instance
*/
public final double SFMeanPriorEntropy() {
return m_delegate.SFMeanPriorEntropy();
}
/**
* Returns the total entropy for the scheme.
*
* @return the total scheme entropy
*/
public final double SFSchemeEntropy() {
return m_delegate.SFSchemeEntropy();
}
/**
* Returns the entropy per instance for the scheme.
*
* @return the scheme entropy per instance
*/
public final double SFMeanSchemeEntropy() {
return m_delegate.SFMeanSchemeEntropy();
}
/**
* Returns the total SF, which is the null model entropy minus the scheme
* entropy.
*
* @return the total SF
*/
public final double SFEntropyGain() {
return m_delegate.SFEntropyGain();
}
/**
* Returns the SF per instance, which is the null model entropy minus the
* scheme entropy, per instance.
*
* @return the SF per instance
*/
public final double SFMeanEntropyGain() {
return m_delegate.SFMeanEntropyGain();
}
/**
* Output the cumulative margin distribution as a string suitable for input
* for gnuplot or similar package.
*
* @return the cumulative margin distribution
* @throws Exception if the class attribute is nominal
*/
public String toCumulativeMarginDistributionString() throws Exception {
return m_delegate.toCumulativeMarginDistributionString();
}
/**
* Calls toSummaryString() with no title and no complexity stats.
*
* @return a summary description of the classifier evaluation
*/
@Override
public String toSummaryString() {
return m_delegate.toSummaryString();
}
/**
* Calls toSummaryString() with a default title.
*
* @param printComplexityStatistics if true, complexity statistics are
* returned as well
* @return the summary string
*/
public String toSummaryString(boolean printComplexityStatistics) {
return m_delegate.toSummaryString(printComplexityStatistics);
}
/**
* Outputs the performance statistics in summary form. Lists number (and
* percentage) of instances classified correctly, incorrectly and
* unclassified. Outputs the total number of instances classified, and the
* number of instances (if any) that had no class value provided.
*
* @param title the title for the statistics
* @param printComplexityStatistics if true, complexity statistics are
* returned as well
* @return the summary as a String
*/
public String toSummaryString(String title, boolean printComplexityStatistics) {
return m_delegate.toSummaryString(title, printComplexityStatistics);
}
/**
* Calls toMatrixString() with a default title.
*
* @return the confusion matrix as a string
* @throws Exception if the class is numeric
*/
public String toMatrixString() throws Exception {
return m_delegate.toMatrixString();
}
/**
* Outputs the performance statistics as a classification confusion matrix.
* For each class value, shows the distribution of predicted class values.
*
* @param title the title for the confusion matrix
* @return the confusion matrix as a String
* @throws Exception if the class is numeric
*/
public String toMatrixString(String title) throws Exception {
return m_delegate.toMatrixString(title);
}
/**
* Generates a breakdown of the accuracy for each class (with default title),
* incorporating various information-retrieval statistics, such as true/false
* positive rate, precision/recall/F-Measure. Should be useful for ROC curves,
* recall/precision curves.
*
* @return the statistics presented as a string
* @throws Exception if class is not nominal
*/
public String toClassDetailsString() throws Exception {
return m_delegate.toClassDetailsString();
}
/**
* Generates a breakdown of the accuracy for each class, incorporating various
* information-retrieval statistics, such as true/false positive rate,
* precision/recall/F-Measure. Should be useful for ROC curves,
* recall/precision curves.
*
* @param title the title to prepend the stats string with
* @return the statistics presented as a string
* @throws Exception if class is not nominal
*/
public String toClassDetailsString(String title) throws Exception {
return m_delegate.toClassDetailsString(title);
}
/**
* Calculate the number of true positives with respect to a particular class.
* This is defined as
*
*
*
* correctly classified positives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the true positive rate
*/
public double numTruePositives(int classIndex) {
return m_delegate.numTruePositives(classIndex);
}
/**
* Calculate the true positive rate with respect to a particular class. This
* is defined as
*
*
*
* correctly classified positives
* ------------------------------
* total positives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the true positive rate
*/
public double truePositiveRate(int classIndex) {
return m_delegate.truePositiveRate(classIndex);
}
/**
* Calculates the weighted (by class size) true positive rate.
*
* @return the weighted true positive rate.
*/
public double weightedTruePositiveRate() {
return m_delegate.weightedTruePositiveRate();
}
/**
* Calculate the number of true negatives with respect to a particular class.
* This is defined as
*
*
*
* correctly classified negatives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the true positive rate
*/
public double numTrueNegatives(int classIndex) {
return m_delegate.numTrueNegatives(classIndex);
}
/**
* Calculate the true negative rate with respect to a particular class. This
* is defined as
*
*
*
* correctly classified negatives
* ------------------------------
* total negatives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the true positive rate
*/
public double trueNegativeRate(int classIndex) {
return m_delegate.trueNegativeRate(classIndex);
}
/**
* Calculates the weighted (by class size) true negative rate.
*
* @return the weighted true negative rate.
*/
public double weightedTrueNegativeRate() {
return m_delegate.weightedTrueNegativeRate();
}
/**
* Calculate number of false positives with respect to a particular class.
* This is defined as
*
*
*
* incorrectly classified negatives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the false positive rate
*/
public double numFalsePositives(int classIndex) {
return m_delegate.numFalsePositives(classIndex);
}
/**
* Calculate the false positive rate with respect to a particular class. This
* is defined as
*
*
*
* incorrectly classified negatives
* --------------------------------
* total negatives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the false positive rate
*/
public double falsePositiveRate(int classIndex) {
return m_delegate.falsePositiveRate(classIndex);
}
/**
* Calculates the weighted (by class size) false positive rate.
*
* @return the weighted false positive rate.
*/
public double weightedFalsePositiveRate() {
return m_delegate.weightedFalsePositiveRate();
}
/**
* Calculate number of false negatives with respect to a particular class.
* This is defined as
*
*
*
* incorrectly classified positives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the false positive rate
*/
public double numFalseNegatives(int classIndex) {
return m_delegate.numFalseNegatives(classIndex);
}
/**
* Calculate the false negative rate with respect to a particular class. This
* is defined as
*
*
*
* incorrectly classified positives
* --------------------------------
* total positives
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the false positive rate
*/
public double falseNegativeRate(int classIndex) {
return m_delegate.falseNegativeRate(classIndex);
}
/**
* Calculates the weighted (by class size) false negative rate.
*
* @return the weighted false negative rate.
*/
public double weightedFalseNegativeRate() {
return m_delegate.weightedFalseNegativeRate();
}
/**
* Calculates the matthews correlation coefficient (sometimes called phi
* coefficient) for the supplied class
*
* @param classIndex the index of the class to compute the matthews
* correlation coefficient for
*
* @return the mathews correlation coefficient
*/
public double matthewsCorrelationCoefficient(int classIndex) {
return m_delegate.matthewsCorrelationCoefficient(classIndex);
}
/**
* Calculates the weighted (by class size) matthews correlation coefficient.
*
* @return the weighted matthews correlation coefficient.
*/
public double weightedMatthewsCorrelation() {
return m_delegate.weightedMatthewsCorrelation();
}
/**
* Calculate the recall with respect to a particular class. This is defined as
*
*
*
* correctly classified positives
* ------------------------------
* total positives
*
*
* (Which is also the same as the truePositiveRate.)
*
* @param classIndex the index of the class to consider as "positive"
* @return the recall
*/
public double recall(int classIndex) {
return m_delegate.recall(classIndex);
}
/**
* Calculates the weighted (by class size) recall.
*
* @return the weighted recall.
*/
public double weightedRecall() {
return m_delegate.weightedRecall();
}
/**
* Calculate the precision with respect to a particular class. This is defined
* as
*
*
*
* correctly classified positives
* ------------------------------
* total predicted as positive
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the precision
*/
public double precision(int classIndex) {
return m_delegate.precision(classIndex);
}
/**
* Calculates the weighted (by class size) precision.
*
* @return the weighted precision.
*/
public double weightedPrecision() {
return m_delegate.weightedPrecision();
}
/**
* Calculate the F-Measure with respect to a particular class. This is defined
* as
*
*
*
* 2 * recall * precision
* ----------------------
* recall + precision
*
*
* @param classIndex the index of the class to consider as "positive"
* @return the F-Measure
*/
public double fMeasure(int classIndex) {
return m_delegate.fMeasure(classIndex);
}
/**
* Calculates the macro weighted (by class size) average F-Measure.
*
* @return the weighted F-Measure.
*/
public double weightedFMeasure() {
return m_delegate.weightedFMeasure();
}
/**
* Unweighted macro-averaged F-measure. If some classes not present in the
* test set, they're just skipped (since recall is undefined there anyway) .
*
* @return unweighted macro-averaged F-measure.
* */
public double unweightedMacroFmeasure() {
return m_delegate.unweightedMacroFmeasure();
}
/**
* Unweighted micro-averaged F-measure. If some classes not present in the
* test set, they have no effect.
*
* Note: if the test set is *single-label*, then this is the same as accuracy.
*
* @return unweighted micro-averaged F-measure.
*/
public double unweightedMicroFmeasure() {
return m_delegate.unweightedMicroFmeasure();
}
/**
* Sets the class prior probabilities.
*
* @param train the training instances used to determine the prior
* probabilities
* @throws Exception if the class attribute of the instances is not set
*/
public void setPriors(Instances train) throws Exception {
m_delegate.setPriors(train);
}
/**
* Get the current weighted class counts.
*
* @return the weighted class counts
*/
public double[] getClassPriors() {
return m_delegate.getClassPriors();
}
/**
* Updates the class prior probabilities or the mean respectively (when
* incrementally training).
*
* @param instance the new training instance seen
* @throws Exception if the class of the instance is not set
*/
public void updatePriors(Instance instance) throws Exception {
m_delegate.updatePriors(instance);
}
/**
* disables the use of priors, e.g., in case of de-serialized schemes that
* have no access to the original training set, but are evaluated on a set
* set.
*/
public void useNoPriors() {
m_delegate.useNoPriors();
}
/**
* Tests whether the current evaluation object is equal to another evaluation
* object.
*
* @param obj the object to compare against
* @return true if the two objects are equal
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof weka.classifiers.Evaluation) {
obj = ((weka.classifiers.Evaluation) obj).m_delegate;
}
return m_delegate.equals(obj);
}
/**
* A test method for this class. Just extracts the first command line argument
* as a classifier class name and calls evaluateModel.
*
* @param args an array of command line arguments, the first of which must be
* the class name of a classifier.
*/
public static void main(String[] args) {
try {
if (args.length == 0) {
throw new Exception("The first argument must be the class name"
+ " of a classifier");
}
String classifier = args[0];
args[0] = "";
System.out.println(evaluateModel(classifier, args));
} catch (Exception ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy