private MetropolisHastingsStep stepFunctionWithConstantProposal(ProbabilisticModel model, double constant, KeanuRandom random) { List<Vertex> latentVertices = (List<Vertex>) model.getLatentVariables(); return new MetropolisHastingsStep( model, constantProposal(constant), new RollBackToCachedValuesOnRejection(latentVertices), random ); }
public static io.improbable.keanu.algorithms.mcmc.MetropolisHastings withDefaultConfigFor(KeanuProbabilisticModel model, KeanuRandom random) { List<Vertex> latentVertices = model.getLatentVertices(); return builder() .proposalDistribution(new PriorProposalDistribution(latentVertices)) .rejectionStrategy(new RollBackToCachedValuesOnRejection(latentVertices)) .random(random) .build(); }
@Test public void doesCalculateCorrectLogProbAfterAcceptingStep() { DoubleVertex A = new GaussianVertex(0, 1); A.setValue(1.0); DoubleVertex B = A.times(2); DoubleVertex observedB = new GaussianVertex(B, 1); observedB.observe(5); BayesianNetwork bayesNet = new BayesianNetwork(A.getConnectedGraph()); KeanuProbabilisticModel model = new KeanuProbabilisticModel(bayesNet); double logProbBeforeStep = model.logProb(); MetropolisHastingsStep mhStep = new MetropolisHastingsStep( model, new PriorProposalDistribution(bayesNet.getAllVertices()), new RollBackToCachedValuesOnRejection(bayesNet.getLatentVertices()), alwaysAccept ); MetropolisHastingsStep.StepResult result = mhStep.step( Collections.singleton(A), logProbBeforeStep ); assertTrue(result.isAccepted()); assertEquals(model.logProb(), result.getLogProbabilityAfterStep(), 1e-10); }
@Test public void samplesContinuousPriorSingleVariableSelected() { MCMCTestCase testCase = new SumGaussianTestCase(); BayesianNetwork bayesNet = testCase.getModel(); KeanuProbabilisticModel model = new KeanuProbabilisticModel(bayesNet); NetworkSamples posteriorSamples = MetropolisHastings.builder() .proposalDistribution(new PriorProposalDistribution(model.getLatentVertices())) .rejectionStrategy(new RollBackToCachedValuesOnRejection(model.getLatentVertices())) .variableSelector(MHStepVariableSelector.SINGLE_VARIABLE_SELECTOR) .build() .getPosteriorSamples( model, model.getLatentVertices(), 5000 ); testCase.assertExpected(posteriorSamples); }
@Test public void samplesContinuousPriorAllVariablesSelected() { MCMCTestCase testCase = new SumGaussianTestCase(); BayesianNetwork bayesNet = testCase.getModel(); KeanuProbabilisticModel model = new KeanuProbabilisticModel(bayesNet); NetworkSamples posteriorSamples = MetropolisHastings.builder() .proposalDistribution(new PriorProposalDistribution(model.getLatentVertices())) .rejectionStrategy(new RollBackToCachedValuesOnRejection(model.getLatentVertices())) .variableSelector(MHStepVariableSelector.FULL_VARIABLE_SELECTOR) .build() .getPosteriorSamples( model, model.getLatentVertices(), 5000 ); testCase.assertExpected(posteriorSamples); }
.rejectionStrategy(new RollBackToCachedValuesOnRejection(network.getLatentVertices())) .build() .getPosteriorSamples(
@Category(Slow.class) @Test public void samplesComplexDiscreteWithFullVariableSelect() { MCMCTestCase testCase = new MultiVariateDiscreteTestCase(); BayesianNetwork bayesNet = testCase.getModel(); KeanuProbabilisticModel model = new KeanuProbabilisticModel(bayesNet); NetworkSamples posteriorSamples = MetropolisHastings.builder() .proposalDistribution(new PriorProposalDistribution(model.getLatentVertices())) .rejectionStrategy(new RollBackToCachedValuesOnRejection(model.getLatentVertices())) .variableSelector(MHStepVariableSelector.FULL_VARIABLE_SELECTOR) .build() .getPosteriorSamples( model, model.getLatentVertices(), 1000 ); testCase.assertExpected(posteriorSamples); }