static Function<DoubleVertex, LinearRegressionGraph.OutputVertices<BooleanTensor>> logisticOutputTransform() { return probabilities -> { DoubleVertex sigmoid = probabilities.sigmoid(); return new LinearRegressionGraph.OutputVertices<>(sigmoid.greaterThan(ConstantVertex.of(0.5)), new BernoulliVertex(sigmoid)); }; }
@Test public void canUseGradientBasedSamplingWithAssertVertex() { DoubleVertex A = new GaussianVertex(20.0, 1.0); DoubleVertex B = new GaussianVertex(20.0, 1.0); A.setValue(21.5); B.setAndCascade(21.5); A.greaterThan(new ConstantDoubleVertex(20)).assertTrue(); B.greaterThan(new ConstantDoubleVertex(20)).assertTrue(); DoubleVertex Cobserved = new GaussianVertex(A.plus(B), 1.0); Cobserved.observe(46.0); KeanuProbabilisticModel bayesNet = new KeanuProbabilisticModel(Arrays.asList(A, B, Cobserved)); PosteriorSamplingAlgorithm samplingAlgorithm = Keanu.Sampling.MCMC.withDefaultConfigFor(bayesNet); assertThat(samplingAlgorithm, instanceOf(NUTS.class)); }
@Test public void canUseGradientOptimizerWithAssertVertex() { DoubleVertex A = new GaussianVertex(20.0, 1.0); DoubleVertex B = new GaussianVertex(20.0, 1.0); A.setValue(21.5); B.setAndCascade(21.5); A.greaterThan(new ConstantDoubleVertex(20)).assertTrue(); B.greaterThan(new ConstantDoubleVertex(20)).assertTrue(); DoubleVertex Cobserved = new GaussianVertex(A.plus(B), 1.0); Cobserved.observe(46.0); BayesianNetwork bayesNet = new BayesianNetwork(Arrays.asList(A, B, Cobserved)); Optimizer optimizer = KeanuOptimizer.of(bayesNet); assertThat(optimizer, instanceOf(GradientOptimizer.class)); optimizer.maxAPosteriori(); double maxA = A.getValue().scalar(); double maxB = B.getValue().scalar(); assertEquals(22, maxA, 0.1); assertEquals(22, maxB, 0.1); }