/** * 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; }
/** * 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; }
/** * 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; }
private double getEvaluation(FastByIDMap<PreferenceArray> testPrefs, Recommender recommender) throws TasteException { reset(); Collection<Callable<Void>> estimateCallables = new ArrayList<>(); AtomicInteger noEstimateCounter = new AtomicInteger(); for (Map.Entry<Long,PreferenceArray> entry : testPrefs.entrySet()) { estimateCallables.add( new PreferenceEstimateCallable(recommender, entry.getKey(), entry.getValue(), noEstimateCounter)); } log.info("Beginning evaluation of {} users", estimateCallables.size()); RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); execute(estimateCallables, noEstimateCounter, timing); return computeFinalEvaluation(); }
private double getEvaluation(FastByIDMap<PreferenceArray> testPrefs, Recommender recommender) throws TasteException { reset(); Collection<Callable<Void>> estimateCallables = Lists.newArrayList(); AtomicInteger noEstimateCounter = new AtomicInteger(); for (Map.Entry<Long,PreferenceArray> entry : testPrefs.entrySet()) { estimateCallables.add( new PreferenceEstimateCallable(recommender, entry.getKey(), entry.getValue(), noEstimateCounter)); } log.info("Beginning evaluation of {} users", estimateCallables.size()); RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); execute(estimateCallables, noEstimateCounter, timing); return computeFinalEvaluation(); }
private double getEvaluation(FastByIDMap<PreferenceArray> testPrefs, Recommender recommender) throws TasteException { reset(); Collection<Callable<Void>> estimateCallables = Lists.newArrayList(); AtomicInteger noEstimateCounter = new AtomicInteger(); for (Map.Entry<Long,PreferenceArray> entry : testPrefs.entrySet()) { estimateCallables.add( new PreferenceEstimateCallable(recommender, entry.getKey(), entry.getValue(), noEstimateCounter)); } log.info("Beginning evaluation of {} users", estimateCallables.size()); RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); execute(estimateCallables, noEstimateCounter, timing); return computeFinalEvaluation(); }
@Test(expected = UnsupportedOperationException.class) public void testAndStdDevUnsupported1() { RunningAverage inverted = new InvertedRunningAverageAndStdDev(new FullRunningAverageAndStdDev()); inverted.addDatum(1.0); }
@Test(expected = UnsupportedOperationException.class) public void testAndStdDevUnsupported3() { RunningAverage inverted = new InvertedRunningAverageAndStdDev(new FullRunningAverageAndStdDev()); inverted.removeDatum(1.0); }
@Test(expected = UnsupportedOperationException.class) public void testAndStdDevUnsupported2() { RunningAverage inverted = new InvertedRunningAverageAndStdDev(new FullRunningAverageAndStdDev()); inverted.changeDatum(1.0); }
RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); execute(estimateCallables, noEstimateCounter, timing);
public static LoadStatistics runLoad(Recommender recommender, int howMany) throws TasteException { DataModel dataModel = recommender.getDataModel(); int numUsers = dataModel.getNumUsers(); double sampleRate = 1000.0 / numUsers; LongPrimitiveIterator userSampler = SamplingLongPrimitiveIterator.maybeWrapIterator(dataModel.getUserIDs(), sampleRate); recommender.recommend(userSampler.next(), howMany); // Warm up Collection<Callable<Void>> callables = new ArrayList<>(); while (userSampler.hasNext()) { callables.add(new LoadCallable(recommender, userSampler.next())); } AtomicInteger noEstimateCounter = new AtomicInteger(); RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); AbstractDifferenceRecommenderEvaluator.execute(callables, noEstimateCounter, timing); return new LoadStatistics(timing); }
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(); }
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(); }
public static LoadStatistics runLoad(Recommender recommender, int howMany) throws TasteException { DataModel dataModel = recommender.getDataModel(); int numUsers = dataModel.getNumUsers(); double sampleRate = 1000.0 / numUsers; LongPrimitiveIterator userSampler = SamplingLongPrimitiveIterator.maybeWrapIterator(dataModel.getUserIDs(), sampleRate); recommender.recommend(userSampler.next(), howMany); // Warm up Collection<Callable<Void>> callables = Lists.newArrayList(); while (userSampler.hasNext()) { callables.add(new LoadCallable(recommender, userSampler.next())); } AtomicInteger noEstimateCounter = new AtomicInteger(); RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); AbstractDifferenceRecommenderEvaluator.execute(callables, noEstimateCounter, timing); return new LoadStatistics(timing); }
public static LoadStatistics runLoad(Recommender recommender, int howMany) throws TasteException { DataModel dataModel = recommender.getDataModel(); int numUsers = dataModel.getNumUsers(); double sampleRate = 1000.0 / numUsers; LongPrimitiveIterator userSampler = SamplingLongPrimitiveIterator.maybeWrapIterator(dataModel.getUserIDs(), sampleRate); recommender.recommend(userSampler.next(), howMany); // Warm up Collection<Callable<Void>> callables = Lists.newArrayList(); while (userSampler.hasNext()) { callables.add(new LoadCallable(recommender, userSampler.next())); } AtomicInteger noEstimateCounter = new AtomicInteger(); RunningAverageAndStdDev timing = new FullRunningAverageAndStdDev(); AbstractDifferenceRecommenderEvaluator.execute(callables, noEstimateCounter, timing); return new LoadStatistics(timing); }
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(); }
@Test public void testFullBig() { RunningAverageAndStdDev average = new FullRunningAverageAndStdDev(); Random r = RandomUtils.getRandom(); for (int i = 0; i < 100000; i++) { average.addDatum(r.nextDouble() * 1000.0); } assertEquals(500.0, average.getAverage(), SMALL_EPSILON); assertEquals(1000.0 / Math.sqrt(12.0), average.getStandardDeviation(), SMALL_EPSILON); }
@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); }
@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())); }
@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); }