Author: srowen
Date: Thu Aug  7 21:42:39 2008
New Revision: 683848

URL: http://svn.apache.org/viewvc?rev=683848&view=rev
Log:
Better idea for caching: limit size based on a simple heuristic

Modified:
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingItemCorrelation.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingUserCorrelation.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/CachingUserNeighborhood.java

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingItemCorrelation.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingItemCorrelation.java?rev=683848&r1=683847&r2=683848&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingItemCorrelation.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingItemCorrelation.java
 Thu Aug  7 21:42:39 2008
@@ -19,6 +19,7 @@
 
 import org.apache.mahout.cf.taste.correlation.ItemCorrelation;
 import org.apache.mahout.cf.taste.model.Item;
+import org.apache.mahout.cf.taste.model.DataModel;
 import org.apache.mahout.cf.taste.common.TasteException;
 import org.apache.mahout.cf.taste.impl.common.Pair;
 import org.apache.mahout.cf.taste.impl.common.Cache;
@@ -32,12 +33,13 @@
   private final ItemCorrelation correlation;
   private final Cache<Pair<Item, Item>, Double> correlationCache;
 
-  public CachingItemCorrelation(ItemCorrelation correlation) {
+  public CachingItemCorrelation(ItemCorrelation correlation, DataModel 
dataModel) throws TasteException {
     if (correlation == null) {
       throw new IllegalArgumentException("correlation is null");
     }
     this.correlation = correlation;
-    this.correlationCache = new Cache<Pair<Item, Item>, Double>(new 
CorrelationRetriever(correlation));
+    int maxCacheSize = dataModel.getNumItems(); // just a dumb heuristic for 
sizing
+    this.correlationCache = new Cache<Pair<Item, Item>, Double>(new 
CorrelationRetriever(correlation), maxCacheSize);
   }
 
   public double itemCorrelation(Item item1, Item item2) throws TasteException {

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingUserCorrelation.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingUserCorrelation.java?rev=683848&r1=683847&r2=683848&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingUserCorrelation.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/correlation/CachingUserCorrelation.java
 Thu Aug  7 21:42:39 2008
@@ -20,6 +20,7 @@
 import org.apache.mahout.cf.taste.correlation.UserCorrelation;
 import org.apache.mahout.cf.taste.correlation.PreferenceInferrer;
 import org.apache.mahout.cf.taste.model.User;
+import org.apache.mahout.cf.taste.model.DataModel;
 import org.apache.mahout.cf.taste.common.TasteException;
 import org.apache.mahout.cf.taste.impl.common.Pair;
 import org.apache.mahout.cf.taste.impl.common.Cache;
@@ -33,12 +34,13 @@
   private final UserCorrelation correlation;
   private final Cache<Pair<User, User>, Double> correlationCache;
 
-  public CachingUserCorrelation(UserCorrelation correlation) {
+  public CachingUserCorrelation(UserCorrelation correlation, DataModel 
dataModel) throws TasteException {
     if (correlation == null) {
       throw new IllegalArgumentException("correlation is null");
     }
     this.correlation = correlation;
-    this.correlationCache = new Cache<Pair<User, User>, Double>(new 
CorrelationRetriever(correlation));
+    int maxCacheSize = dataModel.getNumUsers(); // just a dumb heuristic for 
sizing    
+    this.correlationCache = new Cache<Pair<User, User>, Double>(new 
CorrelationRetriever(correlation), maxCacheSize);
   }
 
   public double userCorrelation(User user1, User user2) throws TasteException {

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/CachingUserNeighborhood.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/CachingUserNeighborhood.java?rev=683848&r1=683847&r2=683848&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/CachingUserNeighborhood.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/CachingUserNeighborhood.java
 Thu Aug  7 21:42:39 2008
@@ -19,6 +19,7 @@
 
 import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
 import org.apache.mahout.cf.taste.model.User;
+import org.apache.mahout.cf.taste.model.DataModel;
 import org.apache.mahout.cf.taste.common.TasteException;
 import org.apache.mahout.cf.taste.impl.common.Cache;
 import org.apache.mahout.cf.taste.impl.common.Retriever;
@@ -33,12 +34,13 @@
   private final UserNeighborhood neighborhood;
   private final Cache<Object, Collection<User>> neighborhoodCache;
 
-  public CachingUserNeighborhood(UserNeighborhood neighborhood) {
+  public CachingUserNeighborhood(UserNeighborhood neighborhood, DataModel 
dataModel) throws TasteException {
     if (neighborhood == null) {
       throw new IllegalArgumentException("neighborhood is null");
     }
     this.neighborhood = neighborhood;
-    this.neighborhoodCache = new Cache<Object, Collection<User>>(new 
NeighborhoodRetriever(neighborhood));
+    int maxCacheSize = (int) Math.sqrt(dataModel.getNumUsers()); // just a 
dumb heuristic for sizing
+    this.neighborhoodCache = new Cache<Object, Collection<User>>(new 
NeighborhoodRetriever(neighborhood), maxCacheSize);
   }
 
   public Collection<User> getUserNeighborhood(Object userID) throws 
TasteException {


Reply via email to