/*********************************************************************** This file is part of KEEL-software, the Data Mining tool for regression, classification, clustering, pattern mining and so on. Copyright (C) 2004-2010 F. Herrera (herrera@decsai.ugr.es) L. S�nchez (luciano@uniovi.es) J. Alcal�-Fdez (jalcala@decsai.ugr.es) S. Garc�a (sglopez@ujaen.es) A. Fern�ndez (alberto.fernandez@ujaen.es) J. Luengo (julianlm@decsai.ugr.es) 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 http://www.gnu.org/licenses/ **********************************************************************/ package keel.Algorithms.Genetic_Rule_Learning.M5Rules; /** * Class for performance measures */ public final class Measures { int type; /* type for printing */ double correlation; /* correlation coefficient */ double meanAbsErr; /* mean absolute error */ double meanSqrErr; /* mean sqaured error */ /** * Constructs a Measures object which could containing the performance measures */ public Measures() { type = 0; correlation = 0.0; meanAbsErr = 0.0; meanSqrErr = 0.0; } /** * Converts the performance measures to a string * @param absDev the absolute deviation of the class attribute * @param sd the standard deviation of the class attribute * @param set the type of the performance measures, is one of "t","T","f","F","x", for training, test, training of one fold in cross-validation, test of one test in cross-validation, cross-validation final resuls respectively * @param smooth either "u" or "s" for unsmoothed or smoothed * @return the converted string */ public final String toString(double absDev, double sd, String set, String smooth) { StringBuffer text = new StringBuffer(); switch (type) { case 0: text.append(" Correlation coefficient:\t\t" + M5.doubleToStringF(correlation, 9, 3) + "\t\t\t " + set + smooth); text.append(" Mean absolute error:\t\t" + M5.doubleToStringG(meanAbsErr, 9, 4) + "\t\t\t " + set + smooth); text.append(" Root mean squared error:\t\t" + M5.doubleToStringG(Math.sqrt(Math.abs(meanSqrErr)), 9, 4) + "\t\t\t " + set + smooth); text.append(" Relative absolute error:\t\t" + M5.doubleToStringF(meanAbsErr / absDev * 100.0, 9, 2) + " %\t\t\t " + set + smooth); text.append(" Root relative squared error:\t" + M5. doubleToStringF(Math.sqrt(Math.abs(meanSqrErr)) / sd * 100.0, 9, 2) + " %\t\t\t " + set + smooth); break; case 1: text.append(" Correlation coefficient:\t\t" + M5.doubleToStringF(correlation, 9, 3) + "\t\t\t " + set + smooth); text.append(" Mean absolute error:\t\t" + M5.doubleToStringG(meanAbsErr, 9, 4) + "\t\t\t " + set + smooth); text.append(" Root mean squared error:\t\t" + M5.doubleToStringG(Math.sqrt(Math.abs(meanSqrErr)), 9, 4) + "\t\t\t " + set + smooth); text.append(" Relative absolute error:\t\tundefined\t\t\t " + set + smooth); text.append( " Root relative squared error:\tundefined\t\t\t " + set + smooth); break; case 2: text.append(" Correlation coefficient:\t\t" + M5.doubleToStringF(correlation, 9, 3) + "\t\t\t " + set + smooth); text.append(" Mean absolute error:\t\tundefined\t\t\t " + set + smooth); text.append(" Root mean squared error:\t\tundefined\t\t\t " + set + smooth); text.append(" Relative absolute error:\t\tundefined\t\t\t " + set + smooth); text.append( " Root relative squared error:\tundefined\t\t\t " + set + smooth); break; default: M5.errorMsg("wrong type in Measures.print()."); } return text.toString(); } /** * Adds up performance measures for cross-validation * @param m performance measures of a fold */ public final void incremental(Measures m) { correlation += m.correlation; meanAbsErr += m.meanAbsErr; meanSqrErr += m.meanSqrErr; } }