/** * Test falling back to an empty user. */ @Test public void testUserMeanBaselineFallback() { ItemScorer mean = makeGlobalMean(); ItemScorer pred = new UserMeanItemScorer(new StandardRatingVectorPDAO(dao), mean, 0); // unseen user - should be global mean assertThat(pred.score(10, 10).getScore(), closeTo(RATINGS_DAT_MEAN, 0.001)); }
@Test public void testNoUser() { EntityCollectionDAO dao = EntityCollectionDAO.create(); RatingVectorPDAO source = new StandardRatingVectorPDAO(dao); assertThat(source.userRatingVector(42).entrySet(), hasSize(0)); }
@Before public void setup() { List<Rating> rs = new ArrayList<>(); rs.add(rating(1, 7, 4, 1)); rs.add(rating(3, 7, 3, 1)); rs.add(rating(4, 7, 4, 2)); rs.add(rating(5, 7, 3, 1)); rs.add(rating(6, 7, 5, 1)); rs.add(rating(1, 8, 5, 2)); rs.add(rating(3, 8, 3, 1)); rs.add(rating(4, 8, 2, 1)); rs.add(rating(5, 8, 5, 2)); rs.add(rating(6, 8, 5, 1)); rs.add(rating(7, 8, 2, 1)); rs.add(rating(1, 9, 3, 1)); rs.add(rating(3, 9, 4, 1)); rs.add(rating(4, 9, 5, 1)); rs.add(rating(7, 9, 3, 2)); rs.add(rating(4, 10, 4, 1)); rs.add(rating(7, 10, 4, 1)); rs.add(rating(1, 11, 5, 1)); rs.add(rating(3, 11, 5, 2)); rs.add(rating(4, 11, 5, 1)); StaticDataSource source = StaticDataSource.fromList(rs); DataAccessObject dao = source.get(); RatingVectorPDAO pdao = new StandardRatingVectorPDAO(dao); snap = new PackedRatingMatrixProvider(pdao, new Random()).get(); ratingList = rs; }
@Before public void setUp() throws Exception { List<Rating> rs = new ArrayList<>(); double[][] ratings = { {0, 12, 13, 14, 15}, {21, 22, 23, 24, 25}, {31, 32, 33, 34, 35}, {41, 42, 43, 44, 45}, {51, 52, 53, 54, 55}, {61, 62, 63, 64, 65}}; EntityFactory ef = new EntityFactory(); data = new Long2ObjectOpenHashMap<>(); for (int user = 1; user <= ratings.length; user++) { double[] userRatings = ratings[user-1]; for (int item = 1; item <= userRatings.length; item++) { double rating = userRatings[item-1]; rs.add(ef.rating(user, item, rating)); Long2DoubleMap itemRatings = data.get(item); if (itemRatings == null) itemRatings = new Long2DoubleOpenHashMap(); itemRatings.put(user, rating); data.put(item, itemRatings); } } StaticDataSource source = StaticDataSource.fromList(rs); DataAccessObject dao = source.get(); snapshot = new PackedRatingMatrixProvider(new StandardRatingVectorPDAO(dao), new Random()).get(); }
@Test public void testGetRating() { EntityCollectionDAO dao = EntityCollectionDAO.create(factory.rating(42, 39, 2.5)); RatingVectorPDAO source = new StandardRatingVectorPDAO(dao); assertThat(source.userRatingVector(42), hasEntry(39L, 2.5)); }
@Test public void testUserItemMeanBaseline() { ItemScorer base = new ItemMeanRatingItemScorer(RatingSummary.create(dao), 0.0); ItemScorer pred = new UserMeanItemScorer(new StandardRatingVectorPDAO(dao), base, 0); // we use user 8 - their average offset is 0.5 // unseen item, should be global mean + user offset assertThat(pred.score(8, 10).getScore(), closeTo(RATINGS_DAT_MEAN + 0.5, 0.001)); // seen item - should be item average + user offset assertThat(pred.score(8, 5).getScore(), closeTo(3.5, 0.001)); } }
@Test public void testUserMeanBaseline() { ItemScorer mean = makeGlobalMean(); ItemScorer pred = new UserMeanItemScorer(new StandardRatingVectorPDAO(dao), mean, 0); // unseen item assertThat(pred.score(8, 4).getScore(), closeTo(4.5, 0.001)); // seen item - should be same avg assertThat(pred.score(8, 10).getScore(), closeTo(4.5, 0.001)); // unseen user - should be global mean assertThat(pred.score(10, 10).getScore(), closeTo(RATINGS_DAT_MEAN, 0.001)); }
private SlopeOneModel getModel(List<Rating> ratings) { StaticDataSource source = StaticDataSource.fromList(ratings); DataAccessObject dao = source.get(); RatingVectorPDAO rvDAO = new StandardRatingVectorPDAO(dao); ItemItemBuildContextProvider contextFactory = new ItemItemBuildContextProvider( rvDAO, new DefaultUserVectorNormalizer()); SlopeOneModelProvider provider = new SlopeOneModelProvider(contextFactory.get(), 0); return provider.get(); }
@Test public void testGetsOnlyRating() { EntityCollectionDAO dao = EntityCollectionDAO.create(factory.rating(42, 39, 2.5), factory.rating(42, 20, 3.5), factory.rating(17, 39, 1.5)); RatingVectorPDAO source = new StandardRatingVectorPDAO(dao); Long2DoubleMap vec = source.userRatingVector(42); assertThat(vec.entrySet(), hasSize(2)); assertThat(vec, hasEntry(39L, 2.5)); assertThat(vec, hasEntry(20L, 3.5)); } }
RatingVectorPDAO test = new StandardRatingVectorPDAO(testModel); LenskitRecommender rec = null; try {