def test_model_remote_branching_importance_sampling(self): observation = 6 posterior_correct = util.empirical_to_categorical( self.true_posterior(observation), max_val=40) posterior = util.empirical_to_categorical( self._model.posterior_distribution(samples, observation=observation), max_val=40) posterior_probs = util.to_numpy(posterior._probs[0]) posterior_probs_correct = util.to_numpy(posterior_correct._probs[0]) kl_divergence = float( util.kl_divergence_categorical(posterior_correct, posterior)) util.debug('samples', 'posterior_probs', 'posterior_probs_correct', 'kl_divergence') self.assertLess(kl_divergence, 0.25)
def test_model_remote_hmm_posterior_importance_sampling(self): observation = self._observation posterior_mean_correct = self._posterior_mean_correct posterior = self._model.posterior_distribution(samples, observation=observation) posterior_mean_unweighted = posterior.unweighted().mean posterior_mean = posterior.mean l2_distance = float( F.pairwise_distance(posterior_mean, posterior_mean_correct).sum()) kl_divergence = float( sum([ util.kl_divergence_categorical(Categorical(i), Categorical(j)) for (i, j) in zip(posterior_mean, posterior_mean_correct) ])) util.debug('samples', 'posterior_mean_unweighted', 'posterior_mean', 'posterior_mean_correct', 'l2_distance', 'kl_divergence') self.assertLess(l2_distance, 10)
def test_model_remote_branching_random_walk_metropolis_hastings(self): observation = 6 posterior_correct = util.empirical_to_categorical( self.true_posterior(observation), max_val=40) posterior = util.empirical_to_categorical( self._model.posterior_distribution( samples, observation=observation, inference_engine=pyprob.InferenceEngine. RANDOM_WALK_METROPOLIS_HASTINGS), max_val=40) posterior_probs = util.to_numpy(posterior._probs[0]) posterior_probs_correct = util.to_numpy(posterior_correct._probs[0]) kl_divergence = float( util.kl_divergence_categorical(posterior_correct, posterior)) util.debug('samples', 'posterior_probs', 'posterior_probs_correct', 'kl_divergence') self.assertLess(kl_divergence, 0.25)
def test_model_remote_hmm_posterior_random_walk_metropolis_hastings(self): observation = self._observation posterior_mean_correct = self._posterior_mean_correct posterior = self._model.posterior_distribution( samples, inference_engine=pyprob.InferenceEngine. RANDOM_WALK_METROPOLIS_HASTINGS, observation=observation) posterior_mean_unweighted = posterior.unweighted().mean posterior_mean = posterior.mean l2_distance = float( F.pairwise_distance(posterior_mean, posterior_mean_correct).sum()) kl_divergence = float( sum([ util.kl_divergence_categorical(Categorical(i), Categorical(j)) for (i, j) in zip(posterior_mean, posterior_mean_correct) ])) util.debug('samples', 'posterior_mean_unweighted', 'posterior_mean', 'posterior_mean_correct', 'l2_distance', 'kl_divergence') self.assertLess(l2_distance, 10)