rec = LenskitRecommender.build(config, dao);
@Test public void testGlobalMeanBias() { config.bind(BiasModel.class).to(GlobalBiasModel.class); ItemScorer pred = LenskitRecommender.build(config, dao).getItemScorer(); assertThat(pred, notNullValue()); Result score = pred.score(10L, 2L); assertThat(score.getScore(), closeTo(RATINGS_DAT_MEAN, 0.00001)); }
@Test public void testItemItemRecommenderNonSymmetric() { config.bind(ItemSimilarity.class) .to(NonSymmetricSimilarity.class); session = LenskitRecommender.build(config, data); recommender = session.getItemRecommender(); List<Long> recs = recommender.recommend(1); assertThat(recs, hasSize(0)); recs = recommender.recommend(2); assertThat(recs, contains(9L)); recs = recommender.recommend(3); assertThat(recs, contains(6L)); recs = recommender.recommend(4); assertThat(recs, containsInAnyOrder(6L, 9L)); assertEquals(2, recs.size()); recs = recommender.recommend(5); assertThat(recs, containsInAnyOrder(6L, 7L, 9L)); recs = recommender.recommend(6); assertThat(recs, containsInAnyOrder(6L, 7L, 9L)); }
@Test public void testItemMeanBaseline() { config.bind(BiasModel.class).to(ItemBiasModel.class); ItemScorer pred = LenskitRecommender.build(config, dao).getItemScorer(); assertThat(pred, notNullValue()); // unseen item, should be global mean assertThat(pred.score(10, 2).getScore(), closeTo(RATINGS_DAT_MEAN, 0.001)); // seen item - should be item average assertThat(pred.score(10, 5).getScore(), closeTo(3.0, 0.001)); }
.setPrecision(1) .build()); try (Recommender rec = LenskitRecommender.build(config, dao)) { ItemScorer predictor = rec.getItemScorer();
.setPrecision(1) .build()); try (Recommender rec = LenskitRecommender.build(config, dao)) { ItemScorer predictor = rec.getItemScorer();
@Test public void testUserMeanBaseline() { config.bind(BiasModel.class).to(UserBiasModel.class); ItemScorer pred = LenskitRecommender.build(config, dao).getItemScorer(); assertThat(pred, notNullValue()); // 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)); }
.setPrecision(1) .build()); try (Recommender rec = LenskitRecommender.build(config, dao)) { ItemScorer predictor = rec.getItemScorer();
.setPrecision(1) .build()); try (Recommender rec = LenskitRecommender.build(config, dao)) { ItemScorer predictor = rec.getItemScorer();
@Test public void testUserItemMeanBaseline() { config.bind(BiasModel.class).to(UserItemBiasModel.class); ItemScorer pred = LenskitRecommender.build(config, dao).getItemScorer(); assertThat(pred, notNullValue()); // 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)); // seen item, unknown user - should be item average assertThat(pred.score(28, 5).getScore(), closeTo(3, 0.001)); }
@Test public void testLiveItemMeanBaseline() { config.bind(BiasModel.class).to(LiveUserItemBiasModel.class); ItemScorer pred = LenskitRecommender.build(config, dao).getItemScorer(); assertThat(pred, notNullValue()); // 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)); // seen item, unknown user - should be item average assertThat(pred.score(28, 5).getScore(), closeTo(3, 0.001)); }
@Test public void testUserItemMeanBaselineMultiRec() { config.bind(BiasModel.class).to(UserItemBiasModel.class); ItemScorer pred = LenskitRecommender.build(config, dao).getItemScorer(); assertThat(pred, notNullValue()); // 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)); ResultMap results = pred.scoreWithDetails(8, LongUtils.packedSet(5, 10)); assertThat(results.getScore(10), closeTo(RATINGS_DAT_MEAN + 0.5, 0.001)); assertThat(results.getScore(5), closeTo(3.5, 0.001)); Map<Long, Double> basic = pred.score(8, LongUtils.packedSet(5, 10)); assertThat(basic.get(10L), closeTo(RATINGS_DAT_MEAN + 0.5, 0.001)); assertThat(basic.get(5L), closeTo(3.5, 0.001)); } }
@Test public void testComputeUserMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(102, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(101, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(UserAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getUserBias(100), closeTo(-0.5, 1.0e-3)); assertThat(model.getUserBias(101), closeTo(0.25, 1.0e-3)); assertThat(model.getUserBias(102), closeTo(0.0, 1.0e-3)); }
@Test public void testComputeMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(101, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(103, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(ItemAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getItemBias(200), closeTo(0.0, 1.0e-3)); assertThat(model.getItemBias(201), closeTo(-1.0, 1.0e-3)); assertThat(model.getItemBias(203), closeTo(0.5, 1.0e-3)); } }
@Test public void testComputeItemMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(101, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(103, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(ItemAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getItemBias(200), closeTo(0.0, 1.0e-3)); assertThat(model.getItemBias(201), closeTo(-1.0, 1.0e-3)); assertThat(model.getItemBias(203), closeTo(0.5, 1.0e-3)); }
@Test public void testComputeMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(102, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(101, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).to(UserBiasModel.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getUserBias(100), closeTo(-0.5, 1.0e-3)); assertThat(model.getUserBias(101), closeTo(0.25, 1.0e-3)); assertThat(model.getUserBias(102), closeTo(0.0, 1.0e-3)); } }
@Before public void createNormalizer() { EntityFactory ef = new EntityFactory(); EntityCollectionDAOBuilder db = new EntityCollectionDAOBuilder(); /* Set up so that b=3.0, b(u=42) = 0.5, b(u=37) = -0.2, b(i=1) = 0.2, b(i=2) = -0.1 */ db.addEntities(ef.rating(42, 7, 3.0), ef.rating(42, 8, 4.0), ef.rating(37, 9, 3.0), ef.rating(37, 10, 2.6), ef.rating(99, 1, 3.2), ef.rating(99, 2, 2.9), ef.rating(99, 7, 2), ef.rating(99, 8, 3), ef.rating(99, 9, 3.4), ef.rating(99, 10, 3.0), ef.rating(99, 99, 2.9)); db.deriveEntities(CommonTypes.ITEM, CommonTypes.RATING, CommonAttributes.ITEM_ID); db.deriveEntities(CommonTypes.USER, CommonTypes.RATING, CommonAttributes.USER_ID); LenskitConfiguration config = new LenskitConfiguration(); config.bind(BaselineScorer.class, ItemScorer.class).to(UserMeanItemScorer.class); config.bind(UserMeanBaseline.class, ItemScorer.class).to(ItemMeanRatingItemScorer.class); config.bind(UserVectorNormalizer.class).to(BaselineSubtractingUserVectorNormalizer.class); config.addRoot(UserVectorNormalizer.class); recommender = LenskitRecommender.build(config, db.build()); normalizer = recommender.get(UserVectorNormalizer.class); }
@Test public void testComputeAllMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(102, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(101, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(UserItemAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getItemBias(200), closeTo(0.0, 1.0e-3)); assertThat(model.getItemBias(201), closeTo(-1.0, 1.0e-3)); assertThat(model.getItemBias(203), closeTo(0.5, 1.0e-3)); assertThat(model.getUserBias(100), closeTo(-0.5, 1.0e-3)); assertThat(model.getUserBias(101), closeTo(0, 1.0e-3)); assertThat(model.getUserBias(102), closeTo(0.25, 1.0e-3)); } }