Пример #1
0
    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))
Пример #2
0
    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))
Пример #3
0
    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)
Пример #4
0
    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)