You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2009/09/08 14:41:29 UTC

svn commit: r812482 - in /lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender: ./ knn/ slopeone/ svd/

Author: srowen
Date: Tue Sep  8 12:41:28 2009
New Revision: 812482

URL: http://svn.apache.org/viewvc?rev=812482&view=rev
Log:
Improve calculation in the 'get all other items' methods. If an item is not preferred by anybody who has at least one item coocurring with the current user, then it can't possibly be recommended by any existing algorithm. By building up the set of possibilities more intelligently, a lot of work can be saved. Speed up was 50-400% in a couple tests using an item-based recommender. Made similar changes and refinements to related code across the board. (Thanks Gokhan)

Modified:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/AbstractRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericBooleanPrefUserBasedRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/KnnItemBasedRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDRecommender.java

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/AbstractRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/AbstractRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/AbstractRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/AbstractRecommender.java Tue Sep  8 12:41:28 2009
@@ -86,20 +86,23 @@
   /**
    * @param theUserID ID of user being evaluated
    * @return all items in the {@link DataModel} for which the user has not expressed a preference
+   *  and could possibly be recommended to the user
    * @throws TasteException if an error occurs while listing items
    */
   protected FastIDSet getAllOtherItems(long theUserID) throws TasteException {
-    FastIDSet allItemIDs = new FastIDSet(dataModel.getNumItems());
-    LongPrimitiveIterator it = dataModel.getItemIDs();
-    while (it.hasNext()) {
-      allItemIDs.add(it.nextLong());
+    FastIDSet possibleItemsIDs = new FastIDSet();
+    FastIDSet itemIDs = dataModel.getItemIDsFromUser(theUserID);
+    LongPrimitiveIterator itemIDIterator = itemIDs.iterator();
+    while (itemIDIterator.hasNext()) {
+      long itemID = itemIDIterator.next();
+      PreferenceArray prefs2 = dataModel.getPreferencesForItem(itemID);
+      int size2 = prefs2.length();
+      for (int j = 0; j < size2; j++) {
+        possibleItemsIDs.addAll(dataModel.getItemIDsFromUser(prefs2.getUserID(j)));
+      }
     }
-    PreferenceArray prefs = dataModel.getPreferencesFromUser(theUserID);
-    int size = prefs.length();
-    for (int i = 0; i < size; i++) {
-      allItemIDs.remove(prefs.getItemID(i));
-    }
-    return allItemIDs;
+    possibleItemsIDs.removeAll(itemIDs);
+    return possibleItemsIDs;
   }
 
 }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericBooleanPrefUserBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericBooleanPrefUserBasedRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericBooleanPrefUserBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericBooleanPrefUserBasedRecommender.java Tue Sep  8 12:41:28 2009
@@ -67,12 +67,12 @@
   protected FastIDSet getAllOtherItems(long[] theNeighborhood, long theUserID)
       throws TasteException {
     DataModel dataModel = getDataModel();
-    FastIDSet allItemIDs = new FastIDSet();
+    FastIDSet possibleItemIDs = new FastIDSet();
     for (long userID : theNeighborhood) {
-      allItemIDs.addAll(dataModel.getItemIDsFromUser(userID));
+      possibleItemIDs.addAll(dataModel.getItemIDsFromUser(userID));
     }
-    allItemIDs.removeAll(dataModel.getItemIDsFromUser(theUserID));
-    return allItemIDs;
+    possibleItemIDs.removeAll(dataModel.getItemIDsFromUser(theUserID));
+    return possibleItemIDs;
   }
 
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java Tue Sep  8 12:41:28 2009
@@ -22,7 +22,6 @@
 import org.apache.mahout.cf.taste.impl.common.FastIDSet;
 import org.apache.mahout.cf.taste.impl.common.FullRunningAverage;
 import org.apache.mahout.common.LongPair;
-import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
 import org.apache.mahout.cf.taste.impl.common.RefreshHelper;
 import org.apache.mahout.cf.taste.impl.common.RunningAverage;
 import org.apache.mahout.cf.taste.model.DataModel;
@@ -88,11 +87,11 @@
       return Collections.emptyList();
     }
 
-    FastIDSet allItemIDs = getAllOtherItems(userID);
+    FastIDSet possibleItemIDs = getAllOtherItems(userID);
 
     TopItems.Estimator<Long> estimator = new Estimator(userID);
 
-    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, allItemIDs.iterator(), rescorer, estimator);
+    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, possibleItemIDs.iterator(), rescorer, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return topItems;
@@ -118,7 +117,7 @@
                                                 int howMany,
                                                 Rescorer<LongPair> rescorer) throws TasteException {
     TopItems.Estimator<Long> estimator = new MostSimilarEstimator(itemID, similarity, rescorer);
-    return doMostSimilarItems(itemID, howMany, estimator);
+    return doMostSimilarItems(new long[] {itemID}, howMany, estimator);
   }
 
   @Override
@@ -130,15 +129,8 @@
   public List<RecommendedItem> mostSimilarItems(long[] itemIDs,
                                                 int howMany,
                                                 Rescorer<LongPair> rescorer) throws TasteException {
-    DataModel model = getDataModel();
     TopItems.Estimator<Long> estimator = new MultiMostSimilarEstimator(itemIDs, similarity, rescorer);
-    FastIDSet allItemIDs = new FastIDSet(model.getNumItems());
-    LongPrimitiveIterator it = model.getItemIDs();
-    while (it.hasNext()) {
-      allItemIDs.add(it.nextLong());
-    }
-    allItemIDs.removeAll(itemIDs);
-    return TopItems.getTopItems(howMany, allItemIDs.iterator(), null, estimator);
+    return doMostSimilarItems(itemIDs, howMany, estimator);
   }
 
   @Override
@@ -163,17 +155,21 @@
     return TopItems.getTopItems(howMany, allUserItems.iterator(), null, estimator);
   }
 
-  private List<RecommendedItem> doMostSimilarItems(long itemID,
+  private List<RecommendedItem> doMostSimilarItems(long[] itemIDs,
                                                    int howMany,
                                                    TopItems.Estimator<Long> estimator) throws TasteException {
     DataModel model = getDataModel();
-    FastIDSet allItemIDs = new FastIDSet(model.getNumItems());
-    LongPrimitiveIterator it = model.getItemIDs();
-    while (it.hasNext()) {
-      allItemIDs.add(it.nextLong());
+    FastIDSet possibleItemsIDs = new FastIDSet();
+    for (long itemID : itemIDs) {
+      PreferenceArray prefs = model.getPreferencesForItem(itemID);
+      int size = prefs.length();
+      for (int i = 0; i < size; i++) {
+        long userID = prefs.get(i).getUserID();
+        possibleItemsIDs.addAll(model.getItemIDsFromUser(userID));
+      }
     }
-    allItemIDs.remove(itemID);
-    return TopItems.getTopItems(howMany, allItemIDs.iterator(), null, estimator);
+    possibleItemsIDs.removeAll(itemIDs);
+    return TopItems.getTopItems(howMany, possibleItemsIDs.iterator(), null, estimator);
   }
 
   protected float doEstimatePreference(long userID, long itemID) throws TasteException {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java Tue Sep  8 12:41:28 2009
@@ -149,19 +149,12 @@
   protected FastIDSet getAllOtherItems(long[] theNeighborhood, long theUserID)
           throws TasteException {
     DataModel dataModel = getDataModel();
-    FastIDSet allItemIDs = new FastIDSet();
+    FastIDSet possibleItemIDs = new FastIDSet();
     for (long userID : theNeighborhood) {
-      PreferenceArray prefs = dataModel.getPreferencesFromUser(userID);
-      int size = prefs.length();
-      for (int i = 0; i < size; i++) {
-        long itemID = prefs.getItemID(i);
-        // If not already preferred by the user, add it
-        if (dataModel.getPreferenceValue(theUserID, itemID) == null) {
-          allItemIDs.add(itemID);
-        }
-      }
+      possibleItemIDs.addAll(dataModel.getItemIDsFromUser(userID));
     }
-    return allItemIDs;
+    possibleItemIDs.removeAll(dataModel.getItemIDsFromUser(theUserID));
+    return possibleItemIDs;
   }
 
   @Override

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java Tue Sep  8 12:41:28 2009
@@ -77,11 +77,11 @@
     log.debug("Recommending items for user ID '{}'", userID);
     checkAverageDiffsBuilt();
 
-    FastIDSet allItemIDs = getAllOtherItems(userID);
+    FastIDSet possibleItemIDs = getAllOtherItems(userID);
 
     TopItems.Estimator<Long> estimator = new Estimator();
 
-    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, allItemIDs.iterator(), rescorer, estimator);
+    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, possibleItemIDs.iterator(), rescorer, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return topItems;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java Tue Sep  8 12:41:28 2009
@@ -81,11 +81,11 @@
     log.debug("Recommending items for user ID '{}'", userID);
     checkAverageDiffsBuilt();
 
-    FastIDSet allItemIDs = getAllOtherItems(userID);
+    FastIDSet possibleItemIDs = getAllOtherItems(userID);
 
     TopItems.Estimator<Long> estimator = new Estimator(userID);
 
-    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, allItemIDs.iterator(), rescorer, estimator);
+    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, possibleItemIDs.iterator(), rescorer, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return topItems;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java Tue Sep  8 12:41:28 2009
@@ -39,17 +39,17 @@
   }
 
   public static List<RecommendedItem> getTopItems(int howMany,
-                                                  LongPrimitiveIterator allItemIDs,
+                                                  LongPrimitiveIterator possibleItemIDs,
                                                   Rescorer<Long> rescorer,
                                                   Estimator<Long> estimator) throws TasteException {
-    if (allItemIDs == null || estimator == null) {
+    if (possibleItemIDs == null || estimator == null) {
       throw new IllegalArgumentException("argument is null");
     }
     Queue<RecommendedItem> topItems = new PriorityQueue<RecommendedItem>(howMany + 1, Collections.reverseOrder());
     boolean full = false;
     double lowestTopValue = Double.NEGATIVE_INFINITY;
-    while (allItemIDs.hasNext()) {
-      long itemID = allItemIDs.next();
+    while (possibleItemIDs.hasNext()) {
+      long itemID = possibleItemIDs.next();
       if (rescorer == null || !rescorer.isFiltered(itemID)) {
         double preference = estimator.estimate(itemID);
         double rescoredPref = rescorer == null ? preference : rescorer.rescore(itemID, preference);

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java Tue Sep  8 12:41:28 2009
@@ -28,7 +28,6 @@
 import org.apache.mahout.cf.taste.impl.common.RefreshHelper;
 import org.apache.mahout.cf.taste.impl.common.RunningAverage;
 import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.PreferenceArray;
 import org.apache.mahout.cf.taste.recommender.ClusteringRecommender;
 import org.apache.mahout.cf.taste.recommender.RecommendedItem;
 import org.apache.mahout.cf.taste.recommender.Rescorer;
@@ -61,6 +60,7 @@
 
   private static final Logger log = LoggerFactory.getLogger(TreeClusteringRecommender.class);
 
+  private static final int NUM_CLUSTER_RECS = 100;
   private static final FastIDSet[] NO_CLUSTERS = new FastIDSet[0];
   private static final Random r = RandomUtils.getRandom();
 
@@ -363,26 +363,22 @@
   private List<RecommendedItem> computeTopRecsForCluster(FastIDSet cluster)
       throws TasteException {
     DataModel dataModel = getDataModel();
-    FastIDSet allItemIDs = new FastIDSet();
+    FastIDSet possibleItemIDs = new FastIDSet();
     LongPrimitiveIterator it = cluster.iterator();
     while (it.hasNext()) {
-      PreferenceArray prefs = dataModel.getPreferencesFromUser(it.next());
-      int size = prefs.length();
-      for (int i = 0; i < size; i++) {
-        allItemIDs.add(prefs.getItemID(i));
-      }
+      possibleItemIDs.addAll(dataModel.getItemIDsFromUser(it.next()));
     }
 
     TopItems.Estimator<Long> estimator = new Estimator(cluster);
 
-    // TODO don't hardcode 100, figure out some reasonable value
-    List<RecommendedItem> topItems = TopItems.getTopItems(100, allItemIDs.iterator(), null, estimator);
+    List<RecommendedItem> topItems =
+        TopItems.getTopItems(NUM_CLUSTER_RECS, possibleItemIDs.iterator(), null, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return Collections.unmodifiableList(topItems);
   }
 
-  private static FastByIDMap<FastIDSet> computeClustersPerUserID(List<FastIDSet> clusters) {
+  private static FastByIDMap<FastIDSet> computeClustersPerUserID(Collection<FastIDSet> clusters) {
     FastByIDMap<FastIDSet> clustersPerUser = new FastByIDMap<FastIDSet>(clusters.size());
     for (FastIDSet cluster : clusters) {
       LongPrimitiveIterator it = cluster.iterator();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java Tue Sep  8 12:41:28 2009
@@ -27,7 +27,6 @@
 import org.apache.mahout.cf.taste.impl.common.RefreshHelper;
 import org.apache.mahout.cf.taste.impl.common.RunningAverage;
 import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.PreferenceArray;
 import org.apache.mahout.cf.taste.recommender.ClusteringRecommender;
 import org.apache.mahout.cf.taste.recommender.RecommendedItem;
 import org.apache.mahout.cf.taste.recommender.Rescorer;
@@ -65,6 +64,8 @@
 
   private static final Logger log = LoggerFactory.getLogger(TreeClusteringRecommender2.class);
 
+  private static final int NUM_CLUSTER_RECS = 100;
+
   private final ClusterSimilarity clusterSimilarity;
   private final int numClusters;
   private final double clusteringThreshold;
@@ -230,15 +231,15 @@
       this.similarity = similarity;
     }
 
-    private FastIDSet getCluster1() {
+    FastIDSet getCluster1() {
       return cluster1;
     }
 
-    private FastIDSet getCluster2() {
+    FastIDSet getCluster2() {
       return cluster2;
     }
 
-    private double getSimilarity() {
+    double getSimilarity() {
       return similarity;
     }
 
@@ -429,7 +430,8 @@
     return queue;
   }
 
-  private FastByIDMap<List<RecommendedItem>> computeTopRecsPerUserID(Iterable<FastIDSet> clusters) throws TasteException {
+  private FastByIDMap<List<RecommendedItem>> computeTopRecsPerUserID(Iterable<FastIDSet> clusters)
+          throws TasteException {
     FastByIDMap<List<RecommendedItem>> recsPerUser = new FastByIDMap<List<RecommendedItem>>();
     for (FastIDSet cluster : clusters) {
       List<RecommendedItem> recs = computeTopRecsForCluster(cluster);
@@ -445,20 +447,16 @@
       throws TasteException {
 
     DataModel dataModel = getDataModel();
-    FastIDSet allItemIDs = new FastIDSet();
+    FastIDSet possibleItemIDs = new FastIDSet();
     LongPrimitiveIterator it = cluster.iterator();
     while (it.hasNext()) {
-      PreferenceArray prefs = dataModel.getPreferencesFromUser(it.next());
-      int size = prefs.length();
-      for (int i = 0; i < size; i++) {
-        allItemIDs.add(prefs.getItemID(i));
-      }
+      possibleItemIDs.addAll(dataModel.getItemIDsFromUser(it.next()));
     }
 
     TopItems.Estimator<Long> estimator = new Estimator(cluster);
 
     List<RecommendedItem> topItems =
-        TopItems.getTopItems(Integer.MAX_VALUE, allItemIDs.iterator(), null, estimator);
+        TopItems.getTopItems(NUM_CLUSTER_RECS, possibleItemIDs.iterator(), null, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return Collections.unmodifiableList(topItems);

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/KnnItemBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/KnnItemBasedRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/KnnItemBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/KnnItemBasedRecommender.java Tue Sep  8 12:41:28 2009
@@ -50,12 +50,12 @@
   }
 
   private List<RecommendedItem> mostSimilarItems(long itemID,
-                                                 LongPrimitiveIterator allItemIDs,
+                                                 LongPrimitiveIterator possibleItemIDs,
                                                  int howMany,
                                                  Rescorer<LongPair> rescorer)
           throws TasteException {
     TopItems.Estimator<Long> estimator = new MostSimilarEstimator(itemID, getSimilarity(), rescorer);
-    return TopItems.getTopItems(howMany, allItemIDs, null, estimator);
+    return TopItems.getTopItems(howMany, possibleItemIDs, null, estimator);
   }
 
 
@@ -118,15 +118,15 @@
   protected float doEstimatePreference(long theUserID, long itemID) throws TasteException {
 
     DataModel dataModel = getDataModel();
-    FastIDSet allItemIDs = new FastIDSet();
     PreferenceArray prefs = dataModel.getPreferencesFromUser(theUserID);
     int size = prefs.length();
+    FastIDSet possibleItemIDs = new FastIDSet(size);    
     for (int i = 0; i < size; i++) {
-      allItemIDs.add(prefs.getItemID(i));
+      possibleItemIDs.add(prefs.getItemID(i));
     }
-    allItemIDs.remove(itemID);
+    possibleItemIDs.remove(itemID);
 
-    List<RecommendedItem> mostSimilar = mostSimilarItems(itemID, allItemIDs.iterator(), neighborhoodSize, null);
+    List<RecommendedItem> mostSimilar = mostSimilarItems(itemID, possibleItemIDs.iterator(), neighborhoodSize, null);
     long[] theNeighborhood = new long[mostSimilar.size()];
     int nOffset = 0;
     for (RecommendedItem rec : mostSimilar) {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java Tue Sep  8 12:41:28 2009
@@ -103,11 +103,11 @@
 
     log.debug("Recommending items for user ID '{}'", userID);
 
-    FastIDSet allItemIDs = diffStorage.getRecommendableItemIDs(userID);
+    FastIDSet possibleItemIDs = diffStorage.getRecommendableItemIDs(userID);
 
     TopItems.Estimator<Long> estimator = new Estimator(userID);
 
-    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, allItemIDs.iterator(), rescorer, estimator);
+    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, possibleItemIDs.iterator(), rescorer, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return topItems;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDRecommender.java?rev=812482&r1=812481&r2=812482&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDRecommender.java Tue Sep  8 12:41:28 2009
@@ -184,11 +184,11 @@
 
     log.debug("Recommending items for user ID '{}'", userID);
 
-    FastIDSet allItemIDs = getAllOtherItems(userID);
+    FastIDSet possibleItemIDs = getAllOtherItems(userID);
 
     TopItems.Estimator<Long> estimator = new Estimator(userID);
 
-    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, allItemIDs.iterator(), rescorer, estimator);
+    List<RecommendedItem> topItems = TopItems.getTopItems(howMany, possibleItemIDs.iterator(), rescorer, estimator);
 
     log.debug("Recommendations are: {}", topItems);
     return topItems;