protected LenskitConfiguration getDaoConfig() { LenskitConfiguration config = new LenskitConfiguration(); config.bind(DataAccessObject.class) .toProvider(source); return config; }
/** * Add a root type. * @param type The type to add. * @see LenskitConfiguration#addRoot(Class) */ public void root(Class<?> type) { config.addRoot(type); }
@SuppressWarnings({"deprecation", "unchecked"}) private LenskitRecommenderEngine makeEngine() throws RecommenderBuildException { LenskitConfiguration config = new LenskitConfiguration(); config.bind(RatingMatrix.class) .to(PackedRatingMatrix.class); config.bind(ItemScorer.class) .to(FunkSVDItemScorer.class); config.bind(BiasModel.class).to(UserItemBiasModel.class); config.set(IterationCount.class) .to(10); config.set(FeatureCount.class) .to(20); return LenskitRecommenderEngine.build(config, dao); }
/** * 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); }
switch (cfg.getRight()) { case EXCLUDED: rewriteBuilder.addBindings(cfg.getLeft().getBindings()); rewriteBuilder.addRoots(cfg.getLeft().getRoots()); rewrite = true; break; LenskitConfiguration cfg = new LenskitConfiguration(); cfg.addComponent(dao); rewriteBuilder.addBindings(cfg.getBindings()); rewrite = true;
@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); }
/** * Construct a new delegate with an empty configuration. * * @param loader The configuration loader * @param base The base URL */ public LenskitConfigDSL(ConfigurationLoader loader, URI base) { this(loader, new LenskitConfiguration(), base); }
@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))); } } }
return null; LenskitConfiguration config = new LenskitConfiguration(); config.bind(ItemScorer.class).to((Class<? extends ItemScorer>) Class.forName(getProperties().getProperty(RecommendationRunner.RECOMMENDER))); } catch (ClassNotFoundException e) { e.printStackTrace(); config.bind(NeighborFinder.class).to(LiveNeighborFinder.class); if (getProperties().getProperty(RecommendationRunner.NEIGHBORHOOD).equals("-1")) { getProperties().setProperty(RecommendationRunner.NEIGHBORHOOD, Math.round(Math.sqrt(nItems)) + ""); config.set(NeighborhoodSize.class).to(Integer.parseInt(getProperties().getProperty(RecommendationRunner.NEIGHBORHOOD))); config.within(ItemSimilarity.class). bind(VectorSimilarity.class). to((Class<? extends VectorSimilarity>) Class.forName(getProperties().getProperty(RecommendationRunner.SIMILARITY))); config.bind(BaselineScorer.class, ItemScorer.class).to(UserMeanItemScorer.class); config.bind(StoppingCondition.class).to(IterationCountStoppingCondition.class); config.bind(BiasModel.class).to(UserItemBiasModel.class); config.set(IterationCount.class).to(DEFAULT_ITERATIONS); if (getProperties().getProperty(RecommendationRunner.FACTORS).equals("-1")) { getProperties().setProperty(RecommendationRunner.FACTORS, Math.round(Math.sqrt(nItems)) + ""); config.set(FeatureCount.class).to(Integer.parseInt(getProperties().getProperty(RecommendationRunner.FACTORS)));
StaticDataSource source = StaticDataSource.fromList(rs); DataAccessObject dao = source.get(); LenskitConfiguration config = new LenskitConfiguration(); config.bind(ItemScorer.class).to(UserUserItemScorer.class); config.bind(NeighborFinder.class).to(LiveNeighborFinder.class); config.within(UserSimilarity.class) .bind(VectorSimilarity.class) .to(PearsonCorrelation.class);
@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)); }
LenskitConfiguration config = new LenskitConfiguration(); for (EvalTask task: tasks) { for (Class<?> cls: task.getRequiredRoots()) { config.addRoot(cls);
@SuppressWarnings("unchecked") @Override protected void configureAlgorithm(LenskitConfiguration config) { config.bind(ItemScorer.class) .to(FunkSVDItemScorer.class); config.bind(BaselineScorer.class, ItemScorer.class) .to(UserMeanItemScorer.class); config.bind(UserMeanBaseline.class, ItemScorer.class) .to(ItemMeanRatingItemScorer.class); config.within(BaselineScorer.class, ItemScorer.class) .set(MeanDamping.class) .to(10); config.set(FeatureCount.class).to(25); config.set(IterationCount.class).to(125); config.bind(RatingPredictor.class) .to(OrdRecRatingPredictor.class); config.bind(Quantizer.class) .to(PreferenceDomainQuantizer.class); }
/** * Test that we can bind a file parameter to a string and have it work. * * @throws InjectionException if there is an (unexpected) injection failure. */ @Test @Ignore("this test is no longer effective") @SuppressWarnings("unchecked") public void testSetFile() throws InjectionException { LenskitConfiguration config = new LenskitConfiguration(); config.clearRoots(); // config.bind(EventFormat.class).to(Formats.ml100kFormat()); RecommenderGraphBuilder rgb = new RecommenderGraphBuilder(); rgb.addConfiguration(config); try (Injector inj = new StaticInjector(rgb.buildGraph())) { // File f = inj.getInstance(AnnotationBuilder.of(EventFile.class).build(), File.class); // assertThat(f.getName(), equalTo("ratings.foodat")); } } }
@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 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)); }
/** * Convenience method to copy a LensKit configuration. * @return An independent copy of this configuration. */ public LenskitConfiguration copy() { return new LenskitConfiguration(this); }
/** * Build a recommender graph for this engine builder's configuration. * * Clients generally do not need to use this; it is exposed for the evaluator. * * @param dao The DAO, if available. * @return The graph. */ protected DAGNode<Component, Dependency> buildRecommenderGraph(DataAccessObject dao) { logger.debug("building graph from {} configurations", configurations.size()); RecommenderGraphBuilder rgb = new RecommenderGraphBuilder(); rgb.setClassLoader(classLoader); for (Pair<LenskitConfiguration, ModelDisposition> cfg : configurations) { rgb.addConfiguration(cfg.getLeft()); } LenskitConfiguration daoConfig; if (dao != null) { daoConfig = new LenskitConfiguration(); daoConfig.addComponent(dao); rgb.addConfiguration(daoConfig); } DAGNode<Component, Dependency> graph; try { graph = rgb.buildGraph(); } catch (ResolutionException e) { throw new RecommenderBuildException("Cannot resolve recommender graph", e); } return graph; }
@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)); }
switch (cfg.getRight()) { case EXCLUDED: rewriteBuilder.addBindings(cfg.getLeft().getBindings()); rewriteBuilder.addRoots(cfg.getLeft().getRoots()); rewrite = true; break; LenskitConfiguration cfg = new LenskitConfiguration(); cfg.addComponent(dao); rewriteBuilder.addBindings(cfg.getBindings()); rewrite = true;