Exemplo n.º 1
0
def test_non_blocked():
    """Test that samplers correctly create non-blocked compound steps.
    """

    start, model = simple_2model()

    with model:
        # Metropolis and Slice are non-blocked by default
        mh = Metropolis()
        assert isinstance(mh, CompoundStep)
        slicer = Slice()
        assert isinstance(slicer, CompoundStep)
        hmc = HamiltonianMC(blocked=False)
        assert isinstance(hmc, CompoundStep)
        nuts = NUTS(blocked=False)
        assert isinstance(nuts, CompoundStep)

        mh_blocked = Metropolis(blocked=True)
        assert isinstance(mh_blocked, Metropolis)
        slicer_blocked = Slice(blocked=True)
        assert isinstance(slicer_blocked, Slice)
        hmc_blocked = HamiltonianMC()
        assert isinstance(hmc_blocked, HamiltonianMC)
        nuts_blocked = NUTS()
        assert isinstance(nuts_blocked, NUTS)

        compound = CompoundStep([hmc_blocked, mh_blocked])
Exemplo n.º 2
0
def test_step_continuous():
    start, model, (mu, C) = mv_simple()

    with model:
        mh = Metropolis()
        slicer = Slice()
        hmc = HamiltonianMC(scaling=C, is_cov=True, blocked=False)
        nuts = NUTS(scaling=C, is_cov=True, blocked=False)

        mh_blocked = Metropolis(S=C,
                                proposal_dist=MultivariateNormalProposal,
                                blocked=True)
        slicer_blocked = Slice(blocked=True)
        hmc_blocked = HamiltonianMC(scaling=C, is_cov=True)
        nuts_blocked = NUTS(scaling=C, is_cov=True)

        compound = CompoundStep([hmc_blocked, mh_blocked])

    steps = [
        slicer, hmc, nuts, mh_blocked, hmc_blocked, slicer_blocked,
        nuts_blocked, compound
    ]

    unc = np.diag(C)**.5
    check = [('x', np.mean, mu, unc / 10.), ('x', np.std, unc, unc / 10.)]

    for st in steps:
        h = sample(8000, st, start, model=model, random_seed=1)
        for (var, stat, val, bound) in check:
            yield check_stat, repr(st), h, var, stat, val, bound
Exemplo n.º 3
0
 def test_proposal_choice(self):
     _, model, _ = mv_simple()
     with model:
         s = np.ones(model.ndim)
         sampler = Metropolis(S=s)
         assert isinstance(sampler.proposal_dist, NormalProposal)
         s = np.diag(s)
         sampler = Metropolis(S=s)
         assert isinstance(sampler.proposal_dist, MultivariateNormalProposal)
         s[0, 0] = -s[0, 0]
         with self.assertRaises(np.linalg.LinAlgError):
             sampler = Metropolis(S=s)
Exemplo n.º 4
0
 def test_step_continuous(self):
     start, model, (mu, C) = mv_simple()
     unc = np.diag(C)**.5
     check = (('x', np.mean, mu, unc / 10.), ('x', np.std, unc, unc / 10.))
     with model:
         steps = (
             Slice(),
             HamiltonianMC(scaling=C, is_cov=True, blocked=False),
             NUTS(scaling=C, is_cov=True, blocked=False),
             Metropolis(S=C,
                        proposal_dist=MultivariateNormalProposal,
                        blocked=True),
             Slice(blocked=True),
             HamiltonianMC(scaling=C, is_cov=True),
             NUTS(scaling=C, is_cov=True),
             CompoundStep([
                 HamiltonianMC(scaling=C, is_cov=True),
                 HamiltonianMC(scaling=C, is_cov=True, blocked=False)
             ]),
         )
     for step in steps:
         trace = sample(8000,
                        step=step,
                        start=start,
                        model=model,
                        random_seed=1)
         yield self.check_stat, check, trace, step.__class__.__name__
Exemplo n.º 5
0
 def test_step_continuous(self):
     start, model, (mu, C) = mv_simple()
     unc = np.diag(C)**0.5
     check = (("x", np.mean, mu, unc / 10.0), ("x", np.std, unc,
                                               unc / 10.0))
     with model:
         steps = (
             Slice(),
             HamiltonianMC(scaling=C, is_cov=True, blocked=False),
             NUTS(scaling=C, is_cov=True, blocked=False),
             Metropolis(S=C,
                        proposal_dist=MultivariateNormalProposal,
                        blocked=True),
             Slice(blocked=True),
             HamiltonianMC(scaling=C, is_cov=True),
             NUTS(scaling=C, is_cov=True),
             CompoundStep([
                 HamiltonianMC(scaling=C, is_cov=True),
                 HamiltonianMC(scaling=C, is_cov=True, blocked=False),
             ]),
         )
     for step in steps:
         trace = sample(
             0,
             tune=8000,
             chains=1,
             discard_tuned_samples=False,
             step=step,
             start=start,
             model=model,
             #random_seed=1,
             cores=1)
         self.check_stat(check, trace, step.__class__.__name__)
Exemplo n.º 6
0
 def test_step_discrete(self):
     start, model, (mu, C) = mv_simple_discrete()
     unc = np.diag(C) ** .5
     check = (('x', np.mean, mu, unc / 10.),
              ('x', np.std, unc, unc / 10.))
     with model:
         steps = (
             Metropolis(S=C, proposal_dist=MultivariateNormalProposal),
         )
     for step in steps:
         trace = sample(20000, step=step, start=start, model=model, random_seed=1)
         yield self.check_stat, check, trace, step.__class__.__name__
Exemplo n.º 7
0
 def test_step_discrete(self):
     if theano.config.floatX == "float32":
         return  # Cannot use @skip because it only skips one iteration of the yield
     start, model, (mu, C) = mv_simple_discrete()
     unc = np.diag(C) ** 0.5
     check = (("x", np.mean, mu, unc / 10.0), ("x", np.std, unc, unc / 10.0))
     with model:
         steps = (Metropolis(S=C, proposal_dist=MultivariateNormalProposal),)
     for step in steps:
         trace = sample(
             20000, tune=0, step=step, start=start, model=model, random_seed=1, chains=1
         )
         self.check_stat(check, trace, step.__class__.__name__)
Exemplo n.º 8
0
 def test_tuning_reset(self):
     """Re-use of the step method instance with cores=1 must not leak tuning information between chains."""
     with Model() as pmodel:
         D = 3
         Normal('n', 0, 2, shape=(D, ))
         trace = sample(tune=600,
                        draws=500,
                        step=Metropolis(tune=True, scaling=0.1),
                        cores=1,
                        chains=3,
                        discard_tuned_samples=False)
     for c in range(trace.nchains):
         # check that the tuned settings changed and were reset
         assert trace.get_sampler_stats('scaling', chains=c)[0] == 0.1
         assert trace.get_sampler_stats('scaling', chains=c)[-1] != 0.1
     pass
Exemplo n.º 9
0
def test_step_discrete():
    start, model, (mu, C) = mv_simple_discrete()

    with model:
        mh = Metropolis(S=C, proposal_dist=MultivariateNormalProposal)
        slicer = Slice()

    steps = [mh]

    unc = np.diag(C)**.5
    check = [('x', np.mean, mu, unc / 10.), ('x', np.std, unc, unc / 10.)]

    for st in steps:
        h = sample(20000, st, start, model=model, random_seed=1)

        for (var, stat, val, bound) in check:
            yield check_stat, repr(st), h, var, stat, val, bound