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 {