Author: srowen
Date: Sun Mar 27 14:03:20 2011
New Revision: 1085939
URL: http://svn.apache.org/viewvc?rev=1085939&view=rev
Log:
MAHOUT-636 remove compact averages
Removed:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/CompactRunningAverage.java
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/CompactRunningAverageAndStdDev.java
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/RefreshRunnable.java
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageAndStdDevTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java?rev=1085939&r1=1085938&r2=1085939&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java
Sun Mar 27 14:03:20 2011
@@ -27,8 +27,6 @@ import java.util.concurrent.locks.Reentr
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.common.Weighting;
-import org.apache.mahout.cf.taste.impl.common.CompactRunningAverage;
-import org.apache.mahout.cf.taste.impl.common.CompactRunningAverageAndStdDev;
import org.apache.mahout.cf.taste.impl.common.FastByIDMap;
import org.apache.mahout.cf.taste.impl.common.FastIDSet;
import org.apache.mahout.cf.taste.impl.common.FullRunningAverage;
@@ -59,7 +57,6 @@ public final class MemoryDiffStorage imp
private final DataModel dataModel;
private final boolean stdDevWeighted;
- private final boolean compactAverages;
private final long maxEntries;
private final FastByIDMap<FastByIDMap<RunningAverage>> averageDiffs;
private final FastByIDMap<RunningAverage> averageItemPref;
@@ -70,9 +67,7 @@ public final class MemoryDiffStorage imp
/**
* <p>
* See {@link
org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender} for
the meaning of
- * <code>stdDevWeighted</code>. If <code>compactAverages</code> is set, this
uses alternate data structures
- * ({@link CompactRunningAverage} versus {@link FullRunningAverage}) that
use almost 50% less memory but
- * store item-item averages less accurately. <code>maxEntries</code>
controls the maximum number of
+ * <code>stdDevWeighted</code>. <code>maxEntries</code> controls the maximum
number of
* item-item average preference differences that will be tracked internally.
After the limit is reached, if
* a new item-item pair is observed in the data it will be ignored. This is
recommended for large datasets.
* The first <code>maxEntries</code> item-item pairs observed in the data
are tracked. Assuming that item
@@ -85,9 +80,6 @@ public final class MemoryDiffStorage imp
*
* @param stdDevWeighted
* see {@link
org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender}
- * @param compactAverages
- * if <code>true</code>, use {@link CompactRunningAverage} instead
of {@link FullRunningAverage}
- * internally
* @param maxEntries
* maximum number of item-item average preference differences to
track internally
* @throws IllegalArgumentException
@@ -95,14 +87,12 @@ public final class MemoryDiffStorage imp
*/
public MemoryDiffStorage(DataModel dataModel,
Weighting stdDevWeighted,
- boolean compactAverages,
long maxEntries) throws TasteException {
Preconditions.checkArgument(dataModel != null, "dataModel is null");
Preconditions.checkArgument(dataModel.getNumItems() >= 1, "dataModel has
no items");
Preconditions.checkArgument(maxEntries > 0L, "maxEntries must be
positive");
this.dataModel = dataModel;
this.stdDevWeighted = stdDevWeighted == Weighting.WEIGHTED;
- this.compactAverages = compactAverages;
this.maxEntries = maxEntries;
this.averageDiffs = new FastByIDMap<FastByIDMap<RunningAverage>>();
this.averageItemPref = new FastByIDMap<RunningAverage>();
@@ -401,11 +391,7 @@ public final class MemoryDiffStorage imp
}
private RunningAverage buildRunningAverage() {
- if (stdDevWeighted) {
- return compactAverages ? new CompactRunningAverageAndStdDev() : new
FullRunningAverageAndStdDev();
- } else {
- return compactAverages ? new CompactRunningAverage() : new
FullRunningAverage();
- }
+ return stdDevWeighted ? new FullRunningAverageAndStdDev() : new
FullRunningAverage();
}
@Override
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java?rev=1085939&r1=1085938&r2=1085939&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
Sun Mar 27 14:03:20 2011
@@ -64,13 +64,12 @@ public final class SlopeOneRecommender e
* <p>
* Creates a default (weighted) based on the given {@link DataModel}.
* </p>
- *
- * @param dataModel
- * data model
*/
public SlopeOneRecommender(DataModel dataModel) throws TasteException {
- this(dataModel, Weighting.WEIGHTED, Weighting.WEIGHTED, new
MemoryDiffStorage(dataModel,
- Weighting.WEIGHTED, false, Long.MAX_VALUE));
+ this(dataModel,
+ Weighting.WEIGHTED,
+ Weighting.WEIGHTED,
+ new MemoryDiffStorage(dataModel, Weighting.WEIGHTED, Long.MAX_VALUE));
}
/**
Modified:
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageAndStdDevTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageAndStdDevTest.java?rev=1085939&r1=1085938&r2=1085939&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageAndStdDevTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageAndStdDevTest.java
Sun Mar 27 14:03:20 2011
@@ -26,29 +26,10 @@ import java.util.Random;
public final class RunningAverageAndStdDevTest extends TasteTestCase {
private static final double SMALL_EPSILON = 1.0;
- private static final double BIG_EPSILON = 100 * SMALL_EPSILON;
@Test
public void testFull() {
- doTestAverageAndStdDev(new FullRunningAverageAndStdDev());
- }
-
- @Test
- public void testCompact() {
- doTestAverageAndStdDev(new CompactRunningAverageAndStdDev());
- }
-
- @Test
- public void testFullBig() {
- doTestBig(new FullRunningAverageAndStdDev(), SMALL_EPSILON);
- }
-
- @Test
- public void testCompactBig() {
- doTestBig(new CompactRunningAverageAndStdDev(), BIG_EPSILON);
- }
-
- private static void doTestAverageAndStdDev(RunningAverageAndStdDev average) {
+ RunningAverageAndStdDev average = new FullRunningAverageAndStdDev();
assertEquals(0, average.getCount());
assertTrue(Double.isNaN(average.getAverage()));
@@ -81,14 +62,16 @@ public final class RunningAverageAndStdD
}
- private static void doTestBig(RunningAverageAndStdDev average, double
epsilon) {
+ @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(), epsilon);
- assertEquals(1000.0 / Math.sqrt(12.0), average.getStandardDeviation(),
epsilon);
+ assertEquals(500.0, average.getAverage(), SMALL_EPSILON);
+ assertEquals(1000.0 / Math.sqrt(12.0), average.getStandardDeviation(),
SMALL_EPSILON);
}
Modified:
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageTest.java?rev=1085939&r1=1085938&r2=1085939&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/RunningAverageTest.java
Sun Mar 27 14:03:20 2011
@@ -25,15 +25,7 @@ public final class RunningAverageTest ex
@Test
public void testFull() {
- doTestRunningAverage(new FullRunningAverage());
- }
-
- @Test
- public void testCompact() {
- doTestRunningAverage(new CompactRunningAverage());
- }
-
- private static void doTestRunningAverage(RunningAverage runningAverage) {
+ RunningAverage runningAverage = new FullRunningAverage();
assertEquals(0, runningAverage.getCount());
assertTrue(Double.isNaN(runningAverage.getAverage()));
Modified:
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java?rev=1085939&r1=1085938&r2=1085939&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java
Sun Mar 27 14:03:20 2011
@@ -29,7 +29,7 @@ public final class MemoryDiffStorageTest
@Test
public void testGetDiff() throws Exception {
DataModel model = getDataModel();
- MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
+ 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());
@@ -38,7 +38,7 @@ public final class MemoryDiffStorageTest
@Test
public void testAdd() throws Exception {
DataModel model = getDataModel();
- MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
+ MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, Long.MAX_VALUE);
RunningAverage average1 = storage.getDiff(0, 2);
assertEquals(0.1, average1.getAverage(), EPSILON);
@@ -62,7 +62,7 @@ public final class MemoryDiffStorageTest
@Test
public void testUpdate() throws Exception {
DataModel model = getDataModel();
- MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
+ MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, Long.MAX_VALUE);
RunningAverage average = storage.getDiff(1, 2);
assertEquals(0.23333332935969034, average.getAverage(), EPSILON);
@@ -78,7 +78,7 @@ public final class MemoryDiffStorageTest
@Test
public void testRemove() throws Exception {
DataModel model = getDataModel();
- MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
+ MemoryDiffStorage storage = new MemoryDiffStorage(model,
Weighting.UNWEIGHTED, Long.MAX_VALUE);
RunningAverage average1 = storage.getDiff(0, 2);
assertEquals(0.1, average1.getAverage(), EPSILON);