public void printPerformance(InstanceList instanceList, String description) { System.out.println(description); System.out.println("Accuracy: " + classifier.getAccuracy(instanceList)); LabelAlphabet labelAlphabet = classifier.getLabelAlphabet(); Iterator iterator = labelAlphabet.iterator(); while (iterator.hasNext()) { Object label = iterator.next(); double p = classifier.getPrecision(instanceList, label); double r = classifier.getRecall(instanceList, label); double f1 = classifier.getF1(instanceList, label); System.out.println("Precision[" + label + "] = " + p); System.out.println("Recall[" + label + "] = " + r); System.out.println("F1[" + label + "] = " + f1); System.out.println(""); } ExtendedTrial trial = new ExtendedTrial(classifier, instanceList); System.out.println("Overall performance\n====="); System.out.println("Precision: " + trial.getPrecision()); System.out.println("Recall: " + trial.getRecall()); System.out.println("F1: " + trial.getF1()); System.out.println("Fall-out: " + trial.getFallOut()); trial.showErrors(); }
public static ArrayList<Double> getAverageCrossValidationScore( InstanceList ilist, int i, ClassifierTrainer trainer) { double crossValidAccSum = 0; double crossValidPrcSum = 0; double crossValidRecSum = 0; double crossValidF1Sum = 0; int count = 0; // get gross validation folds CrossValidationIterator cvIlists = ilist.crossValidationIterator(i); while (cvIlists.hasNext()) { System.out.println("#############Performing " + count + " iteration###########"); InstanceList[] ilists = cvIlists.next(); System.out.println("The train set size is " + ilists[0].size()); System.out.println("The test set size is " + ilists[1].size()); Classifier classifier = trainer.train(ilists[0]); System.out.println("The training accuracy is " + classifier.getAccuracy(ilists[0])); System.out.println("The testing accuracy is " + classifier.getAccuracy(ilists[1])); System.out.println("The testing precision is " + classifier.getPrecision(ilists[1], 1)); System.out.println("The testing recall is " + classifier.getRecall(ilists[1], 1)); System.out.println("The testing f1score is " + classifier.getF1(ilists[1], 1)); crossValidAccSum += classifier.getAccuracy(ilists[1]); crossValidPrcSum += classifier.getPrecision(ilists[1], 1); crossValidRecSum += classifier.getRecall(ilists[1], 1); crossValidF1Sum += classifier.getF1(ilists[1], 1); count++; // additional calculations ArrayList<Classification> outClassifications = classifier.classify(ilists[1]); int p1l1 = 0; int p1l0 = 0; int p0l1 = 0; int p0l0 = 0; int countCorrect = 0; int countIncorrect = 0; System.out.println("Outclassification size " + outClassifications.size()); for (int k = 0; k < outClassifications.size(); k++) { // System.out.println("Data "+outClassifications.get(k).getInstance().getName()); // System.out.println("Labeling "+outClassifications.get(k).getLabeling()); uncomment to get // score double predictedLabel = outClassifications.get(k).getLabeling().getBestIndex(); // System.out.println("Predicted label "+ predictedLabel); double targetLabel = Double.valueOf(outClassifications.get(k).getInstance().getTarget().toString()); // System.out.println("Target "+ targetLabel); boolean bestlabelIsCorrect = outClassifications.get(k).bestLabelIsCorrect(); // System.out.println("Prediction "+bestlabelIsCorrect); if (bestlabelIsCorrect) countCorrect++; else countIncorrect++; if ((predictedLabel == 1.0) && (targetLabel == 1.0)) p1l1++; else if ((predictedLabel == 1.0) && (targetLabel == 0.0)) p1l0++; else if ((predictedLabel == 0.0) && (targetLabel == 1.0)) p0l1++; else if ((predictedLabel == 0.0) && (targetLabel == 0.0)) p0l0++; } System.out.println("Count Correct " + countCorrect); System.out.println("Count Incorrect " + countIncorrect); System.out.println("p1l1 " + p1l1); System.out.println("p1l0 " + p1l0); System.out.println("p0l1 " + p0l1); System.out.println("p0l0 " + p0l0); } ArrayList<Double> results = new ArrayList<Double>(); double crossValidAccAvg = crossValidAccSum / count; double crossValidPrcAvg = crossValidPrcSum / count; double crossValidRecAvg = crossValidRecSum / count; double crossValidF1Avg = crossValidF1Sum / count; results.add(crossValidAccAvg); results.add(crossValidPrcAvg); results.add(crossValidRecAvg); results.add(crossValidF1Avg); return results; }