Skip to content

Commit

Permalink
SMC change initialization (#2755)
Browse files Browse the repository at this point in the history
* initialize smc using sample() insted of random numbers

* use metropolis

* init from random and modify scaling

* fix indentation

* update trace reference values

* revert tuning changes

* revert tuning changes

* update release notes
  • Loading branch information
aloctavodia committed Dec 18, 2017
1 parent 391f5fd commit da3ef19
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 8 deletions.
2 changes: 1 addition & 1 deletion RELEASE-NOTES.md
Expand Up @@ -26,7 +26,7 @@
- Add test for `model.logp_array` and `model.bijection` (#2724)
- Fixed `sample_ppc` and `sample_ppc_w` to iterate all chains(#2633, #2748)
- Add Bayesian R2 score (for GLMs) `stats.r2_score` (#2696) and test (#2729).
- SMC works with transformed variables (#2749)
- SMC works with transformed variables (#2755)


## PyMC3 3.2 (October 10, 2017)
Expand Down
5 changes: 3 additions & 2 deletions pymc3/step_methods/smc.py
Expand Up @@ -183,15 +183,16 @@ def __init__(self, vars=None, out_vars=None, n_chains=100, scaling=1., covarianc
# create initial population
self.population = []
self.array_population = np.zeros(n_chains)
start = model.test_point

init_rnd = {}
for v in vars:
if pm.util.is_transformed_name(v.name):
trans = v.distribution.transform_used.forward
rnd = trans(v.distribution.dist.random(size=self.n_chains))
rnd = trans(v.distribution.dist.random(size=self.n_chains, point=start))
init_rnd[v.name] = rnd.eval()
else:
init_rnd[v.name] = v.random(size=self.n_chains)
init_rnd[v.name] = v.random(size=self.n_chains, point=start)

for i in range(self.n_chains):
self.population.append(pm.Point({v.name: init_rnd[v.name][i] for v in vars},
Expand Down
6 changes: 1 addition & 5 deletions pymc3/tests/test_smc.py
Expand Up @@ -44,11 +44,7 @@ def two_gaussians(x):
return tt.log(w1 * tt.exp(log_like1) + w2 * tt.exp(log_like2))

with pm.Model() as self.ATMIP_test:
X = pm.Uniform('X',
shape=n,
lower=-2. * np.ones_like(mu1),
upper=2. * np.ones_like(mu1),
testval=-1. * np.ones_like(mu1))
X = pm.Uniform('X', lower=-2, upper=2., shape=n)
llk = pm.Potential('muh', two_gaussians(X))

self.step = smc.SMC(
Expand Down
1 change: 1 addition & 0 deletions pymc3/tests/test_step.py
Expand Up @@ -451,3 +451,4 @@ def test_linalg(self):

with pytest.raises(SamplingError):
sample(20, init=None, nuts_kwargs={'on_error': 'raise'})

0 comments on commit da3ef19

Please sign in to comment.