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/08/04 02:06:50 UTC
svn commit: r800634 [6/7] - in /lucene/mahout/trunk:
core/src/main/java/org/apache/mahout/cf/taste/hadoop/
core/src/main/java/org/apache/mahout/cf/taste/impl/common/
core/src/main/java/org/apache/mahout/cf/taste/impl/common/jdbc/
core/src/main/java/org...
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorerTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorerTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorerTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorerTest.java Tue Aug 4 00:06:46 2009
@@ -18,13 +18,8 @@
package org.apache.mahout.cf.taste.impl.recommender;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
-import org.apache.mahout.cf.taste.impl.model.GenericUser;
-import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.recommender.Rescorer;
-import java.util.Collections;
-
/** <p>Tests {@link NullRescorer}.</p> */
public final class NullRescorerTest extends TasteTestCase {
@@ -38,13 +33,12 @@
}
public void testUserRescorer() throws Exception {
- Rescorer<User> rescorer = NullRescorer.getUserInstance();
+ Rescorer<Comparable<?>> rescorer = NullRescorer.getUserInstance();
assertNotNull(rescorer);
- User user = new GenericUser("test", Collections.<Preference>emptyList());
- assertEquals(1.0, rescorer.rescore(user, 1.0));
+ assertEquals(1.0, rescorer.rescore("test", 1.0));
assertEquals(1.0, rescorer.rescore(null, 1.0));
- assertEquals(0.0, rescorer.rescore(user, 0.0));
- assertTrue(Double.isNaN(rescorer.rescore(user, Double.NaN)));
+ assertEquals(0.0, rescorer.rescore("test", 0.0));
+ assertTrue(Double.isNaN(rescorer.rescore("test", Double.NaN)));
}
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommenderTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommenderTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommenderTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommenderTest.java Tue Aug 4 00:06:46 2009
@@ -18,26 +18,25 @@
package org.apache.mahout.cf.taste.impl.recommender;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
-import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
-import java.util.ArrayList;
import java.util.List;
/** <p>Tests {@link TreeClusteringRecommender}.</p> */
public final class TreeClusteringRecommenderTest extends TasteTestCase {
public void testNoRecommendations() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.1));
- users.add(getUser("test2", 0.2, 0.6));
- users.add(getUser("test3", 0.4, 0.9));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {0.1},
+ {0.2, 0.6},
+ {0.4, 0.9},
+ });
UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
ClusterSimilarity clusterSimilarity = new FarthestNeighborClusterSimilarity(similarity);
Recommender recommender = new TreeClusteringRecommender(dataModel, clusterSimilarity, 2);
@@ -50,13 +49,16 @@
}
public void testHowMany() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.1, 0.2));
- users.add(getUser("test2", 0.2, 0.3, 0.3, 0.6));
- users.add(getUser("test3", 0.4, 0.4, 0.5, 0.9));
- users.add(getUser("test4", 0.1, 0.4, 0.5, 0.8, 0.9, 1.0));
- users.add(getUser("test5", 0.2, 0.3, 0.6, 0.7, 0.1, 0.2));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3", "test4", "test5"},
+ new Double[][] {
+ {0.1, 0.2},
+ {0.2, 0.3, 0.3, 0.6},
+ {0.4, 0.4, 0.5, 0.9},
+ {0.1, 0.4, 0.5, 0.8, 0.9, 1.0},
+ {0.2, 0.3, 0.6, 0.7, 0.1, 0.2},
+ });
+
UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
ClusterSimilarity clusterSimilarity = new FarthestNeighborClusterSimilarity(similarity);
Recommender recommender = new TreeClusteringRecommender(dataModel, clusterSimilarity, 2);
@@ -72,11 +74,14 @@
}
public void testRescorer() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.1, 0.2));
- users.add(getUser("test2", 0.2, 0.3, 0.3, 0.6));
- users.add(getUser("test3", 0.4, 0.4, 0.5, 0.9));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {0.1, 0.2},
+ {0.2, 0.3, 0.3, 0.6},
+ {0.4, 0.4, 0.5, 0.9},
+ });
+
UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
ClusterSimilarity clusterSimilarity = new FarthestNeighborClusterSimilarity(similarity);
Recommender recommender = new TreeClusteringRecommender(dataModel, clusterSimilarity, 2);
@@ -92,25 +97,32 @@
}
public void testEstimatePref() throws Exception {
- List<User> users = new ArrayList<User>(4);
- users.add(getUser("test1", 0.1, 0.3));
- users.add(getUser("test2", 0.2, 0.3, 0.3));
- users.add(getUser("test3", 0.4, 0.3, 0.5));
- users.add(getUser("test4", 0.7, 0.3, 0.8, 0.9));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3", "test4"},
+ new Double[][] {
+ {0.1, 0.3},
+ {0.2, 0.3, 0.3},
+ {0.4, 0.3, 0.5},
+ {0.7, 0.3, 0.8, 0.9},
+ });
+
UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
ClusterSimilarity clusterSimilarity = new FarthestNeighborClusterSimilarity(similarity);
Recommender recommender = new TreeClusteringRecommender(dataModel, clusterSimilarity, 2);
- assertEquals(0.9, recommender.estimatePreference("test3", "3"));
+ assertEquals(0.9f, recommender.estimatePreference("test3", "3"));
}
public void testBestRating() throws Exception {
- List<User> users = new ArrayList<User>(4);
- users.add(getUser("test1", 0.1, 0.3));
- users.add(getUser("test2", 0.2, 0.3, 0.3));
- users.add(getUser("test3", 0.4, 0.3, 0.5));
- users.add(getUser("test4", 0.7, 0.3, 0.8));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3", "test4"},
+ new Double[][] {
+ {0.1, 0.3},
+ {0.2, 0.3, 0.3},
+ {0.4, 0.3, 0.5},
+ {0.7, 0.3, 0.8},
+ });
+
+
UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
ClusterSimilarity clusterSimilarity = new FarthestNeighborClusterSimilarity(similarity);
Recommender recommender = new TreeClusteringRecommender(dataModel, clusterSimilarity, 2);
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorageTest.java Tue Aug 4 00:06:46 2009
@@ -20,14 +20,13 @@
import org.apache.mahout.cf.taste.common.Weighting;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
import org.apache.mahout.cf.taste.impl.common.RunningAverage;
-import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
/** Tests {@link MemoryDiffStorage}. */
public class MemoryDiffStorageTest extends TasteTestCase {
public void testGetDiff() throws Exception {
- DataModel model = new GenericDataModel(getMockUsers());
+ DataModel model = getDataModel();
MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
RunningAverage average = storage.getDiff("1", "2");
assertEquals(0.23333333333333334, average.getAverage(), EPSILON);
@@ -35,18 +34,18 @@
}
public void testUpdate() throws Exception {
- DataModel model = new GenericDataModel(getMockUsers());
+ DataModel model = getDataModel();
MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
- storage.updateItemPref("1", 0.5, false);
+ storage.updateItemPref("1", 0.5f, false);
RunningAverage average = storage.getDiff("1", "2");
assertEquals(0.06666666666666668, average.getAverage(), EPSILON);
assertEquals(3, average.getCount());
}
public void testRemove() throws Exception {
- DataModel model = new GenericDataModel(getMockUsers());
+ DataModel model = getDataModel();
MemoryDiffStorage storage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE);
- storage.updateItemPref("1", 0.5, true);
+ storage.updateItemPref("1", 0.5f, true);
RunningAverage average = storage.getDiff("1", "2");
assertEquals(0.1, average.getAverage(), EPSILON);
assertEquals(2, average.getCount());
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommenderTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommenderTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommenderTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommenderTest.java Tue Aug 4 00:06:46 2009
@@ -19,14 +19,11 @@
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
-import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
import org.apache.mahout.cf.taste.impl.recommender.ReversingRescorer;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
-import java.util.ArrayList;
import java.util.List;
/** <p>Tests {@link SlopeOneRecommender}.</p> */
@@ -46,13 +43,16 @@
}
public void testHowMany() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.1, 0.2));
- users.add(getUser("test2", 0.2, 0.3, 0.3, 0.6));
- users.add(getUser("test3", 0.4, 0.4, 0.5, 0.9));
- users.add(getUser("test4", 0.1, 0.4, 0.5, 0.8, 0.9, 1.0));
- users.add(getUser("test5", 0.2, 0.3, 0.6, 0.7, 0.1, 0.2));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3", "test4", "test5"},
+ new Double[][] {
+ {0.1, 0.2},
+ {0.2, 0.3, 0.3, 0.6},
+ {0.4, 0.4, 0.5, 0.9},
+ {0.1, 0.4, 0.5, 0.8, 0.9, 1.0},
+ {0.2, 0.3, 0.6, 0.7, 0.1, 0.2},
+ });
+
Recommender recommender = new SlopeOneRecommender(dataModel);
List<RecommendedItem> fewRecommended = recommender.recommend("test1", 2);
List<RecommendedItem> moreRecommended = recommender.recommend("test1", 4);
@@ -66,11 +66,14 @@
}
public void testRescorer() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.1, 0.2));
- users.add(getUser("test2", 0.2, 0.3, 0.3, 0.6));
- users.add(getUser("test3", 0.4, 0.4, 0.5, 0.9));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {0.1, 0.2},
+ {0.2, 0.3, 0.3, 0.6},
+ {0.4, 0.4, 0.5, 0.9},
+ });
+
Recommender recommender = new SlopeOneRecommender(dataModel);
List<RecommendedItem> originalRecommended = recommender.recommend("test1", 2);
List<RecommendedItem> rescoredRecommended =
@@ -89,11 +92,14 @@
}
public void testBestRating() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.0, 0.3));
- users.add(getUser("test2", 0.2, 0.3, 0.3));
- users.add(getUser("test3", 0.4, 0.3, 0.5));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {0.0, 0.3},
+ {0.2, 0.3, 0.3},
+ {0.4, 0.3, 0.5},
+ });
+
Recommender recommender = new SlopeOneRecommender(dataModel);
List<RecommendedItem> recommended = recommender.recommend("test1", 1);
assertNotNull(recommended);
@@ -105,16 +111,19 @@
}
public void testDiffStdevBehavior() throws Exception {
- List<User> users = new ArrayList<User>(3);
- users.add(getUser("test1", 0.1, 0.2));
- users.add(getUser("test2", 0.2, 0.3, 0.6));
- DataModel dataModel = new GenericDataModel(users);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {0.1, 0.2},
+ {0.2, 0.3, 0.6},
+ });
+
Recommender recommender = new SlopeOneRecommender(dataModel);
assertEquals(0.6, recommender.estimatePreference("test1", "2"), EPSILON);
}
private static Recommender buildRecommender() throws TasteException {
- DataModel dataModel = new GenericDataModel(getMockUsers());
+ DataModel dataModel = getDataModel();
return new SlopeOneRecommender(dataModel);
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrerTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrerTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrerTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrerTest.java Tue Aug 4 00:06:46 2009
@@ -19,21 +19,16 @@
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
-import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.similarity.PreferenceInferrer;
-import java.util.Collections;
-
/** <p>Tests {@link AveragingPreferenceInferrer}.</p> */
public final class AveragingPreferenceInferrerTest extends TasteTestCase {
public void testInferrer() throws TasteException {
- User user1 = getUser("test1", 3.0, -2.0, 5.0);
- DataModel model = new GenericDataModel(Collections.singletonList(user1));
+ DataModel model = getDataModel(new Comparable<?>[] {"test1"}, new Double[][] {{3.0,-2.0,5.0}});
PreferenceInferrer inferrer = new AveragingPreferenceInferrer(model);
- double inferred = inferrer.inferPreference(user1, "3");
+ double inferred = inferrer.inferPreference("test1", "3");
assertEquals(2.0, inferred);
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarityTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarityTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarityTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarityTest.java Tue Aug 4 00:06:46 2009
@@ -19,105 +19,130 @@
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.common.Weighting;
-import org.apache.mahout.cf.taste.impl.model.GenericPreference;
-import org.apache.mahout.cf.taste.impl.model.GenericUser;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
-import java.util.Collections;
-
/** <p>Tests {@link EuclideanDistanceSimilarity}.</p> */
public final class EuclideanDistanceSimilarityTest extends SimilarityTestCase {
public void testFullCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", 3.0, -2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {3.0, -2.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testFullCorrelation1Weighted() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", 3.0, -2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {3.0, -2.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testFullCorrelation2() throws Exception {
- User user1 = getUser("test1", 3.0, 3.0);
- User user2 = getUser("test2", 3.0, 3.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, 3.0},
+ {3.0, 3.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity("test1", "test2");
assertTrue(Double.isNaN(correlation));
}
public void testNoCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", -3.0, 2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {-3.0, 2.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(0.424465381883345, correlation);
}
public void testNoCorrelation1Weighted() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", -3.0, 2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {-3.0, 2.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity("test1", "test2");
assertCorrelationEquals(0.8081551272944483, correlation);
}
public void testNoCorrelation2() throws Exception {
- Preference pref1 = new GenericPreference(null, "1", 1.0);
- GenericUser user1 = new GenericUser("test1", Collections.singletonList(pref1));
- Preference pref2 = new GenericPreference(null, "2", 1.0);
- GenericUser user2 = new GenericUser("test2", Collections.singletonList(pref2));
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 1.0, null},
+ {null, null, 1.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity("test1", "test2");
assertTrue(Double.isNaN(correlation));
}
public void testNoCorrelation3() throws Exception {
- User user1 = getUser("test1", 90.0, 80.0, 70.0);
- User user2 = getUser("test2", 70.0, 80.0, 90.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {90.0, 80.0, 70.0},
+ {70.0, 80.0, 90.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(0.3606507916004517, correlation);
}
public void testSimple() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 2.0, 5.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {2.0, 5.0, 6.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(0.5896248568217328, correlation);
}
public void testSimpleWeighted() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 2.0, 5.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {2.0, 5.0, 6.0},
+ });
+ double correlation = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity("test1", "test2");
assertCorrelationEquals(0.8974062142054332, correlation);
}
public void testFullItemCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, 3.0);
- User user2 = getUser("test2", -2.0, -2.0);
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, 3.0},
+ {-2.0, -2.0},
+ });
double correlation =
new EuclideanDistanceSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(1.0, correlation);
}
public void testFullItemCorrelation2() throws Exception {
- User user1 = getUser("test1", 3.0, 3.0);
- User user2 = getUser("test2", 3.0, 3.0);
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, 3.0},
+ {3.0, 3.0},
+ });
double correlation =
new EuclideanDistanceSimilarity(dataModel).itemSimilarity("0", "1");
// Yeah, undefined in this case
@@ -125,50 +150,63 @@
}
public void testNoItemCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, -3.0);
- User user2 = getUser("test2", -2.0, 2.0);
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -3.0},
+ {-2.0, 2.0},
+ });
double correlation =
new EuclideanDistanceSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(0.424465381883345, correlation);
}
public void testNoItemCorrelation2() throws Exception {
- Preference pref1 = new GenericPreference(null, "1", 1.0);
- GenericUser user1 = new GenericUser("test1", Collections.singletonList(pref1));
- Preference pref2 = new GenericPreference(null, "2", 1.0);
- GenericUser user2 = new GenericUser("test2", Collections.singletonList(pref2));
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 1.0, null},
+ {null, null, 1.0},
+ });
double correlation =
new EuclideanDistanceSimilarity(dataModel).itemSimilarity("1", "2");
assertTrue(Double.isNaN(correlation));
}
public void testNoItemCorrelation3() throws Exception {
- User user1 = getUser("test1", 90.0, 70.0);
- User user2 = getUser("test2", 80.0, 80.0);
- User user3 = getUser("test3", 70.0, 90.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {90.0, 70.0},
+ {80.0, 80.0},
+ {70.0, 90.0},
+ });
double correlation =
new EuclideanDistanceSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(0.3606507916004517, correlation);
}
public void testSimpleItem() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0);
- User user2 = getUser("test2", 2.0, 5.0);
- User user3 = getUser("test3", 3.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {1.0, 2.0},
+ {2.0, 5.0},
+ {3.0, 6.0},
+ });
double correlation =
new EuclideanDistanceSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(0.5896248568217328, correlation);
}
public void testSimpleItemWeighted() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0);
- User user2 = getUser("test2", 2.0, 5.0);
- User user3 = getUser("test3", 3.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {1.0, 2.0},
+ {2.0, 5.0},
+ {3.0, 6.0},
+ });
ItemSimilarity itemSimilarity = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED);
double correlation = itemSimilarity.itemSimilarity("0", "1");
assertCorrelationEquals(0.8974062142054332, correlation);
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarityTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarityTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarityTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarityTest.java Tue Aug 4 00:06:46 2009
@@ -17,7 +17,6 @@
package org.apache.mahout.cf.taste.impl.similarity;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
import java.util.ArrayList;
@@ -46,10 +45,13 @@
}
public void testFromCorrelation() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0);
- User user2 = getUser("test2", 2.0, 5.0);
- User user3 = getUser("test3", 3.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {1.0, 2.0},
+ {2.0, 5.0},
+ {3.0, 6.0},
+ });
ItemSimilarity otherSimilarity = new PearsonCorrelationSimilarity(dataModel);
ItemSimilarity itemSimilarity = new GenericItemSimilarity(otherSimilarity, dataModel);
assertCorrelationEquals(1.0, itemSimilarity.itemSimilarity("0", "0"));
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarityTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarityTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarityTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarityTest.java Tue Aug 4 00:06:46 2009
@@ -18,18 +18,20 @@
package org.apache.mahout.cf.taste.impl.similarity;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
/** <p>Tests {@link LogLikelihoodSimilarity}.</p> */
public final class LogLikelihoodSimilarityTest extends SimilarityTestCase {
public void testCorrelation() throws Exception {
- User user1 = getUser("test1", 1.0, 1.0);
- User user2 = getUser("test2", 1.0, null, 1.0);
- User user3 = getUser("test3", null, null, 1.0, 1.0, 1.0);
- User user4 = getUser("test4", 1.0, 1.0, 1.0, 1.0, 1.0);
- User user5 = getUser("test5", null, 1.0, 1.0, 1.0, 1.0);
- DataModel dataModel = getDataModel(user1, user2, user3, user4, user5);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3", "test4", "test5"},
+ new Double[][] {
+ {1.0, 1.0},
+ {1.0, null, 1.0},
+ {null, null, 1.0, 1.0, 1.0},
+ {1.0, 1.0, 1.0, 1.0, 1.0},
+ {null, 1.0, 1.0, 1.0, 1.0},
+ });
double correlation = new LogLikelihoodSimilarity(dataModel).itemSimilarity("1", "0");
assertCorrelationEquals(0.12160727029227925, correlation);
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarityTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarityTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarityTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarityTest.java Tue Aug 4 00:06:46 2009
@@ -18,106 +18,131 @@
package org.apache.mahout.cf.taste.impl.similarity;
import org.apache.mahout.cf.taste.common.Weighting;
-import org.apache.mahout.cf.taste.impl.model.GenericPreference;
-import org.apache.mahout.cf.taste.impl.model.GenericUser;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.model.User;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
-import java.util.Collections;
-
/** <p>Tests {@link PearsonCorrelationSimilarity}.</p> */
public final class PearsonCorrelationSimilarityTest extends SimilarityTestCase {
public void testFullCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", 3.0, -2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {3.0, -2.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testFullCorrelation1Weighted() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", 3.0, -2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {3.0, -2.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testFullCorrelation2() throws Exception {
- User user1 = getUser("test1", 3.0, 3.0);
- User user2 = getUser("test2", 3.0, 3.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, 3.0},
+ {3.0, 3.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
// Yeah, undefined in this case
assertTrue(Double.isNaN(correlation));
}
public void testNoCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", -3.0, 2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {-3.0, 2.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(-1.0, correlation);
}
public void testNoCorrelation1Weighted() throws Exception {
- User user1 = getUser("test1", 3.0, -2.0);
- User user2 = getUser("test2", -3.0, 2.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -2.0},
+ {-3.0, 2.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity("test1", "test2");
assertCorrelationEquals(-1.0, correlation);
}
public void testNoCorrelation2() throws Exception {
- Preference pref1 = new GenericPreference(null, "1", 1.0);
- GenericUser user1 = new GenericUser("test1", Collections.singletonList(pref1));
- Preference pref2 = new GenericPreference(null, "2", 1.0);
- GenericUser user2 = new GenericUser("test2", Collections.singletonList(pref2));
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 1.0, null},
+ {null, null, 1.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertTrue(Double.isNaN(correlation));
}
public void testNoCorrelation3() throws Exception {
- User user1 = getUser("test1", 90.0, 80.0, 70.0);
- User user2 = getUser("test2", 70.0, 80.0, 90.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {90.0, 80.0, 70.0},
+ {70.0, 80.0, 90.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(-1.0, correlation);
}
public void testSimple() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 2.0, 5.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {2.0, 5.0, 6.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(0.9607689228305227, correlation);
}
public void testSimpleWeighted() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 2.0, 5.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {2.0, 5.0, 6.0},
+ });
+ double correlation = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED).userSimilarity("test1", "test2");
assertCorrelationEquals(0.9901922307076306, correlation);
}
public void testFullItemCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, 3.0);
- User user2 = getUser("test2", -2.0, -2.0);
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, 3.0},
+ {-2.0, -2.0},
+ });
double correlation =
new PearsonCorrelationSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(1.0, correlation);
}
public void testFullItemCorrelation2() throws Exception {
- User user1 = getUser("test1", 3.0, 3.0);
- User user2 = getUser("test2", 3.0, 3.0);
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, 3.0},
+ {3.0, 3.0},
+ });
double correlation =
new PearsonCorrelationSimilarity(dataModel).itemSimilarity("0", "1");
// Yeah, undefined in this case
@@ -125,50 +150,63 @@
}
public void testNoItemCorrelation1() throws Exception {
- User user1 = getUser("test1", 3.0, -3.0);
- User user2 = getUser("test2", -2.0, 2.0);
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {3.0, -3.0},
+ {2.0, -2.0},
+ });
double correlation =
new PearsonCorrelationSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(-1.0, correlation);
}
public void testNoItemCorrelation2() throws Exception {
- Preference pref1 = new GenericPreference(null, "1", 1.0);
- GenericUser user1 = new GenericUser("test1", Collections.singletonList(pref1));
- Preference pref2 = new GenericPreference(null, "2", 1.0);
- GenericUser user2 = new GenericUser("test2", Collections.singletonList(pref2));
- DataModel dataModel = getDataModel(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 1.0, null},
+ {null, null, 1.0},
+ });
double correlation =
new PearsonCorrelationSimilarity(dataModel).itemSimilarity("1", "2");
assertTrue(Double.isNaN(correlation));
}
public void testNoItemCorrelation3() throws Exception {
- User user1 = getUser("test1", 90.0, 70.0);
- User user2 = getUser("test2", 80.0, 80.0);
- User user3 = getUser("test3", 70.0, 90.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {90.0, 70.0},
+ {80.0, 80.0},
+ {70.0, 90.0},
+ });
double correlation =
new PearsonCorrelationSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(-1.0, correlation);
}
public void testSimpleItem() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0);
- User user2 = getUser("test2", 2.0, 5.0);
- User user3 = getUser("test3", 3.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {1.0, 2.0},
+ {2.0, 5.0},
+ {3.0, 6.0},
+ });
double correlation =
new PearsonCorrelationSimilarity(dataModel).itemSimilarity("0", "1");
assertCorrelationEquals(0.9607689228305227, correlation);
}
public void testSimpleItemWeighted() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0);
- User user2 = getUser("test2", 2.0, 5.0);
- User user3 = getUser("test3", 3.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2, user3);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3"},
+ new Double[][] {
+ {1.0, 2.0},
+ {2.0, 5.0},
+ {3.0, 6.0},
+ });
ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED);
double correlation = itemSimilarity.itemSimilarity("0", "1");
assertCorrelationEquals(0.9901922307076306, correlation);
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarityTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarityTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarityTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarityTest.java Tue Aug 4 00:06:46 2009
@@ -19,40 +19,51 @@
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
/** <p>Tests {@link SpearmanCorrelationSimilarity}.</p> */
public final class SpearmanCorrelationSimilarityTest extends SimilarityTestCase {
public void testFullCorrelation1() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 1.0, 2.0, 3.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {1.0, 2.0, 3.0},
+ });
+ double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testFullCorrelation2() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 4.0, 5.0, 6.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {4.0, 5.0, 6.0},
+ });
+ double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testAnticorrelation() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 3.0, 2.0, 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {3.0, 2.0, 1.0},
+ });
+ double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(-1.0, correlation);
}
public void testSimple() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 2.0, 3.0, 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {2.0, 3.0, 1.0},
+ });
+ double correlation = new SpearmanCorrelationSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(-0.5, correlation);
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarityTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarityTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarityTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarityTest.java Tue Aug 4 00:06:46 2009
@@ -18,64 +18,62 @@
package org.apache.mahout.cf.taste.impl.similarity;
import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
/** <p>Tests {@link TanimotoCoefficientSimilarity}.</p> */
public final class TanimotoCoefficientSimilarityTest extends SimilarityTestCase {
- public void testNoCorrelation1() throws Exception {
- User user1 = getUser("test1");
- User user2 = getUser("test2");
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
- assertTrue(Double.isNaN(correlation));
- }
-
- public void testNoCorrelation2() throws Exception {
- User user1 = getUser("test1");
- User user2 = getUser("test2", 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
- assertCorrelationEquals(0.0, correlation);
- }
-
public void testNoCorrelation() throws Exception {
- User user1 = getUser("test1", null, 2.0, 3.0);
- User user2 = getUser("test2", 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 2.0, 3.0},
+ {1.0},
+ });
+ double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(0.0, correlation);
}
public void testFullCorrelation1() throws Exception {
- User user1 = getUser("test1", 1.0);
- User user2 = getUser("test2", 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0},
+ {1.0},
+ });
+ double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(1.0, correlation);
}
public void testFullCorrelation2() throws Exception {
- User user1 = getUser("test1", 1.0, 2.0, 3.0);
- User user2 = getUser("test2", 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {1.0, 2.0, 3.0},
+ {1.0},
+ });
+ double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity("test1", "test2");
assertCorrelationEquals(0.3333333333333333, correlation);
}
public void testCorrelation1() throws Exception {
- User user1 = getUser("test1", null, 2.0, 3.0);
- User user2 = getUser("test2", 1.0, 1.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 2.0, 3.0},
+ {1.0, 1.0},
+ });
+ double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity("test1", "test2");
assertEquals(0.3333333333333333, correlation);
}
public void testCorrelation2() throws Exception {
- User user1 = getUser("test1", null, 2.0, 3.0, 1.0);
- User user2 = getUser("test2", 1.0, 1.0, null, 0.0);
- DataModel dataModel = getDataModel(user1, user2);
- double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity(user1, user2);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2"},
+ new Double[][] {
+ {null, 2.0, 3.0, 1.0},
+ {1.0, 1.0, null, 0.0},
+ });
+ double correlation = new TanimotoCoefficientSimilarity(dataModel).userSimilarity("test1", "test2");
assertEquals(0.5, correlation);
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequencyTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequencyTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequencyTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequencyTest.java Tue Aug 4 00:06:46 2009
@@ -17,29 +17,30 @@
package org.apache.mahout.cf.taste.impl.transforms;
-import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
+import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.model.User;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.mahout.cf.taste.model.PreferenceArray;
/** <p>Tests {@link InverseUserFrequency}.</p> */
public final class InverseUserFrequencyTest extends TransformTestCase {
public void testIUF() throws Exception {
- List<User> users = new ArrayList<User>(5);
- users.add(getUser("test1", 0.1));
- users.add(getUser("test2", 0.2, 0.3));
- users.add(getUser("test3", 0.4, 0.5, 0.6));
- users.add(getUser("test4", 0.7, 0.8, 0.9, 1.0));
- users.add(getUser("test5", 1.0, 1.0, 1.0, 1.0, 1.0));
- GenericDataModel dummy = new GenericDataModel(users);
- InverseUserFrequency iuf = new InverseUserFrequency(dummy, 10.0);
+ DataModel dataModel = getDataModel(
+ new Comparable<?>[] {"test1", "test2", "test3", "test4", "test5"},
+ new Double[][] {
+ {0.1},
+ {0.2, 0.3},
+ {0.4, 0.5, 0.6},
+ {0.7, 0.8, 0.9, 1.0},
+ {1.0, 1.0, 1.0, 1.0, 1.0},
+ });
+
+ InverseUserFrequency iuf = new InverseUserFrequency(dataModel, 10.0);
+
+ PreferenceArray user5Prefs = dataModel.getPreferencesFromUser("test5");
- User user = dummy.getUser("test5");
for (int i = 0; i < 5; i++) {
- Preference pref = user.getPreferenceFor(String.valueOf(i));
+ Preference pref = user5Prefs.get(i);
assertNotNull(pref);
assertEquals(Math.log(5.0 / (double) (5 - i)) / Math.log(iuf.getLogBase()),
iuf.getTransformedValue(pref),
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/TransformTestCase.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/TransformTestCase.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/TransformTestCase.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/TransformTestCase.java Tue Aug 4 00:06:46 2009
@@ -17,15 +17,16 @@
package org.apache.mahout.cf.taste.impl.transforms;
+import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
+import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.model.User;
abstract class TransformTestCase extends TasteTestCase {
- static void assertPrefsEquals(User user, double... expected) {
+ static void assertPrefsEquals(DataModel dataModel, Comparable<?> userID, double... expected) throws TasteException {
int i = 0;
- for (Preference pref : user.getPreferences()) {
+ for (Preference pref : dataModel.getPreferencesFromUser(userID)) {
assertEquals(expected[i], pref.getValue());
i++;
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/ZScoreTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/ZScoreTest.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/ZScoreTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/transforms/ZScoreTest.java Tue Aug 4 00:06:46 2009
@@ -17,44 +17,40 @@
package org.apache.mahout.cf.taste.impl.transforms;
-import org.apache.mahout.cf.taste.model.User;
+import org.apache.mahout.cf.taste.impl.model.GenericPreference;
+import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.transforms.PreferenceTransform;
/** <p>Tests {@link ZScore}.</p> */
public final class ZScoreTest extends TransformTestCase {
public void testOnePref() throws Exception {
- User user = getUser("test", 1.0);
- PreferenceTransform zScore = new ZScore();
- assertEquals(0.0, zScore.getTransformedValue(user.getPreferenceFor("0")), EPSILON);
+ DataModel dataModel = getDataModel(new Comparable<?>[] {"test1"}, new Double[][] {{1.0}});
+ PreferenceTransform zScore = new ZScore(dataModel);
+ assertEquals(0.0, zScore.getTransformedValue(new GenericPreference("test1", "0", 1.0f)), EPSILON);
}
public void testAllSame() throws Exception {
- User user = getUser("test", 1.0, 1.0, 1.0);
- PreferenceTransform zScore = new ZScore();
- assertEquals(0.0, zScore.getTransformedValue(user.getPreferenceFor("0")), EPSILON);
- assertEquals(0.0, zScore.getTransformedValue(user.getPreferenceFor("1")), EPSILON);
- assertEquals(0.0, zScore.getTransformedValue(user.getPreferenceFor("2")), EPSILON);
+ DataModel dataModel = getDataModel(new Comparable<?>[] {"test1"}, new Double[][] {{1.0,1.0,1.0}});
+ PreferenceTransform zScore = new ZScore(dataModel);
+ assertEquals(0.0, zScore.getTransformedValue(new GenericPreference("test1", "0", 1.0f)), EPSILON);
+ assertEquals(0.0, zScore.getTransformedValue(new GenericPreference("test1", "1", 1.0f)), EPSILON);
+ assertEquals(0.0, zScore.getTransformedValue(new GenericPreference("test1", "2", 1.0f)), EPSILON);
}
public void testStdev() throws Exception {
- User user = getUser("test", -1.0, -2.0);
- PreferenceTransform zScore = new ZScore();
- assertEquals(0.707107, zScore.getTransformedValue(user.getPreferenceFor("0")), EPSILON);
- assertEquals(-0.707107, zScore.getTransformedValue(user.getPreferenceFor("1")), EPSILON);
+ DataModel dataModel = getDataModel(new Comparable<?>[] {"test1"}, new Double[][] {{-1.0,-2.0}});
+ PreferenceTransform zScore = new ZScore(dataModel);
+ assertEquals(0.707107, zScore.getTransformedValue(new GenericPreference("test1", "0", -1.0f)), EPSILON);
+ assertEquals(-0.707107, zScore.getTransformedValue(new GenericPreference("test1", "1", -2.0f)), EPSILON);
}
public void testExample() throws Exception {
- User user = getUser("test", 5.0, 7.0, 9.0);
- PreferenceTransform zScore = new ZScore();
- assertEquals(-1.0, zScore.getTransformedValue(user.getPreferenceFor("0")), EPSILON);
- assertEquals(0.0, zScore.getTransformedValue(user.getPreferenceFor("1")), EPSILON);
- assertEquals(1.0, zScore.getTransformedValue(user.getPreferenceFor("2")), EPSILON);
- }
-
- public void testRefresh() {
- // Make sure this doesn't throw an exception
- new ZScore().refresh(null);
+ DataModel dataModel = getDataModel(new Comparable<?>[] {"test1"}, new Double[][] {{5.0, 7.0, 9.0}});
+ PreferenceTransform zScore = new ZScore(dataModel);
+ assertEquals(-1.0, zScore.getTransformedValue(new GenericPreference("test1", "0", 5.0f)), EPSILON);
+ assertEquals(0.0, zScore.getTransformedValue(new GenericPreference("test1", "1", 7.0f)), EPSILON);
+ assertEquals(1.0, zScore.getTransformedValue(new GenericPreference("test1", "2", 9.0f)), EPSILON);
}
}
Propchange: lucene/mahout/trunk/examples/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Aug 4 00:06:46 2009
@@ -1,11 +1,10 @@
-target
-build
-dist
+work
+.classpath
+.settings
input
+build
output
+target
temp
-work
-*.iml
-.settings
-.classpath
.project
+dist
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJB.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJB.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJB.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJB.java Tue Aug 4 00:06:46 2009
@@ -51,9 +51,9 @@
double estimatePreference(Object userID, Object itemID) throws TasteException, RemoteException;
/**
- * @see org.apache.mahout.cf.taste.recommender.Recommender#setPreference(Comparable, Comparable, double)
+ * @see org.apache.mahout.cf.taste.recommender.Recommender#setPreference(Comparable, Comparable, float)
*/
- void setPreference(Object userID, Object itemID, double value)
+ void setPreference(Object userID, Object itemID, float value)
throws TasteException, RemoteException;
/**
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBBean.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBBean.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBBean.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBBean.java Tue Aug 4 00:06:46 2009
@@ -57,7 +57,7 @@
return recommender.estimatePreference(userID, itemID);
}
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) throws TasteException {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) throws TasteException {
recommender.setPreference(userID, itemID, value);
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBLocal.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBLocal.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBLocal.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/ejb/RecommenderEJBLocal.java Tue Aug 4 00:06:46 2009
@@ -49,9 +49,9 @@
double estimatePreference(Object userID, Object itemID) throws TasteException;
/**
- * @see org.apache.mahout.cf.taste.recommender.Recommender#setPreference(Comparable, Comparable, double)
+ * @see org.apache.mahout.cf.taste.recommender.Recommender#setPreference(Comparable, Comparable, float)
*/
- void setPreference(Object userID, Object itemID, double value) throws TasteException;
+ void setPreference(Object userID, Object itemID, float value) throws TasteException;
/**
* @see org.apache.mahout.cf.taste.recommender.Recommender#removePreference(Comparable, Comparable)
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingDataModel.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingDataModel.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingDataModel.java Tue Aug 4 00:06:46 2009
@@ -17,23 +17,19 @@
package org.apache.mahout.cf.taste.example.bookcrossing;
+import org.apache.mahout.cf.taste.example.grouplens.GroupLensDataModel;
import org.apache.mahout.cf.taste.impl.common.FastMap;
import org.apache.mahout.cf.taste.impl.common.FileLineIterable;
import org.apache.mahout.cf.taste.impl.common.IOUtils;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
-import org.apache.mahout.cf.taste.model.User;
-import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.example.grouplens.GroupLensDataModel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.PrintWriter;
import java.io.OutputStreamWriter;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.List;
+import java.io.PrintWriter;
import java.nio.charset.Charset;
+import java.util.Map;
public final class BookCrossingDataModel extends FileDataModel {
@@ -121,29 +117,6 @@
}
return result;
}
-
- @Override
- protected User buildUser(String id, List<Preference> prefs) {
- String[] userData = userDataMap.get(id);
- if (userData == null) {
- throw new NoSuchElementException();
- }
- String location = userData[0];
- String[] locationTokens = location.split(",");
- for (int i = 0; i < locationTokens.length; i++) {
- if (locationTokens[i] != null) {
- locationTokens[i] = locationTokens[i].trim();
- if (locationTokens[i].length() == 0) {
- locationTokens[i] = null;
- }
- }
- }
- String city = locationTokens[0];
- String state = locationTokens.length > 1 ? locationTokens[1] : null;
- String country = locationTokens.length > 2 ? locationTokens[2] : null;
- Integer age = userData[1] == null ? null : Integer.valueOf(userData[1]);
- return new BookCrossingUser(id, prefs, city, state, country, age);
- }
private static File convertBCFile(File originalFile) throws IOException {
File resultFile = new File(new File(System.getProperty("java.io.tmpdir")), "taste.bookcrossing.txt");
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingRecommender.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingRecommender.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/bookcrossing/BookCrossingRecommender.java Tue Aug 4 00:06:46 2009
@@ -19,14 +19,15 @@
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.common.TasteException;
+import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.CachingRecommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
-import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
+import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
+import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.recommender.Rescorer;
-import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import java.util.Collection;
@@ -41,7 +42,7 @@
private final Recommender recommender;
public BookCrossingRecommender(DataModel dataModel, BookCrossingDataModel bcModel) throws TasteException {
- UserSimilarity similarity = new GeoUserSimilarity(bcModel);
+ UserSimilarity similarity = new PearsonCorrelationSimilarity(bcModel);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(5, similarity, dataModel);
recommender = new CachingRecommender(new GenericUserBasedRecommender(dataModel, neighborhood, similarity));
}
@@ -58,12 +59,12 @@
}
@Override
- public double estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
+ public float estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
return recommender.estimatePreference(userID, itemID);
}
@Override
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) throws TasteException {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) throws TasteException {
recommender.setPreference(userID, itemID, value);
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensDataModel.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensDataModel.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensDataModel.java Tue Aug 4 00:06:46 2009
@@ -26,8 +26,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintWriter;
import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
import java.nio.charset.Charset;
public final class GroupLensDataModel extends FileDataModel {
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensRecommender.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensRecommender.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/grouplens/GroupLensRecommender.java Tue Aug 4 00:06:46 2009
@@ -68,12 +68,12 @@
}
@Override
- public double estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
+ public float estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
return recommender.estimatePreference(userID, itemID);
}
@Override
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) throws TasteException {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) throws TasteException {
recommender.setPreference(userID, itemID, value);
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterDataModel.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterDataModel.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterDataModel.java Tue Aug 4 00:06:46 2009
@@ -18,15 +18,16 @@
package org.apache.mahout.cf.taste.example.jester;
import org.apache.mahout.cf.taste.example.grouplens.GroupLensDataModel;
-import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.model.GenericPreference;
+import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.model.Preference;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.ArrayList;
public final class JesterDataModel extends FileDataModel {
@@ -51,14 +52,14 @@
}
@Override
- protected void processLine(String line, Map<String, List<Preference>> data) {
+ protected void processLine(String line, Map<Comparable<?>, Collection<Preference>> data, char delimiter) {
String userID = String.valueOf(userBeingRead);
String[] jokePrefs = line.split(",");
List<Preference> prefs = new ArrayList<Preference>(101);
for (int itemIDNum = 1; itemIDNum < jokePrefs.length; itemIDNum++) { // yes skip first one, just a count
String jokePref = jokePrefs[itemIDNum];
if (!"99".equals(jokePref)) {
- double jokePrefValue = Double.parseDouble(jokePref);
+ float jokePrefValue = Float.parseFloat(jokePref);
String itemID = String.valueOf(itemIDNum);
prefs.add(new GenericPreference(null, itemID, jokePrefValue));
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterRecommender.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterRecommender.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/jester/JesterRecommender.java Tue Aug 4 00:06:46 2009
@@ -53,12 +53,12 @@
}
@Override
- public double estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
+ public float estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
return recommender.estimatePreference(userID, itemID);
}
@Override
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) throws TasteException {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) throws TasteException {
recommender.setPreference(userID, itemID, value);
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixDataModel.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixDataModel.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixDataModel.java Tue Aug 4 00:06:46 2009
@@ -17,28 +17,28 @@
package org.apache.mahout.cf.taste.example.netflix;
-import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.common.Refreshable;
-import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
-import org.apache.mahout.cf.taste.impl.model.GenericPreference;
-import org.apache.mahout.cf.taste.impl.model.GenericUser;
+import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.FastMap;
+import org.apache.mahout.cf.taste.impl.common.FastSet;
import org.apache.mahout.cf.taste.impl.common.FileLineIterable;
+import org.apache.mahout.cf.taste.impl.model.GenericDataModel;
+import org.apache.mahout.cf.taste.impl.model.GenericPreference;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.Preference;
-import org.apache.mahout.cf.taste.model.User;
-import org.slf4j.LoggerFactory;
+import org.apache.mahout.cf.taste.model.PreferenceArray;
import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
/**
* <p>This is a {@link DataModel} that reads the Netflix data set, as represented in its
@@ -71,7 +71,7 @@
log.info("Creating NetflixDataModel for directory: {}", dataDirectory);
log.info("Reading preference data...");
- List<User> users = readUsers(dataDirectory);
+ Map<Comparable<?>, PreferenceArray> users = readUsers(dataDirectory);
log.info("Creating delegate DataModel...");
delegate = new GenericDataModel(users);
@@ -90,8 +90,8 @@
return movies;
}
- private List<User> readUsers(File dataDirectory) throws IOException {
- Map<Integer, List<Preference>> userIDPrefMap = new FastMap<Integer, List<Preference>>();
+ private Map<Comparable<?>, PreferenceArray> readUsers(File dataDirectory) throws IOException {
+ Map<Comparable<?>, Collection<Preference>> userIDPrefMap = new FastMap<Comparable<?>, Collection<Preference>>();
int counter = 0;
FilenameFilter filenameFilter = new MovieFilenameFilter();
@@ -108,8 +108,8 @@
int firstComma = line.indexOf((int) ',');
Integer userID = Integer.valueOf(line.substring(0, firstComma));
int secondComma = line.indexOf((int) ',', firstComma + 1);
- double rating = Double.parseDouble(line.substring(firstComma + 1, secondComma));
- List<Preference> userPrefs = userIDPrefMap.get(userID);
+ float rating = Float.parseFloat(line.substring(firstComma + 1, secondComma));
+ Collection<Preference> userPrefs = userIDPrefMap.get(userID);
if (userPrefs == null) {
userPrefs = new ArrayList<Preference>();
userIDPrefMap.put(userID, userPrefs);
@@ -118,39 +118,40 @@
}
}
- List<User> users = new ArrayList<User>(userIDPrefMap.size());
- for (Map.Entry<Integer, List<Preference>> entry : userIDPrefMap.entrySet()) {
- users.add(new GenericUser(entry.getKey(), entry.getValue()));
- }
- return users;
+ return GenericDataModel.toPrefArrayValues(userIDPrefMap, true);
}
@Override
- public Iterable<? extends User> getUsers() throws TasteException {
- return delegate.getUsers();
+ public Iterable<Comparable<?>> getUserIDs() throws TasteException {
+ return delegate.getUserIDs();
}
@Override
- public User getUser(Comparable<?> id) throws TasteException {
- return delegate.getUser(id);
+ public PreferenceArray getPreferencesFromUser(Comparable<?> id) throws TasteException {
+ return delegate.getPreferencesFromUser(id);
}
- @Override
+ @Override
+ public FastSet<Comparable<?>> getItemIDsFromUser(Comparable<?> userID) throws TasteException {
+ return delegate.getItemIDsFromUser(userID);
+ }
+
+ @Override
public Iterable<Comparable<?>> getItemIDs() throws TasteException {
return delegate.getItemIDs();
}
@Override
- public Iterable<? extends Preference> getPreferencesForItem(Comparable<?> itemID) throws TasteException {
+ public PreferenceArray getPreferencesForItem(Comparable<?> itemID) throws TasteException {
return delegate.getPreferencesForItem(itemID);
}
- @Override
- public Preference[] getPreferencesForItemAsArray(Comparable<?> itemID) throws TasteException {
- return delegate.getPreferencesForItemAsArray(itemID);
- }
+ @Override
+ public Float getPreferenceValue(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
+ return delegate.getPreferenceValue(userID, itemID);
+ }
- @Override
+ @Override
public int getNumItems() throws TasteException {
return delegate.getNumItems();
}
@@ -166,7 +167,7 @@
}
@Override
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) {
throw new UnsupportedOperationException();
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixFileDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixFileDataModel.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixFileDataModel.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixFileDataModel.java Tue Aug 4 00:06:46 2009
@@ -17,20 +17,21 @@
package org.apache.mahout.cf.taste.example.netflix;
-import org.apache.mahout.cf.taste.model.DataModel;
-import org.apache.mahout.cf.taste.model.User;
-import org.apache.mahout.cf.taste.model.Preference;
import org.apache.mahout.cf.taste.common.Refreshable;
+import org.apache.mahout.cf.taste.impl.common.FastSet;
import org.apache.mahout.cf.taste.impl.common.FileLineIterable;
-import org.apache.mahout.cf.taste.impl.common.ArrayIterator;
+import org.apache.mahout.cf.taste.impl.model.GenericItemPreferenceArray;
import org.apache.mahout.cf.taste.impl.model.GenericPreference;
+import org.apache.mahout.cf.taste.model.DataModel;
+import org.apache.mahout.cf.taste.model.Preference;
+import org.apache.mahout.cf.taste.model.PreferenceArray;
-import java.util.Collection;
-import java.util.List;
-import java.util.ArrayList;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
public final class NetflixFileDataModel implements DataModel {
@@ -50,12 +51,12 @@
}
@Override
- public Iterable<? extends User> getUsers() {
+ public Iterable<Comparable<?>> getUserIDs() {
throw new UnsupportedOperationException(); // TODO
}
@Override
- public User getUser(Comparable<?> id) {
+ public PreferenceArray getPreferencesFromUser(Comparable<?> id) {
throw new UnsupportedOperationException(); // TODO
}
@@ -65,12 +66,17 @@
}
@Override
- public Iterable<? extends Preference> getPreferencesForItem(Comparable<?> itemID) {
- return new ArrayIterator<Preference>(getPreferencesForItemAsArray(itemID));
+ public FastSet<Comparable<?>> getItemIDsFromUser(Comparable<?> userID) {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
+ @Override
+ public Float getPreferenceValue(Comparable<?> userID, Comparable<?> itemID) {
+ throw new UnsupportedOperationException(); // TODO
}
@Override
- public Preference[] getPreferencesForItemAsArray(Comparable<?> itemID) {
+ public PreferenceArray getPreferencesForItem(Comparable<?> itemID) {
StringBuilder itemIDPadded = new StringBuilder(5);
itemIDPadded.append(itemID);
while (itemIDPadded.length() < 5) {
@@ -82,10 +88,10 @@
int firstComma = line.indexOf((int) ',');
Integer userID = Integer.valueOf(line.substring(0, firstComma));
int secondComma = line.indexOf((int) ',', firstComma + 1);
- double rating = Double.parseDouble(line.substring(firstComma + 1, secondComma));
- prefs.add(new GenericPreference(getUser(userID), itemID, rating));
+ float rating = Float.parseFloat(line.substring(firstComma + 1, secondComma));
+ prefs.add(new GenericPreference(userID, itemID, rating));
}
- return prefs.toArray(new Preference[prefs.size()]);
+ return new GenericItemPreferenceArray(prefs);
}
@Override
@@ -107,7 +113,7 @@
* @throws UnsupportedOperationException
*/
@Override
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) {
throw new UnsupportedOperationException();
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommender.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommender.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommender.java Tue Aug 4 00:06:46 2009
@@ -48,12 +48,12 @@
}
@Override
- public double estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
+ public float estimatePreference(Comparable<?> userID, Comparable<?> itemID) throws TasteException {
return recommender.estimatePreference(userID, itemID);
}
@Override
- public void setPreference(Comparable<?> userID, Comparable<?> itemID, double value) throws TasteException {
+ public void setPreference(Comparable<?> userID, Comparable<?> itemID, float value) throws TasteException {
recommender.setPreference(userID, itemID, value);
}
Modified: lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommenderEvaluatorRunner.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommenderEvaluatorRunner.java?rev=800634&r1=800633&r2=800634&view=diff
==============================================================================
--- lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommenderEvaluatorRunner.java (original)
+++ lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/netflix/NetflixRecommenderEvaluatorRunner.java Tue Aug 4 00:06:46 2009
@@ -24,8 +24,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.io.File;
+import java.io.IOException;
public final class NetflixRecommenderEvaluatorRunner {