@Test public void testConfigSeparation() { try (LenskitRecommender rec1 = engine.createRecommender(); LenskitRecommender rec2 = engine.createRecommender()) { assertThat(rec1.getItemScorer(), not(sameInstance(rec2.getItemScorer()))); assertThat(rec1.get(ItemItemModel.class), allOf(not(nullValue()), sameInstance(rec2.get(ItemItemModel.class)))); } } }
@Test public void testConfigSeparation() { try (LenskitRecommender rec1 = engine.createRecommender(dao); LenskitRecommender rec2 = engine.createRecommender(dao)) { assertThat(rec1.getItemScorer(), not(sameInstance(rec2.getItemScorer()))); assertThat(rec1.get(SlopeOneModel.class), allOf(not(nullValue()), sameInstance(rec2.get(SlopeOneModel.class)))); } } }
@Test public void testConfigSeparation() { try(LenskitRecommender rec1 = engine.createRecommender(dao); LenskitRecommender rec2 = engine.createRecommender(dao)){ assertThat(rec1.getItemScorer(), not(sameInstance(rec2.getItemScorer()))); assertThat(rec1.get(ItemItemModel.class), allOf(not(nullValue()), sameInstance(rec2.get(ItemItemModel.class)))); } } }
@Test public void testConfigSeparation() throws RecommenderBuildException { LenskitRecommenderEngine engine = makeEngine(); try (LenskitRecommender rec1 = engine.createRecommender(dao); LenskitRecommender rec2 = engine.createRecommender(dao)) { assertThat(rec1.getItemScorer(), not(sameInstance(rec2.getItemScorer()))); assertThat(rec1.get(HPFModel.class), sameInstance(rec2.get(HPFModel.class))); } }
@Test public void testConfigSeparation() throws RecommenderBuildException { LenskitRecommenderEngine engine = makeEngine(); try (LenskitRecommender rec1 = engine.createRecommender(dao); LenskitRecommender rec2 = engine.createRecommender(dao)) { assertThat(rec1.getItemScorer(), not(sameInstance(rec2.getItemScorer()))); assertThat(rec1.get(FunkSVDModel.class), sameInstance(rec2.get(FunkSVDModel.class))); } } }
@SuppressWarnings("deprecation") @Test public void testItemItemRecommenderEngineCreate() { try (LenskitRecommender rec = engine.createRecommender(dao)) { assertThat(rec.getItemScorer(), instanceOf(ItemItemScorer.class)); assertThat(rec.getRatingPredictor(), instanceOf(SimpleRatingPredictor.class)); assertThat(rec.getItemRecommender(), instanceOf(TopNItemRecommender.class)); assertThat(rec.getItemBasedItemRecommender(), instanceOf(TopNItemBasedItemRecommender.class)); assertThat(rec.get(ItemBasedItemScorer.class), instanceOf(ItemItemItemBasedItemScorer.class)); } }
@SuppressWarnings("deprecation") @Test public void testItemItemRecommenderEngineCreate() { try (LenskitRecommender rec = engine.createRecommender()) { assertThat(rec.getItemScorer(), instanceOf(ItemItemScorer.class)); assertThat(rec.getRatingPredictor(), instanceOf(SimpleRatingPredictor.class)); assertThat(rec.getItemRecommender(), instanceOf(TopNItemRecommender.class)); assertThat(rec.getItemBasedItemRecommender(), instanceOf(TopNItemBasedItemRecommender.class)); assertThat(rec.get(ItemBasedItemScorer.class), instanceOf(ItemItemItemBasedItemScorer.class)); } }
@Test public void testInject() throws RecommenderBuildException { LenskitConfiguration config = new LenskitConfiguration(); config.addComponent(EntityCollectionDAO.create()); config.bind(ItemScorer.class).to(ConstantItemScorer.class); config.set(ConstantItemScorer.Value.class).to(Math.PI); try (LenskitRecommender rec = LenskitRecommenderEngine.build(config).createRecommender()) { ItemScorer scorer = rec.getItemScorer(); assertThat(scorer, notNullValue()); assertThat(scorer, instanceOf(ConstantItemScorer.class)); Map<Long, Double> v = scorer.score(42, LongUtils.packedSet(1, 2, 3, 5, 7)); assertThat(v.keySet(), hasSize(5)); assertThat(v.keySet(), containsInAnyOrder(1L, 2L, 3L, 5L, 7L)); assertThat(v.values(), everyItem(equalTo(Math.PI))); } } }
@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 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)); }
@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)); }
@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)); } }
if (rec != null) { irec = rec.getItemRecommender(); iscore = rec.getItemScorer();