/** * Build a LensKit recommender engine from a configuration. The resulting recommender is * independent of any subsequent modifications to the configuration. * * @param config The configuration. * @return The recommender engine. */ @SuppressWarnings("deprecation") public static LenskitRecommenderEngine build(LenskitConfiguration config) throws RecommenderBuildException { return newBuilder().addConfiguration(config).build(); }
/** * Build the recommender engine. * * @param dao The data access object to use. Can be `null` to build without a DAO, but this is only useful in * special cases. * @return The built recommender engine, with {@linkplain ModelDisposition#EXCLUDED excluded} * components removed. * @throws RecommenderBuildException if there is an error building the engine. */ public LenskitRecommenderEngine build(DataAccessObject dao) throws RecommenderBuildException { DAGNode<Component, Dependency> graph = buildRecommenderGraph(dao); graph = instantiateGraph(graph); graph = rewriteExcludedComponents(graph, dao); boolean instantiable = GraphtUtils.getPlaceholderNodes(graph).isEmpty(); return new LenskitRecommenderEngine(graph, instantiable); }
/** * Create a new recommender engine builder. * @return A new recommender engine builder. */ public static LenskitRecommenderEngineBuilder newBuilder() { return new LenskitRecommenderEngineBuilder(); }
/** * Build the recommender directly, skipping an engine. This does not separate the recommender from * the DAO, it just directly builds it. * * @param dao The data access object to use. Can be `null` to build without a DAO, but this is only useful in * special cases. * @return The built recommender engine, with {@linkplain ModelDisposition#EXCLUDED excluded} * components removed. * @throws RecommenderBuildException if there is an error building the engine. */ public LenskitRecommender buildRecommender(DataAccessObject dao) throws RecommenderBuildException { DAGNode<Component, Dependency> graph = buildRecommenderGraph(dao); graph = instantiateGraph(graph); return new LenskitRecommender(graph); }
/** * Build the recommender engine. * * @return The built recommender engine, with {@linkplain ModelDisposition#EXCLUDED excluded} * components removed. * @throws RecommenderBuildException if there is an error building the recommender. * @deprecated Use {@link #build(DataAccessObject)} */ @Deprecated public LenskitRecommenderEngine build() throws RecommenderBuildException { return build(null); }
/** * Add a configuration to be included in the recommender engine. This is the equivalent of * calling {@link #addConfiguration(LenskitConfiguration, ModelDisposition)} with the {@link ModelDisposition#INCLUDED}. * @param config The configuration. * @return The builder (for chaining). */ public LenskitRecommenderEngineBuilder addConfiguration(LenskitConfiguration config) { return addConfiguration(config, ModelDisposition.INCLUDED); }
@Override protected DAGNode<Component, Dependency> buildRecommenderGraph(DataAccessObject dao) { DAGNode<Component, Dependency> graph = super.buildRecommenderGraph(dao); if (mergePool != null) { logger.debug("deduplicating configuration graph"); synchronized (mergePool) { graph = mergePool.merge(graph); } } return graph; }
@Override protected DAGNode<Component, Dependency> instantiateGraph(DAGNode<Component, Dependency> graph) { if (cache == null) { logger.debug("Building directly without a cache"); return super.instantiateGraph(graph); } else { logger.debug("Instantiating graph with a cache"); try { Set<DAGNode<Component, Dependency>> nodes = GraphtUtils.getShareableNodes(graph); logger.debug("resolving {} nodes", nodes.size()); DAGNode<Component, Dependency> newGraph = NodeProcessors.processNodes(graph, nodes, cache); logger.debug("newGraph went from {} to {} nodes", newGraph.getReachableNodes().size(), newGraph.getReachableNodes().size()); return newGraph; } catch (InjectionException e) { logger.error("Error instantiating recommender nodes with cache", e); throw new RecommenderBuildException("Cached instantiation failed", e); } } } }
/** * Build the recommender directly, skipping an engine. This does not separate the recommender from * the DAO, it just directly builds it. * * @param dao The data access object to use. Can be `null` to build without a DAO, but this is only useful in * special cases. * @return The built recommender engine, with {@linkplain ModelDisposition#EXCLUDED excluded} * components removed. * @throws RecommenderBuildException if there is an error building the engine. */ public LenskitRecommender buildRecommender(DataAccessObject dao) throws RecommenderBuildException { DAGNode<Component, Dependency> graph = buildRecommenderGraph(dao); graph = instantiateGraph(graph); return new LenskitRecommender(graph); }
/** * Build the recommender engine. * * @return The built recommender engine, with {@linkplain ModelDisposition#EXCLUDED excluded} * components removed. * @throws RecommenderBuildException if there is an error building the recommender. * @deprecated Use {@link #build(DataAccessObject)} */ @Deprecated public LenskitRecommenderEngine build() throws RecommenderBuildException { return build(null); }
/** * Add a configuration to be included in the recommender engine. This is the equivalent of * calling {@link #addConfiguration(LenskitConfiguration, ModelDisposition)} with the {@link ModelDisposition#INCLUDED}. * @param config The configuration. * @return The builder (for chaining). */ public LenskitRecommenderEngineBuilder addConfiguration(LenskitConfiguration config) { return addConfiguration(config, ModelDisposition.INCLUDED); }
/** * Build a LensKit recommender engine from a configuration. The resulting recommender is * independent of any subsequent modifications to the configuration. * * @param config The configuration. * @param dao The data access object * @return The recommender engine. */ public static LenskitRecommenderEngine build(LenskitConfiguration config, DataAccessObject dao) throws RecommenderBuildException { return newBuilder().addConfiguration(config).build(dao); }
/** * Build the recommender engine. * * @param dao The data access object to use. Can be `null` to build without a DAO, but this is only useful in * special cases. * @return The built recommender engine, with {@linkplain ModelDisposition#EXCLUDED excluded} * components removed. * @throws RecommenderBuildException if there is an error building the engine. */ public LenskitRecommenderEngine build(DataAccessObject dao) throws RecommenderBuildException { DAGNode<Component, Dependency> graph = buildRecommenderGraph(dao); graph = instantiateGraph(graph); graph = rewriteExcludedComponents(graph, dao); boolean instantiable = GraphtUtils.getPlaceholderNodes(graph).isEmpty(); return new LenskitRecommenderEngine(graph, instantiable); }
/** * Create a new recommender engine builder. * @return A new recommender engine builder. */ public static LenskitRecommenderEngineBuilder newBuilder() { return new LenskitRecommenderEngineBuilder(); }
private LenskitRecommenderEngine buildRecommenderEngine(DataAccessObject train) throws RecommenderBuildException { logger.debug("Starting recommender build"); LenskitRecommenderEngineBuilder builder = new EvalEngineBuilder(); builder.addConfiguration(sharedConfig); builder.addConfiguration(dataSet.getExtraConfiguration()); for (LenskitConfiguration cfg: algorithm.getConfigurations()) { builder.addConfiguration(cfg); } return builder.build(train); }
@Override public void execute(Namespace opts) throws LenskitCommandException { Context ctx = new Context(opts); LenskitConfiguration dataConfig = ctx.input.getConfiguration(); LenskitRecommenderEngineBuilder builder = LenskitRecommenderEngine.newBuilder(); try { for (LenskitConfiguration config: ctx.environment.loadConfigurations(ctx.getConfigFiles())) { builder.addConfiguration(config); } } catch (IOException e) { throw new LenskitCommandException("error loading LensKit configuration", e); } builder.addConfiguration(dataConfig, ModelDisposition.EXCLUDED); Stopwatch timer = Stopwatch.createStarted(); LenskitRecommenderEngine engine = builder.build(ctx.input.getDAO()); timer.stop(); logger.info("built model in {}", timer); File output = ctx.getOutputFile(); CompressionMode comp = CompressionMode.autodetect(output); logger.info("writing model to {}", output); try (OutputStream raw = new FileOutputStream(output); OutputStream stream = comp.wrapOutput(raw)) { engine.write(stream); } catch (IOException e) { throw new LenskitCommandException("could not write output file", e); } }
LenskitRecommenderEngineBuilder builder = LenskitRecommenderEngine.newBuilder(); for (LenskitConfiguration config: environment.loadConfigurations(getConfigFiles())) { builder.addConfiguration(config); LenskitRecommenderEngine engine = builder.build(input.getDAO()); timer.stop(); logger.info("built recommender in {}", timer);
.addConfiguration(algorithm.getConfigurations().get(0)) .build(limitedDao); timer.stop(); logger.info("built model {} in {}", buildsCount, timer);
/** * Build a LensKit recommender engine from a configuration. The resulting recommender is * independent of any subsequent modifications to the configuration. * * @param config The configuration. * @param dao The data access object * @return The recommender engine. */ public static LenskitRecommenderEngine build(LenskitConfiguration config, DataAccessObject dao) throws RecommenderBuildException { return newBuilder().addConfiguration(config).build(dao); }
/** * Build a LensKit recommender engine from a configuration. The resulting recommender is * independent of any subsequent modifications to the configuration. * * @param config The configuration. * @return The recommender engine. */ @SuppressWarnings("deprecation") public static LenskitRecommenderEngine build(LenskitConfiguration config) throws RecommenderBuildException { return newBuilder().addConfiguration(config).build(); }