Package org.apache.mahout.cf.taste.impl.common

Examples of org.apache.mahout.cf.taste.impl.common.RunningAverage


  @Override
  double getEvaluation(Map<User, Collection<Preference>> testUserPrefs,
                       Recommender recommender)
          throws TasteException {
    RunningAverage average = new FullRunningAverage();
    for (Map.Entry<User, Collection<Preference>> entry : testUserPrefs.entrySet()) {
      for (Preference realPref : entry.getValue()) {
        User testUser = entry.getKey();
        try {
          double estimatedPreference =
                  recommender.estimatePreference(testUser.getID(), realPref.getItem().getID());
          if (!Double.isNaN(estimatedPreference)) {
            double diff = realPref.getValue() - estimatedPreference;
            average.addDatum(diff * diff);
          }
        } catch (NoSuchUserException nsee) {
          // It's possible that an item exists in the test data but not training data in which case
          // NSEE will be thrown. Just ignore it and move on.
          log.info("Element exists in test data but not training data: {}", testUser.getID(), nsee);
        }
      }
    }
    return Math.sqrt(average.getAverage());
  }
View Full Code Here


  @Override
  double getEvaluation(Map<User, Collection<Preference>> testUserPrefs,
                       Recommender recommender)
          throws TasteException {
    RunningAverage average = new FullRunningAverage();
    for (Map.Entry<User, Collection<Preference>> entry : testUserPrefs.entrySet()) {
      for (Preference realPref : entry.getValue()) {
        User testUser = entry.getKey();
        try {
          double estimatedPreference =
                  recommender.estimatePreference(testUser.getID(), realPref.getItem().getID());
          if (!Double.isNaN(estimatedPreference)) {
            average.addDatum(Math.abs(realPref.getValue() - estimatedPreference));
          }
        } catch (NoSuchUserException nsue) {
          // It's possible that an item exists in the test data but not training data in which case
          // NSEE will be thrown. Just ignore it and move on.
          log.debug("User exists in test data but not training data: {}", testUser.getID(), nsue);
        } catch (NoSuchItemException nsie) {
          log.debug("Item exists in test data but not training data: {}", realPref.getItem().getID(), nsie);
        }
      }
    }
    return average.getAverage();
  }
View Full Code Here

    if (Double.isNaN(relevanceThreshold)) {
      throw new IllegalArgumentException("Invalid relevanceThreshold: " + evaluationPercentage);
    }

    int numItems = dataModel.getNumItems();
    RunningAverage precision = new FullRunningAverage();
    RunningAverage recall = new FullRunningAverage();
    RunningAverage fallOut = new FullRunningAverage();
    for (User user : dataModel.getUsers()) {
      if (random.nextDouble() < evaluationPercentage) {
        Object id = user.getID();
        Collection<Item> relevantItems = new FastSet<Item>(at);
        Preference[] prefs = user.getPreferencesAsArray();
        double theRelevanceThreshold = Double.isNaN(relevanceThreshold) ? computeThreshold(prefs) : relevanceThreshold;
        for (Preference pref : prefs) {
          if (pref.getValue() >= theRelevanceThreshold) {
            relevantItems.add(pref.getItem());
          }
        }
        int numRelevantItems = relevantItems.size();
        if (numRelevantItems > 0) {
          List<User> trainingUsers = new ArrayList<User>(dataModel.getNumUsers());
          for (User user2 : dataModel.getUsers()) {
            processOtherUser(id, relevantItems, trainingUsers, user2);
          }
          DataModel trainingModel = new GenericDataModel(trainingUsers);
          Recommender recommender = recommenderBuilder.buildRecommender(trainingModel);

          try {
            trainingModel.getUser(id);
          } catch (NoSuchUserException nsee) {
            continue; // Oops we excluded all prefs for the user -- just move on
          }

          int intersectionSize = 0;
          List<RecommendedItem> recommendedItems = recommender.recommend(id, at, rescorer);
          for (RecommendedItem recommendedItem : recommendedItems) {
            if (relevantItems.contains(recommendedItem.getItem())) {
              intersectionSize++;
            }
          }
          int numRecommendedItems = recommendedItems.size();
          if (numRecommendedItems > 0) {
            precision.addDatum((double) intersectionSize / (double) numRecommendedItems);
          }
          recall.addDatum((double) intersectionSize / (double) numRelevantItems);
          if (numRelevantItems < prefs.length) {
            fallOut.addDatum((double) (numRecommendedItems - intersectionSize) /
                             (double) (numItems - numRelevantItems));
          }

          log.info("Precision/recall/fall-out: {} / {} / {}", new Object[] {
              precision.getAverage(), recall.getAverage(), fallOut.getAverage()
          });
        }
      }
    }

    return new IRStatisticsImpl(precision.getAverage(), recall.getAverage(), fallOut.getAverage());
  }
View Full Code Here

      this.cluster = cluster;
    }

    @Override
    public double estimate(Item item) {
      RunningAverage average = new FullRunningAverage();
      for (User user : cluster) {
        Preference pref = user.getPreferenceFor(item.getID());
        if (pref != null) {
          average.addDatum(pref.getValue());
        }
      }
      return average.getAverage();
    }
View Full Code Here

      this.rescorer = rescorer;
    }

    @Override
    public double estimate(Item item) throws TasteException {
      RunningAverage average = new FullRunningAverage();
      for (Item toItem : toItems) {
        Pair<Item, Item> pair = new Pair<Item, Item>(toItem, item);
        if (rescorer != null && rescorer.isFiltered(pair)) {
          continue;
        }
        double estimate = similarity.itemSimilarity(toItem, item);
        if (rescorer != null) {
          estimate = rescorer.rescore(pair, estimate);
        }
        average.addDatum(estimate);
      }
      return average.getAverage();
    }
View Full Code Here

public class MemoryDiffStorageTest extends TasteTestCase {

  public void testGetDiff() throws Exception {
    DataModel model = new GenericDataModel(getMockUsers());
    MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
    RunningAverage average = storage.getDiff("1", "2");
    assertEquals(0.23333333333333334, average.getAverage(), EPSILON);
    assertEquals(3, average.getCount());
  }
View Full Code Here

  public void testUpdate() throws Exception {
    DataModel model = new GenericDataModel(getMockUsers());
    MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
    storage.updateItemPref("1", 0.5, false);
    RunningAverage average = storage.getDiff("1", "2");
    assertEquals(0.06666666666666668, average.getAverage(), EPSILON);
    assertEquals(3, average.getCount());
  }
View Full Code Here

  public void testRemove() throws Exception {
    DataModel model = new GenericDataModel(getMockUsers());
    MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
    storage.updateItemPref("1", 0.5, true);
    RunningAverage average = storage.getDiff("1", "2");
    assertEquals(0.1, average.getAverage(), EPSILON);
    assertEquals(2, average.getCount());
  }
View Full Code Here

 
  @Test
  public void testGetDiff() throws Exception {
    DataModel model = getDataModel();
    MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, Long.MAX_VALUE);
    RunningAverage average = storage.getDiff(1, 2);
    assertEquals(0.23333333333333334, average.getAverage(), EPSILON);
    assertEquals(3, average.getCount());
  }
View Full Code Here

  @Test
  public void testAdd() throws Exception {
    DataModel model = getDataModel();
    MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, Long.MAX_VALUE);
   
    RunningAverage average1 = storage.getDiff(0, 2);
    assertEquals(0.1, average1.getAverage(), EPSILON);
    assertEquals(3, average1.getCount());
   
    RunningAverage average2 = storage.getDiff(1, 2);
    assertEquals(0.23333332935969034, average2.getAverage(), EPSILON);
    assertEquals(3, average2.getCount());
   
    storage.addItemPref(1, 2, 0.8f);
   
    average1 = storage.getDiff(0, 2);
    assertEquals(0.25, average1.getAverage(), EPSILON);
    assertEquals(4, average1.getCount());
   
    average2 = storage.getDiff(1, 2);
    assertEquals(0.3, average2.getAverage(), EPSILON);
    assertEquals(4, average2.getCount());
  }
View Full Code Here

TOP

Related Classes of org.apache.mahout.cf.taste.impl.common.RunningAverage

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.