def test_conditional_loglikelihood(self): mcgsm = MCGSM(3, 1, 2, 1, 4) mcgsm.linear_features = randn(mcgsm.num_components, mcgsm.dim_in) / 5. mcgsm.means = randn(mcgsm.dim_out, mcgsm.num_components) / 5. M = 100 inputs = randn(mcgsm.dim_in, M) outputs = mcgsm.sample(inputs) loglik0 = mcgsm.loglikelihood(inputs, outputs) loglik1 = [] N = 1000 # estimate log-likelihood via sampling for _ in range(N): labels = mcgsm.sample_prior(inputs) loglik1.append(mcgsm.loglikelihood(inputs, outputs, labels)) loglik1 = vstack(loglik1) d = abs(logmeanexp(loglik1, 0) - loglik0).ravel() s = std(loglik1, 0, ddof=1).ravel() for i in range(M): self.assertLess(d[i], 6. * s[i] / sqrt(N))
def test_conditional_loglikelihood(self): mcgsm = MCGSM(3, 1, 2, 1, 4) mcgsm.linear_features = randn(mcgsm.num_components, mcgsm.dim_in) / 5.0 mcgsm.means = randn(mcgsm.dim_out, mcgsm.num_components) / 5.0 M = 100 inputs = randn(mcgsm.dim_in, M) outputs = mcgsm.sample(inputs) loglik0 = mcgsm.loglikelihood(inputs, outputs) loglik1 = [] N = 1000 # estimate log-likelihood via sampling for _ in range(N): labels = mcgsm.sample_prior(inputs) loglik1.append(mcgsm.loglikelihood(inputs, outputs, labels)) loglik1 = vstack(loglik1) d = abs(logmeanexp(loglik1, 0) - loglik0).ravel() s = std(loglik1, 0, ddof=1).ravel() for i in range(M): self.assertLess(d[i], 6.0 * s[i] / sqrt(N))
def test_sample_conditionally(self): mcgsm = MCGSM(3, 2, 2, 2, 4) # make sure there are differences between components mcgsm.weights = -log(rand(*mcgsm.weights.shape)) * 10. mcgsm.scales = square(mcgsm.scales * 3.) inputs = randn(mcgsm.dim_in, 100000) # sample directly outputs0 = mcgsm.sample(inputs) # sample indirectly labels = mcgsm.sample_prior(inputs) outputs1 = mcgsm.sample(inputs, labels) p = ks_2samp(outputs0.ravel(), outputs1.ravel())[1] self.assertGreater(p, 1e-5)
def test_sample_conditionally(self): mcgsm = MCGSM(3, 2, 2, 2, 4) # make sure there are differences between components mcgsm.weights = -log(rand(*mcgsm.weights.shape)) * 10.0 mcgsm.scales = square(mcgsm.scales * 3.0) inputs = randn(mcgsm.dim_in, 100000) # sample directly outputs0 = mcgsm.sample(inputs) # sample indirectly labels = mcgsm.sample_prior(inputs) outputs1 = mcgsm.sample(inputs, labels) p = ks_2samp(outputs0.ravel(), outputs1.ravel())[1] self.assertGreater(p, 1e-5)