@Override public String toString() { StringBuilder returnString = new StringBuilder(); returnString.append('\n'); returnString.append("=======================================================\n"); returnString.append("Summary\n"); returnString.append("-------------------------------------------------------\n"); int totalClassified = correctlyClassified + incorrectlyClassified; double percentageCorrect = (double) 100 * correctlyClassified / totalClassified; double percentageIncorrect = (double) 100 * incorrectlyClassified / totalClassified; NumberFormat decimalFormatter = new DecimalFormat("0.####"); returnString .append(StringUtils.rightPad("Correctly Classified Instances", 40)) .append(": ") .append(StringUtils.leftPad(Integer.toString(correctlyClassified), 10)) .append('\t') .append(StringUtils.leftPad(decimalFormatter.format(percentageCorrect), 10)) .append("%\n"); returnString .append(StringUtils.rightPad("Incorrectly Classified Instances", 40)) .append(": ") .append(StringUtils.leftPad(Integer.toString(incorrectlyClassified), 10)) .append('\t') .append(StringUtils.leftPad(decimalFormatter.format(percentageIncorrect), 10)) .append("%\n"); returnString .append(StringUtils.rightPad("Total Classified Instances", 40)) .append(": ") .append(StringUtils.leftPad(Integer.toString(totalClassified), 10)) .append('\n'); returnString.append('\n'); returnString.append(confusionMatrix); returnString.append("=======================================================\n"); returnString.append("Statistics\n"); returnString.append("-------------------------------------------------------\n"); RunningAverageAndStdDev normStats = confusionMatrix.getNormalizedStats(); returnString .append(StringUtils.rightPad("Kappa", 40)) .append(StringUtils.leftPad(decimalFormatter.format(confusionMatrix.getKappa()), 10)) .append('\n'); returnString .append(StringUtils.rightPad("Accuracy", 40)) .append(StringUtils.leftPad(decimalFormatter.format(confusionMatrix.getAccuracy()), 10)) .append("%\n"); returnString .append(StringUtils.rightPad("Reliability", 40)) .append( StringUtils.leftPad(decimalFormatter.format(normStats.getAverage() * 100.00000001), 10)) .append("%\n"); returnString .append(StringUtils.rightPad("Reliability (standard deviation)", 40)) .append(StringUtils.leftPad(decimalFormatter.format(normStats.getStandardDeviation()), 10)) .append('\n'); returnString .append(StringUtils.rightPad("Weighted precision", 40)) .append( StringUtils.leftPad( decimalFormatter.format(confusionMatrix.getWeightedPrecision()), 10)) .append('\n'); returnString .append(StringUtils.rightPad("Weighted recall", 40)) .append( StringUtils.leftPad(decimalFormatter.format(confusionMatrix.getWeightedRecall()), 10)) .append('\n'); returnString .append(StringUtils.rightPad("Weighted F1 score", 40)) .append( StringUtils.leftPad(decimalFormatter.format(confusionMatrix.getWeightedF1score()), 10)) .append('\n'); if (hasLL) { returnString .append(StringUtils.rightPad("Log-likelihood", 30)) .append("mean : ") .append(StringUtils.leftPad(decimalFormatter.format(summarizer.getMean()), 10)) .append('\n'); returnString .append(StringUtils.rightPad("", 30)) .append(StringUtils.rightPad("25%-ile : ", 10)) .append(StringUtils.leftPad(decimalFormatter.format(summarizer.getQuartile(1)), 10)) .append('\n'); returnString .append(StringUtils.rightPad("", 30)) .append(StringUtils.rightPad("75%-ile : ", 10)) .append(StringUtils.leftPad(decimalFormatter.format(summarizer.getQuartile(3)), 10)) .append('\n'); } return returnString.toString(); }