public void evaluate(List<Sample> sampleList, Algorithm algorithm) { List<Score> scoreList = new ArrayList<Score>(); for (Sample sample : sampleList) { scoreList.add(new Score(algorithm.predict(sample.getFeature()), sample.getLabel())); } Collections.sort(scoreList, new ComparatorScore()); double counter = 0; double rankSum = 0; double positiveSample = 0; double negtiveSample = 0; for (Score s : scoreList) { if (s.label > 0) { rankSum += scoreList.size() - counter; positiveSample++; } else { negtiveSample++; } counter++; } // report. System.out.println("AUC: " + AUC.measure(algorithm, sampleList)); System.out.println( "AUC: " + (positiveSample > 0 && negtiveSample > 0 ? 1.0d * (rankSum - positiveSample * (positiveSample + 1) / 2) / (positiveSample * negtiveSample) : 1)); System.out.println("Positive sample number: " + positiveSample); System.out.println("Negative sample number: " + negtiveSample); System.out.println("Max score: " + scoreList.get(0).score); System.out.println("Middle score: " + scoreList.get(scoreList.size() / 2).score); System.out.println("Min score: " + scoreList.get(scoreList.size() - 1).score); }