public static void main(String[] args) throws IOException { String inputFile = args[1]; Auc x1 = new Auc(); OnlineAuc x2 = new GlobalOnlineAuc(); BufferedReader in = new BufferedReader(new FileReader(inputFile)); int lineCount = 0; String line = in.readLine(); while (line != null) { lineCount++; String[] pieces = line.split(","); double score = Double.parseDouble(pieces[0]); int target = Integer.parseInt(pieces[1]); x1.add(target, score); x2.addSample(target, score); if (lineCount%500 == 0) { System.out.printf("%10d\t%10.3f\t%10d\t%.3f\n", lineCount, score, target, x2.auc()); } line = in.readLine(); } System.out.printf("%d lines read\n", lineCount); System.out.printf("%10.2f = batch estimate\n", x1.auc()); System.out.printf("%10.2f = on-line estimate\n", x2.auc()); } }
@Test public void testAuc() { Auc auc = new Auc(); Random gen = RandomUtils.getRandom(); auc.setProbabilityScore(false); for (int i=0; i<100000; i++) { auc.add(0, gen.nextGaussian()); auc.add(1, gen.nextGaussian() + 1); } assertEquals(0.76, auc.auc(), 0.01); }
@Test public void testTies() { Auc auc = new Auc(); Random gen = RandomUtils.getRandom(); auc.setProbabilityScore(false); for (int i=0; i<100000; i++) { auc.add(0, gen.nextGaussian()); auc.add(1, gen.nextGaussian() + 1); } // ties outside the normal range could cause index out of range auc.add(0, 5.0); auc.add(0, 5.0); auc.add(0, 5.0); auc.add(0, 5.0); auc.add(1, 5.0); auc.add(1, 5.0); auc.add(1, 5.0); assertEquals(0.76, auc.auc(), 0.05); }
stats[1].add(a2.auc()); stats[2].add(a3.auc()); stats[3].add(a4.auc());