From c2dfa66542472d91d2ad1d8dd42c1d73ebd9ac1b Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Fri, 1 Jul 2016 16:33:27 -0700 Subject: [PATCH 1/3] Fix InvGamma2D like1 --- dpmm/dpmm.py | 6 +++--- dpmm/prior.py | 5 ++++- dpmm/shear.py | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dpmm/dpmm.py b/dpmm/dpmm.py index fe9b20f..ec2221a 100644 --- a/dpmm/dpmm.py +++ b/dpmm/dpmm.py @@ -120,13 +120,13 @@ def update_latent_data(self): # Pseudo-marginal samples or (TBD) means and Gaussian errors. if isinstance(self._D, PseudoMarginalData): for i, ph in enumerate(self.phi): - index = np.nonzero(self.label == i) + index = np.nonzero(self.label == i)[0] data = self._D[index] # a PseudoMarginalData instance # calculate weights for selecting a representative sample - ps = self.prior.like1(self.manip(data.data), *ph)[..., 0] / data.interim_prior + ps = self.prior.like1(self.manip(data.data), *ph) / data.interim_prior ps /= np.sum(ps, axis=1)[:, np.newaxis] for j, p in enumerate(ps): - self.D[index[0][j]] = data.data[j, pick_discrete(p)] + self.D[index[j]] = data.data[j, pick_discrete(p)] # Need to update the r_i probabilities too since self.D changed. self.r_i = self.alpha * self.prior.pred(self.mD) self.manip_needs_update = True diff --git a/dpmm/prior.py b/dpmm/prior.py index f4b6c12..ae880b8 100644 --- a/dpmm/prior.py +++ b/dpmm/prior.py @@ -464,7 +464,10 @@ def sample(self, size=1): def like1(self, x, var): """Returns likelihood Pr(x | var), for a single data point.""" - return np.exp(-0.5*np.sum((x-self.mu)**2, axis=0)/var) / (2*np.pi*var) + old_settings = np.geterr() + np.seterr(overflow='ignore') + return np.exp(-0.5*np.sum((x-self.mu)**2, axis=-1)/var) / (2*np.pi*var) + np.seterr(**old_settings) def like1N(self, x, _vars): """Return likelihoods Pr(x | var) for a single data point, but multiple vars.""" diff --git a/dpmm/shear.py b/dpmm/shear.py index ccf9b7f..91308bc 100644 --- a/dpmm/shear.py +++ b/dpmm/shear.py @@ -126,6 +126,8 @@ def __init__(self, g): # g should be a length-2 array representing the real and imag parts of the complex # representation of the reduced shear. self.g = g + self.Nproposals = 0 + self.Nacceptances = 0 def init(self, D): """A quick and dirty estimate of g is just the average over D.""" @@ -162,7 +164,10 @@ def update(self, D, phi, label, prior): prop_lnlike += prior.lnlikelihood(prop_e_int[index], *ph) if prop_lnlike > current_lnlike: self.g = prop_g + self.Nacceptances += 1 else: u = np.random.uniform() if u < np.exp(prop_lnlike - current_lnlike): self.g = prop_g + self.Nacceptances += 1 + self.Nproposals += 1 From a6b21a462e95a903e75d610bb00ed7dd88ca5a70 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Fri, 1 Jul 2016 17:38:25 -0700 Subject: [PATCH 2/3] Ignore overflow warning in Gaussian exp --- dpmm/prior.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpmm/prior.py b/dpmm/prior.py index ae880b8..a4053cb 100644 --- a/dpmm/prior.py +++ b/dpmm/prior.py @@ -465,7 +465,7 @@ def sample(self, size=1): def like1(self, x, var): """Returns likelihood Pr(x | var), for a single data point.""" old_settings = np.geterr() - np.seterr(overflow='ignore') + np.seterr(over='ignore') return np.exp(-0.5*np.sum((x-self.mu)**2, axis=-1)/var) / (2*np.pi*var) np.seterr(**old_settings) From 44a7c85ba93687ceaafe5fad0ca2cdc7477cc945 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Fri, 1 Jul 2016 17:38:47 -0700 Subject: [PATCH 3/3] Increase shear proposal distribution. --- dpmm/shear.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpmm/shear.py b/dpmm/shear.py index 91308bc..a264316 100644 --- a/dpmm/shear.py +++ b/dpmm/shear.py @@ -152,7 +152,7 @@ def update(self, D, phi, label, prior): # Whoops! The weak shear limit proposal doesn't lead to *any* acceptances when ngal is # large. Need to try something more clever. # prop_g = draw_g_2d_weak_shear(D, phi, label) - prop_g = np.random.multivariate_normal(mean=self.g, cov=np.eye(2)*0.0005**2) + prop_g = np.random.multivariate_normal(mean=self.g, cov=np.eye(2)*0.003**2) current_e_int = unshear(D, self.g) prop_e_int = unshear(D, prop_g)