@Override public double getAverage() { return -delegate.getAverage(); }
@Override public int getCount() { return delegate.getCount(); }
@Override public double getStandardDeviation() { return delegate.getStandardDeviation(); }
@Test public void testAverageAndStdDev() { RunningAverageAndStdDev avg = new FullRunningAverageAndStdDev(); RunningAverageAndStdDev inverted = new InvertedRunningAverageAndStdDev(avg); assertEquals(0, inverted.getCount()); avg.addDatum(1.0); assertEquals(1, inverted.getCount()); assertEquals(-1.0, inverted.getAverage(), EPSILON); avg.addDatum(2.0); assertEquals(2, inverted.getCount()); assertEquals(-1.5, inverted.getAverage(), EPSILON); assertEquals(Math.sqrt(2.0)/2.0, inverted.getStandardDeviation(), EPSILON); }
private static double computeThreshold(PreferenceArray prefs) { if (prefs.length() < 2) { // Not enough data points -- return a threshold that allows everything return Double.NEGATIVE_INFINITY; } RunningAverageAndStdDev stdDev = new FullRunningAverageAndStdDev(); int size = prefs.length(); for (int i = 0; i < size; i++) { stdDev.addDatum(prefs.getValue(i)); } return stdDev.getAverage() + stdDev.getStandardDeviation(); }
@Override public Void call() throws Exception { long start = System.currentTimeMillis(); delegate.call(); long end = System.currentTimeMillis(); timing.addDatum(end - start); if (logStats) { Runtime runtime = Runtime.getRuntime(); int average = (int) timing.getAverage(); log.info("Average time per recommendation: {}ms", average); long totalMemory = runtime.totalMemory(); long memory = totalMemory - runtime.freeMemory(); log.info("Approximate memory used: {}MB / {}MB", memory / 1000000L, totalMemory / 1000000L); log.info("Unable to recommend in {} cases", noEstimateCounter.get()); } return null; }
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');
/** * Standard deviation of normalized producer accuracy * Not a standard score * @return double */ public RunningAverageAndStdDev getNormalizedStats() { RunningAverageAndStdDev summer = new FullRunningAverageAndStdDev(); for (int d = 0; d < confusionMatrix.length; d++) { double total = 0; for (int j = 0; j < confusionMatrix.length; j++) { total += confusionMatrix[d][j]; } summer.addDatum(confusionMatrix[d][d] / (total + 0.000001)); } return summer; }
@Test public void testStddev() { RunningAverageAndStdDev runningAverage = new FullRunningAverageAndStdDev(); assertEquals(0, runningAverage.getCount()); assertTrue(Double.isNaN(runningAverage.getAverage())); runningAverage.addDatum(1.0); assertEquals(1, runningAverage.getCount()); assertEquals(1.0, runningAverage.getAverage(), EPSILON); assertTrue(Double.isNaN(runningAverage.getStandardDeviation())); runningAverage.addDatum(1.0); assertEquals(2, runningAverage.getCount()); assertEquals(1.0, runningAverage.getAverage(), EPSILON); assertEquals(0.0, runningAverage.getStandardDeviation(), EPSILON); runningAverage.addDatum(7.0); assertEquals(3, runningAverage.getCount()); assertEquals(3.0, runningAverage.getAverage(), EPSILON); assertEquals(3.464101552963257, runningAverage.getStandardDeviation(), EPSILON); runningAverage.addDatum(5.0); assertEquals(4, runningAverage.getCount()); assertEquals(3.5, runningAverage.getAverage(), EPSILON); assertEquals(3.0, runningAverage.getStandardDeviation(), EPSILON); }
private static double computeThreshold(PreferenceArray prefs) { if (prefs.length() < 2) { // Not enough data points -- return a threshold that allows everything return Double.NEGATIVE_INFINITY; } RunningAverageAndStdDev stdDev = new FullRunningAverageAndStdDev(); int size = prefs.length(); for (int i = 0; i < size; i++) { stdDev.addDatum(prefs.getValue(i)); } return stdDev.getAverage() + stdDev.getStandardDeviation(); }
@Override public Void call() throws Exception { long start = System.currentTimeMillis(); delegate.call(); long end = System.currentTimeMillis(); timing.addDatum(end - start); if (logStats) { Runtime runtime = Runtime.getRuntime(); int average = (int) timing.getAverage(); log.info("Average time per recommendation: {}ms", average); long totalMemory = runtime.totalMemory(); long memory = totalMemory - runtime.freeMemory(); log.info("Approximate memory used: {}MB / {}MB", memory / 1000000L, totalMemory / 1000000L); log.info("Unable to recommend in {} cases", noEstimateCounter.get()); } return null; }
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');
/** * Standard deviation of normalized producer accuracy * Not a standard score * @return double */ public RunningAverageAndStdDev getNormalizedStats() { RunningAverageAndStdDev summer = new FullRunningAverageAndStdDev(); for (int d = 0; d < confusionMatrix.length; d++) { double total = 0; for (int j = 0; j < confusionMatrix.length; j++) { total += confusionMatrix[d][j]; } summer.addDatum(confusionMatrix[d][d] / (total + 0.000001)); } return summer; }
@Test public void testFull() { RunningAverageAndStdDev average = new FullRunningAverageAndStdDev(); assertEquals(0, average.getCount()); assertTrue(Double.isNaN(average.getAverage())); assertTrue(Double.isNaN(average.getStandardDeviation())); average.addDatum(6.0); assertEquals(1, average.getCount()); assertEquals(6.0, average.getAverage(), EPSILON); assertTrue(Double.isNaN(average.getStandardDeviation())); average.addDatum(6.0); assertEquals(2, average.getCount()); assertEquals(6.0, average.getAverage(), EPSILON); assertEquals(0.0, average.getStandardDeviation(), EPSILON); average.removeDatum(6.0); assertEquals(1, average.getCount()); assertEquals(6.0, average.getAverage(), EPSILON); assertTrue(Double.isNaN(average.getStandardDeviation())); average.addDatum(-4.0); assertEquals(2, average.getCount()); assertEquals(1.0, average.getAverage(), EPSILON); assertEquals(5.0 * 1.4142135623730951, average.getStandardDeviation(), EPSILON); average.removeDatum(4.0); assertEquals(1, average.getCount()); assertEquals(-2.0, average.getAverage(), EPSILON); assertTrue(Double.isNaN(average.getStandardDeviation())); }
private static double computeThreshold(PreferenceArray prefs) { if (prefs.length() < 2) { // Not enough data points -- return a threshold that allows everything return Double.NEGATIVE_INFINITY; } RunningAverageAndStdDev stdDev = new FullRunningAverageAndStdDev(); int size = prefs.length(); for (int i = 0; i < size; i++) { stdDev.addDatum(prefs.getValue(i)); } return stdDev.getAverage() + stdDev.getStandardDeviation(); }
@Override public Void call() throws Exception { long start = System.currentTimeMillis(); delegate.call(); long end = System.currentTimeMillis(); timing.addDatum(end - start); if (logStats) { Runtime runtime = Runtime.getRuntime(); int average = (int) timing.getAverage(); log.info("Average time per recommendation: {}ms", average); long totalMemory = runtime.totalMemory(); long memory = totalMemory - runtime.freeMemory(); log.info("Approximate memory used: {}MB / {}MB", memory / 1000000L, totalMemory / 1000000L); log.info("Unable to recommend in {} cases", noEstimateCounter.get()); } return null; }
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');
@Override public int getCount() { return delegate.getCount(); }
@Override public double getStandardDeviation() { return delegate.getStandardDeviation(); }
@Override public double getAverage() { return -delegate.getAverage(); }