Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)