@Override public ItemRecommender getItemRecommender() { return get(ItemRecommender.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)); } }
/** * Create a recommender. * @return The recommender * @deprecated Use {@link #createRecommender(DataAccessObject)} */ @Deprecated @Override public LenskitRecommender createRecommender() { Preconditions.checkState(instantiable, "recommender engine does not have instantiable graph"); return new LenskitRecommender(graph); }
@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)))); } } }
ItemRecommender irec = rec.getItemRecommender(); DataAccessObject dao = rec.getDataAccessObject();
@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 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)); }
ItemScorer iscore = null; if (rec != null) { irec = rec.getItemRecommender(); iscore = rec.getItemScorer(); createFile = false; rec.close(); return model;
@Test public void testRecommendWithMinCommonUsers3() { config.set(MinCommonUsers.class).to(3); session = LenskitRecommenderEngine.build(config, data).createRecommender(data); recommender = session.getItemRecommender(); List<Long> recs = recommender.recommend(2); assertThat(recs, hasSize(0)); }
@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)); }
rec = LenskitRecommender.build(config, dao);
@After public void destroyRecommender() { recommender.close(); }
@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))); } } }
ItemBasedItemRecommender irec = rec.getItemBasedItemRecommender(); DataAccessObject dao = rec.getDataAccessObject(); if (irec == null) { logger.error("recommender has no global recommender");
@SuppressWarnings("deprecation") @Before public void setup() throws RecommenderBuildException { List<Rating> rs = new ArrayList<>(); rs.add(Rating.create(1, 1, 1)); rs.add(Rating.create(1, 5, 1)); rs.add(Rating.create(2, 1, 1)); rs.add(Rating.create(2, 7, 1)); rs.add(Rating.create(3, 7, 1)); rs.add(Rating.create(4, 1, 1)); rs.add(Rating.create(4, 5, 1)); rs.add(Rating.create(4, 7, 1)); rs.add(Rating.create(4, 10, 1)); StaticDataSource source = StaticDataSource.fromList(rs); DataAccessObject dao = source.get(); LenskitConfiguration config = new LenskitConfiguration(); config.bind(ItemBasedItemScorer.class).to(ItemItemItemBasedItemScorer.class); // this is the default config.bind(UserVectorNormalizer.class) .to(DefaultUserVectorNormalizer.class); config.bind(VectorNormalizer.class) .to(IdentityVectorNormalizer.class); LenskitRecommenderEngine engine = LenskitRecommenderEngine.build(config, dao); session = engine.createRecommender(dao); gRecommender = session.getItemBasedItemRecommender(); }
@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 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 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)); }
/** * Tests {@code recommend(long, SparseVector)}. */ @Test public void testUserUserRecommender1() { ItemRecommender recommender = rec.getItemRecommender(); assert recommender != null; List<Long> recs = recommender.recommend(1); assertTrue(recs.isEmpty()); recs = recommender.recommend(2); assertThat(recs, containsInAnyOrder(9L)); recs = recommender.recommend(3); assertThat(recs, containsInAnyOrder(6L)); recs = recommender.recommend(4); assertThat(recs, containsInAnyOrder(9L)); recs = recommender.recommend(5); assertThat(recs, containsInAnyOrder(7L)); recs = recommender.recommend(6); assertThat(recs, containsInAnyOrder(6L, 7L)); }
.setPrecision(1) .build()); try (Recommender rec = LenskitRecommender.build(config, dao)) { ItemScorer predictor = rec.getItemScorer();