def main():
    d = 5
    ps = rand(d)
    ps /= norm(ps)
    distribution = Bernoulli(ps)
    
    num_history = 100
    Z = distribution.sample(num_history).samples
    threshold = 0.8
    spread = 0.2
    
    gamma = 0.2
    kernel = HypercubeKernel(gamma)
    
    mcmc_sampler = DiscreteKameleon(distribution, kernel, Z, threshold, spread)
    
    start = zeros(distribution.dimension, dtype=numpy.bool8)
    mcmc_params = MCMCParams(start=start, num_iterations=1000)
    chain = MCMCChain(mcmc_sampler, mcmc_params)
    
    chain.append_mcmc_output(StatisticsOutput(plot_times=True))
    chain.append_mcmc_output(DiscretePlottingOutput(plot_from=0, lag=100))
    
    chain.run()
    print "ps", ps
    print "empirical", mean(chain.samples, 0)
Пример #2
0
 def test_sample_dim(self):
     n = 3
     d = 2
     p = asarray(rand(d))
     b = Bernoulli(p)
     s = b.sample(n)
     self.assertEqual(s.samples.shape, (n, d))
Пример #3
0
 def test_log_pdf_array_dimension(self):
     d = 3
     n = 2
     ps = asarray(rand(d))
     b = Bernoulli(ps)
     X = randint(0, 2, (n, d)).astype(numpy.bool8)
     self.assertEqual(b.log_pdf(X).shape, (n, ))
Пример #4
0
    def test_chain_bernoulli(self):
        # runs the sampler on a distribution of infdependent bernoulli variables
        # and compares the mean
        d = 5
        ps = rand(d)
        ps /= norm(ps)
        distribution = Bernoulli(ps)

        num_history = 100
        Z = distribution.sample(num_history).samples
        threshold = 0.8
        spread = 0.2

        gamma = 0.2
        kernel = HypercubeKernel(gamma)

        mcmc_sampler = DiscreteKameleon(distribution, kernel, Z, threshold,
                                        spread)

        start = zeros(distribution.dimension, dtype=numpy.bool8)
        mcmc_params = MCMCParams(start=start, num_iterations=1000)
        chain = MCMCChain(mcmc_sampler, mcmc_params)

        chain.run()
        self.assertAlmostEqual(norm(mean(chain.samples, 0) - ps), 0, delta=0.2)
def main():
    d = 5
    ps = rand(d)
    ps /= norm(ps)
    distribution = Bernoulli(ps)

    num_history = 100
    Z = distribution.sample(num_history).samples
    threshold = 0.8
    spread = 0.2

    gamma = 0.2
    kernel = HypercubeKernel(gamma)

    mcmc_sampler = DiscreteKameleon(distribution, kernel, Z, threshold, spread)

    start = zeros(distribution.dimension, dtype=numpy.bool8)
    mcmc_params = MCMCParams(start=start, num_iterations=1000)
    chain = MCMCChain(mcmc_sampler, mcmc_params)

    chain.append_mcmc_output(StatisticsOutput(plot_times=True))
    chain.append_mcmc_output(DiscretePlottingOutput(plot_from=0, lag=100))

    chain.run()
    print "ps", ps
    print "empirical", mean(chain.samples, 0)
Пример #6
0
    def test_sample_mean_values(self):
        n = 10000
        d = 3
        runs = 100

        for _ in range(runs):
            ps = asarray(rand(d))
            b = Bernoulli(ps)
            s = b.sample(n)
            for i in range(d):
                self.assertAlmostEqual(mean(s.samples[:, i]),
                                       ps[i],
                                       delta=0.05)
Пример #7
0
 def test_contructor_wrong_kernel_type(self):
     dimension = 3
     ps = rand(dimension)
     distribution = Bernoulli(ps)
     Z = zeros((2, distribution.dimension))
     threshold = 0.5
     spread = 0.5
     self.assertRaises(TypeError, DiscreteKameleon, distribution, None, Z,
                       threshold, spread)
Пример #8
0
 def test_contructor_wrong_threshold_type(self):
     dimension = 3
     ps = rand(dimension)
     distribution = Bernoulli(ps)
     kernel = HypercubeKernel(1.)
     Z = zeros((2, distribution.dimension))
     spread = 0.5
     self.assertRaises(TypeError, DiscreteKameleon, distribution, kernel, Z,
                       None, spread)
Пример #9
0
    def test_log_pdf_success_multiple(self):
        d = 4
        n = 3
        num_runs = 100

        for _ in range(num_runs):
            ps = rand(d)
            b = Bernoulli(ps)
            X = randint(0, 2, (n, d)).astype(numpy.bool8)

            # naive computation of log pdf
            expected = zeros((n, d))
            for i in range(n):
                for j in range(d):
                    expected[i,
                             j] = log(ps[j]) if X[i,
                                                  j] == 1 else log(1 - ps[j])

            self.assertTrue(all(sum(expected, 1) == b.log_pdf(X)))
Пример #10
0
 def test_contructor_wrong_Z_array_dimension_too_large(self):
     dimension = 3
     ps = rand(dimension)
     distribution = Bernoulli(ps)
     kernel = HypercubeKernel(1.)
     Z = zeros((2, distribution.dimension, 3))
     threshold = 0.5
     spread = 0.5
     self.assertRaises(ValueError, DiscreteKameleon, distribution, kernel,
                       Z, threshold, spread)
Пример #11
0
 def test_contructor(self):
     dimension = 3
     ps = rand(dimension)
     distribution = Bernoulli(ps)
     kernel = HypercubeKernel(1.)
     Z = zeros((2, distribution.dimension))
     threshold = 0.5
     spread = 0.5
     sampler = DiscreteKameleon(distribution, kernel, Z, threshold, spread)
     self.assertEqual(sampler.distribution, distribution)
     self.assertEqual(sampler.kernel, kernel)
     self.assertTrue(sampler.Z is Z)
     self.assertEqual(sampler.threshold, threshold)
     self.assertEqual(sampler.spread, spread)
 def test_chain_bernoulli(self):
     # runs the sampler on a distribution of infdependent bernoulli variables
     # and compares the mean
     d = 5
     ps = rand(d)
     ps /= norm(ps)
     distribution = Bernoulli(ps)
     
     num_history = 100
     Z = distribution.sample(num_history).samples
     threshold = 0.8
     spread = 0.2
     
     gamma = 0.2
     kernel = HypercubeKernel(gamma)
     
     mcmc_sampler = DiscreteKameleon(distribution, kernel, Z, threshold, spread)
     
     start = zeros(distribution.dimension, dtype=numpy.bool8)
     mcmc_params = MCMCParams(start=start, num_iterations=1000)
     chain = MCMCChain(mcmc_sampler, mcmc_params)
 
     chain.run()
     self.assertAlmostEqual(norm(mean(chain.samples, 0) - ps), 0, delta=0.2)
Пример #13
0
    def test_construct_proposal(self):
        dimension = 3
        num_history = 4
        ps = rand(dimension)
        distribution = Bernoulli(ps)
        kernel = HypercubeKernel(1.)
        Z = randint(0, 2, (num_history, dimension)).astype(numpy.bool8)
        threshold = 0.5
        spread = 0.5
        sampler = DiscreteKameleon(distribution, kernel, Z, threshold, spread)

        y = randint(0, 2, dimension).astype(dtype=numpy.bool8)
        p = sampler.construct_proposal(y)

        self.assertTrue(isinstance(p, DiscreteRandomWalkProposal))
        self.assertEqual(p.spread, spread)
Пример #14
0
def main():
    d = 5
    ps = rand(d)
    ps /= norm(ps)
    print "ps", ps
    full_target = Bernoulli(ps)
    current_state = [0. for _ in range(d)]
    distribution = BernoulliFullConditionals(full_target, current_state)

    mcmc_sampler = Gibbs(distribution)

    mcmc_params = MCMCParams(start=asarray(current_state, dtype=numpy.bool8),
                             num_iterations=10000)
    chain = MCMCChain(mcmc_sampler, mcmc_params)

    chain.append_mcmc_output(StatisticsOutput(plot_times=True, lag=1000))
    chain.append_mcmc_output(DiscretePlottingOutput(plot_from=0, lag=1000))
    chain.run()

    print "marginals:", ps
    print "estimated:", mean(chain.samples, 0)
Пример #15
0
    def test_adapt_does_nothing(self):
        dimension = 3
        ps = rand(dimension)
        distribution = Bernoulli(ps)
        kernel = HypercubeKernel(1.)
        Z = zeros((2, distribution.dimension))
        threshold = 0.5
        spread = .5
        sampler = DiscreteKameleon(distribution, kernel, Z, threshold, spread)

        # serialise, call adapt, load, compare
        f = NamedTemporaryFile()
        dump(sampler, f)
        f.seek(0)
        sampler_copy = load(f)
        f.close()

        sampler.adapt(None, None)

        # rough check for equality, dont do a proper one here
        self.assertEqual(type(sampler_copy.kernel), type(sampler.kernel))
        self.assertEqual(sampler_copy.kernel.gamma, sampler.kernel.gamma)

        self.assertEqual(type(sampler_copy.distribution),
                         type(sampler.distribution))
        self.assertEqual(sampler_copy.distribution.dimension,
                         sampler.distribution.dimension)

        self.assertEqual(type(sampler_copy.Z), type(sampler.Z))
        self.assertEqual(sampler_copy.Z.shape, sampler.Z.shape)
        self.assertAlmostEqual(norm(sampler_copy.Z - sampler.Z), 0)

        self.assertEqual(sampler_copy.spread, sampler.spread)

        # this is none, so just compare
        self.assertEqual(sampler.Q, sampler_copy.Q)
Пример #16
0
 def test_sample_wrong_n_type_float(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(TypeError, b.sample, float(1.))
Пример #17
0
 def test_log_pdf_wrong_type_none(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(TypeError, b.log_pdf, None)
Пример #18
0
 def test_log_pdf_wrong_type_float(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(TypeError, b.log_pdf, float(1.))
Пример #19
0
 def test_log_pdf_wrong_array_dimension_3(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(TypeError, b.log_pdf, zeros(3))
Пример #20
0
 def test_log_pdf_wrong_dimension(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(ValueError, b.log_pdf, zeros((1, 2)))
Пример #21
0
 def test_log_pdf_type(self):
     p = asarray([0.3])
     b = Bernoulli(p)
     self.assertEqual(type(b.log_pdf(asarray([[1]], dtype=numpy.bool8))),
                      numpy.ndarray)
Пример #22
0
 def test_contructor_correct_dim(self):
     ps = rand(4)
     b = Bernoulli(ps)
     self.assertEqual(ps.shape, b.ps.shape)
Пример #23
0
 def test_log_pdf_failure_single(self):
     d = 1
     ps = asarray(rand(d))
     b = Bernoulli(ps)
     X = asarray([[0]], dtype=numpy.bool8)
     self.assertEqual(b.log_pdf(X), log(1 - ps[0]))
Пример #24
0
 def test_contructor_correct_values(self):
     ps = rand(4)
     b = Bernoulli(ps)
     self.assertTrue(all(ps == b.ps))
Пример #25
0
 def test_sample_wrong_n_sameller_zero(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(ValueError, b.sample, -1)
Пример #26
0
 def test_sample_samples_dtype(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertEqual(b.sample(1).samples.dtype, numpy.bool8)
Пример #27
0
 def test_sample_type(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertTrue(isinstance(b.sample(1), Sample))
Пример #28
0
 def test_sample_wrong_n_type_none(self):
     p = asarray([0.5])
     b = Bernoulli(p)
     self.assertRaises(TypeError, b.sample, None)