Ejemplo n.º 1
0
    def test_mcmc_sampler_zonotope(self):
        """ Test whether 'zonotope' MCMC sampling mode generates samples with the right 1 and 2 points inclusion probabilities when DPP defined by orthogonal projection correlation kernel K = A.T (A A.T)^-1 A
        """
        A = rndm.randn(self.rank, self.N)

        dpp = FiniteDPP(kernel_type='correlation',
                        projection=True,
                        **{'A_zono': A})

        dpp.sample_mcmc(mode='zonotope', **{'nb_iter': 1000})

        self.assertTrue(self.singleton_adequation(dpp, dpp.list_of_samples[0]))
        self.assertTrue(self.doubleton_adequation(dpp, dpp.list_of_samples[0]))
Ejemplo n.º 2
0
    def test_mcmc_sampler_basis_exchange(self):
        """ Test whether 'E' (basis_exchange) MCMC sampling mode generates samples with the right 1 and 2 points inclusion probabilities when DPP defined by orthogonal projection correlation kernel K from its eigendecomposition
        """

        eig_vals = np.ones(self.rank)
        eig_vecs, _ = qr(rndm.randn(self.N, self.rank), mode='economic')

        dpp = FiniteDPP(kernel_type='correlation',
                        projection=True,
                        **{'K_eig_dec': (eig_vals, eig_vecs)})

        dpp.sample_mcmc(mode='E', **{'size': self.rank, 'nb_iter': 1000})

        self.assertTrue(self.singleton_adequation(dpp, dpp.list_of_samples[0]))
        self.assertTrue(self.doubleton_adequation(dpp, dpp.list_of_samples[0]))
    def test_correlation_kernel_projection_A_zono(self):
        A = rndm.randn(self.rank, self.N)

        dpp = FiniteDPP(kernel_type='correlation',
                        projection=True,
                        **{'A_zono': A})

        for mode in ('GS', 'GS_bis', 'KuTa12'):

            dpp.flush_samples()
            for _ in range(self.nb_samples):
                dpp.sample_exact(mode)

            self.check_right_cardinality(dpp, dpp.list_of_samples)

        for mode in ('zonotope', 'E'):

            dpp.flush_samples()
            dpp.sample_mcmc(mode,
                            **{'size': self.rank, 'nb_iter': self.nb_samples})

            self.check_right_cardinality(dpp, dpp.list_of_samples[0])
    def test_likelihood_kernel_L_gram_factor(self):

        phi = rndm.randn(self.rank, self.N)

        dpp = FiniteDPP(kernel_type='likelihood',
                        projection=False,
                        **{'L_gram_factor': phi})

        for mode in ('GS', 'GS_bis', 'KuTa12'):

            dpp.flush_samples()
            for _ in range(self.nb_samples):
                dpp.sample_exact(mode)

            self.check_right_cardinality(dpp, dpp.list_of_samples)

        for mode in ('AED', 'AD'):

            dpp.flush_samples()
            dpp.sample_mcmc(mode,
                            **{'nb_iter': self.nb_samples})

            self.check_right_cardinality(dpp, dpp.list_of_samples[0])
    def test_correlation_kernel_projection_kernel_eig(self):

        eig_vals = np.ones(self.rank)
        eig_vecs, _ = qr(rndm.randn(self.N, self.rank), mode='economic')

        dpp = FiniteDPP(kernel_type='correlation',
                        projection=True,
                        **{'K_eig_dec': (eig_vals, eig_vecs)})

        for mode in ('GS', 'GS_bis', 'KuTa12'):

            dpp.flush_samples()
            for _ in range(self.nb_samples):
                dpp.sample_exact(mode)

            self.check_right_cardinality(dpp, dpp.list_of_samples)

        for mode in ('E'):

            dpp.flush_samples()
            dpp.sample_mcmc(mode,
                            **{'size': self.rank, 'nb_iter': self.nb_samples})

            self.check_right_cardinality(dpp, dpp.list_of_samples[0])
    def test_likelihood_kernel(self):

        eig_vals = 1 + rndm.geometric(p=0.5, size=self.rank)
        eig_vecs, _ = qr(rndm.randn(self.N, self.rank), mode='economic')

        dpp = FiniteDPP(kernel_type='likelihood',
                        projection=False,
                        **{'L': (eig_vecs * eig_vals).dot(eig_vecs.T)})

        for mode in ('GS', 'GS_bis', 'KuTa12'):

            dpp.flush_samples()
            for _ in range(self.nb_samples):
                dpp.sample_exact(mode)

            self.check_right_cardinality(dpp, dpp.list_of_samples)

        for mode in ('AED', 'AD'):

            dpp.flush_samples()
            dpp.sample_mcmc(mode,
                            **{'nb_iter': self.nb_samples})

            self.check_right_cardinality(dpp, dpp.list_of_samples[0])
Ejemplo n.º 7
0
                                             verbose=False)
    result.append({'n': n, 'alg': 'vfx', 'time': t_vfx.secs, 'k': len(S_vfx)})

    with Timer(verbose=False) as t_vfx_resample:
        S_vfx_resample = vfx_dpp_sampler.sample_exact('vfx',
                                                      rls_oversample_bless=5,
                                                      rls_oversample_dppvfx=10,
                                                      random_state=r,
                                                      desired_expected_size=desired_k,
                                                      verbose=False)
    result.append({'n': n, 'alg': 'vfx_resample', 'time': t_vfx_resample.secs,'k': len(S_vfx_resample)})

    with Timer(verbose=False) as t_mc:
        exact_mcmc_sample = FiniteDPP(kernel_type='likelihood', L=dot_func(X_train) * vfx_dpp_sampler.intermediate_sample_info.alpha_star)
        S_mcmc = exact_mcmc_sample.sample_mcmc(mode='AED',
                                               s_init=r.permutation(I_train.shape[0])[:len(S_vfx_resample)].tolist(),
                                               nb_iter=I_train.shape[0] * len(S_vfx_resample))
    result.append({'n': n, 'alg': 'mcmc', 'time': t_mc.secs, 'k': len(S_mcmc)})

    if X_train.shape[0] <= 16000:
        with Timer(verbose=False) as t_exact:
            L = dot_func(X_train) * vfx_dpp_sampler.intermediate_sample_info.alpha_star
            E,U = np.linalg.eigh(L)
            exact_dpp_sample = FiniteDPP(kernel_type='likelihood', L_eig_dec=(E, U))
            S_exact = exact_dpp_sample.sample_exact()
        result.append({'n': n, 'alg': 'exact', 'time': t_exact.secs, 'k': len(S_exact)})

        with Timer(verbose=False) as t_exact_resample:
            exact_dpp_sample = FiniteDPP(kernel_type='likelihood', L_eig_dec=(E, U))
            S_exact_resample = exact_dpp_sample.sample_exact()
        result.append({'n': n, 'alg': 'exact_resample', 'time': t_exact_resample.secs, 'k': len(S_exact_resample)})