private LenskitRecommender buildRecommender(LenskitRecommenderEngine engine, @Nonnull DataAccessObject train, @Nullable DataAccessObject runtime) throws RecommenderBuildException { if (runtime == null) { runtime = train; } return engine.createRecommender(runtime); }
/** * Build a recommender from a configuration. The recommender is immediately usable. This is * mostly useful for evaluations and test programs; more sophisticated applications that need * to build multiple recommenders from the same model should use a {@linkplain LenskitRecommenderEngine * recommender engine}. * * @param config The configuration. * @param dao The data access object. * @return The recommender. * @throws RecommenderBuildException If there is an error building the recommender. * @since 2.0 */ public static LenskitRecommender build(LenskitConfiguration config, DataAccessObject dao) throws RecommenderBuildException { return LenskitRecommenderEngine.build(config, dao).createRecommender(dao); } }
/** * Build a recommender from a configuration. The recommender is immediately usable. This is * mostly useful for evaluations and test programs; more sophisticated applications that need * to build multiple recommenders from the same model should use a {@linkplain LenskitRecommenderEngine * recommender engine}. * * @param config The configuration. * @return The recommender. * @throws RecommenderBuildException If there is an error building the recommender. * @since 2.0 * @deprecated Use {@link #build(LenskitConfiguration, DataAccessObject)} */ @Deprecated @SuppressWarnings("deprecation") public static LenskitRecommender build(LenskitConfiguration config) throws RecommenderBuildException { return LenskitRecommenderEngine.build(config).createRecommender(); }
/** * Create a LensKit recommender. * @param dao The data access object * @return The constructed recommender. */ public LenskitRecommender createRecommender(@WillNotClose DataAccessObject dao) throws RecommenderBuildException { LenskitConfiguration config = new LenskitConfiguration(); config.addComponent(dao); return createRecommender(config); }
@Test public void testContextRemoved() { try (LenskitRecommender rec = engine.createRecommender()) { assertThat(rec.get(ItemItemBuildContext.class), nullValue()); } }
@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))); } } }
@Test public void testFeatureInfo() throws RecommenderBuildException { LenskitRecommenderEngine engine = makeEngine(); try (LenskitRecommender rec = engine.createRecommender(dao)) { FunkSVDModel model = rec.get(FunkSVDModel.class); assertThat(model, notNullValue()); assertThat(model.getFeatureInfo().size(), equalTo(20)); for (FeatureInfo feat : model.getFeatureInfo()) { assertThat(feat.getIterCount(), equalTo(10)); assertThat(feat.getLastDeltaRMSE(), greaterThan(0.0)); } } }
@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 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)); }
@SuppressWarnings("deprecation") @Test public void testSlopeOneRecommenderEngineCreate() { try (Recommender rec = engine.createRecommender(dao)) { assertThat(rec.getItemScorer(), instanceOf(SlopeOneItemScorer.class)); RatingPredictor rp = rec.getRatingPredictor(); assertThat(rp, notNullValue()); assertThat(rp, instanceOf(SimpleRatingPredictor.class)); assertThat(((SimpleRatingPredictor) rp).getItemScorer(), sameInstance(rec.getItemScorer())); assertThat(rec.getItemRecommender(), instanceOf(TopNItemRecommender.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))); } } }
@SuppressWarnings("deprecation") @Test public void testFunkSVDRecommenderEngineCreate() throws RecommenderBuildException { LenskitRecommenderEngine engine = makeEngine(); try (Recommender rec = engine.createRecommender(dao)) { assertThat(rec.getItemScorer(), instanceOf(FunkSVDItemScorer.class)); assertThat(rec.getItemRecommender(), instanceOf(TopNItemRecommender.class)); RatingPredictor pred = rec.getRatingPredictor(); assertThat(pred, notNullValue()); assertThat(pred, instanceOf(SimpleRatingPredictor.class)); assertThat(((SimpleRatingPredictor) pred).getItemScorer(), sameInstance(rec.getItemScorer())); } }
@Test public void testHPFRecommenderScorer() throws RecommenderBuildException { LenskitRecommenderEngine engine = makeEngine(); LongArrayList items = new LongArrayList(); long[] itemIds = {1L, 2L, 3L, 4L, 5L}; items.addElements(0, itemIds); try (Recommender rec = engine.createRecommender(dao)) { Map<Long,Double> results = rec.getItemScorer().score(1L,items); assertThat(results, notNullValue()); System.out.println(results); System.out.println(rec.getItemScorer().score(2L,items)); System.out.println(rec.getItemScorer().score(3L,items)); System.out.println(rec.getItemScorer().score(4L,items)); System.out.println(rec.getItemScorer().score(5L,items)); System.out.println(rec.getItemScorer().score(6L,items)); } }
@Test public void testHPFRecommenderEngineCreate() throws RecommenderBuildException { LenskitRecommenderEngine engine = makeEngine(); try (Recommender rec = engine.createRecommender(dao)) { assertThat(rec.getItemScorer(), instanceOf(HPFItemScorer.class)); assertThat(rec.getItemRecommender(), instanceOf(TopNItemRecommender.class)); RatingPredictor pred = rec.getRatingPredictor(); assertThat(pred, notNullValue()); assertThat(pred, instanceOf(SimpleRatingPredictor.class)); assertThat(((SimpleRatingPredictor) pred).getItemScorer(), sameInstance(rec.getItemScorer())); } }
@Test public void testRecommendWithMinCommonUsers() { config.set(MinCommonUsers.class).to(1); session = LenskitRecommenderEngine.build(config, data).createRecommender(data); recommender = session.getItemRecommender(); List<Long> recs = recommender.recommend(1); assertThat(recs, hasSize(0)); recs = recommender.recommend(2); assertThat(recs, contains(9L)); }