def test_instanciation_from_eig_vals_equal_01(self):

        rank, N = 6, 10

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

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

        dpp.compute_K()
        K = (eig_vecs * eig_vals).dot(eig_vecs.T)

        self.assertTrue(np.allclose(dpp.K, K))

        # If projection=True
        with self.assertRaises(ValueError) as context:
            dpp.compute_L()

        self.assertTrue('cannot be computed' in str(context.exception))

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

        with self.assertRaises(FloatingPointError) as context:
            dpp.compute_L()

        self.assertTrue('cannot be computed' in str(context.exception))
    def test_instanciation_from_A_zono(self):
        rank, N = 6, 10

        A = rndm.randn(rank, N)

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

        dpp.compute_K()
        K = A.T.dot(np.linalg.inv(A.dot(A.T))).dot(A)

        self.assertTrue(np.allclose(dpp.K, K))

        # raise warning when projection not set to True
        # https://docs.python.org/3/library/warnings.html
        with warnings.catch_warnings(record=True) as w:
            FiniteDPP(kernel_type='correlation',
                      projection=False,
                      **{'A_zono': rndm.randn(rank, N)})

        self.assertTrue('Weird setting' in str(w[-1].message))

        # Raise error when not full row rank
        with self.assertRaises(ValueError) as context:

            FiniteDPP(kernel_type='correlation',
                      projection=True,
                      **{'A_zono': rndm.randn(N, rank)})

        self.assertTrue('not full row rank' in str(context.exception))
    def test_instanciation_from_kernel(self):
        rank, N = 6, 10

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

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

        dpp.compute_K()
        K = (eig_vecs * (eig_vals / (1.0 + eig_vals))).dot(eig_vecs.T)

        self.assertTrue(np.allclose(dpp.K, K))
Пример #4
0
    def test_computation_of_correlation_kernel_from_valid_parameters(self):
        kernel_type = 'correlation'

        for idx, (proj, param) in enumerate(self.list_of_valid_params):
            with self.subTest(index=idx, projection=proj, param=param.keys()):

                dpp = FiniteDPP(kernel_type, projection=proj, **param)
                dpp.compute_K()

                if 'K' in param:
                    K = param['K']
                elif 'K_eig_dec' in param:
                    e_vals, e_vecs = param['K_eig_dec']
                    K = (e_vecs * e_vals).dot(e_vecs.T)
                elif 'A_zono' in param:
                    e_vals = np.ones(param['A_zono'].shape[0])
                    e_vecs, _ = la.qr(param['A_zono'].T, mode='economic')
                    K = (e_vecs * e_vals).dot(e_vecs.T)

                self.assertTrue(np.allclose(dpp.K, K))
Пример #5
0
    def test_computation_of_correlation_kernel_from_valid_parameters(self):
        kernel_type = 'likelihood'

        for idx, (proj, param) in enumerate(self.list_of_valid_params):
            with self.subTest(index=idx, projection=proj, param=param.keys()):

                dpp = FiniteDPP(kernel_type, projection=proj, **param)
                dpp.compute_K()

                if 'L' in param:
                    e_vals, e_vecs = la.eigh(param['L'])
                elif 'L_eig_dec' in param:
                    e_vals, e_vecs = param['L_eig_dec']
                elif 'L_gram_factor' in param:
                    L = param['L_gram_factor'].T.dot(param['L_gram_factor'])
                    e_vals, e_vecs = la.eigh(L)

                K = (e_vecs * (e_vals / (1.0 + e_vals))).dot(e_vecs.T)

                self.assertTrue(np.allclose(dpp.K, K))
    def test_instanciation_from_L_gram_factor_tall(self):
        rank, N = 6, 10

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

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

        dpp.compute_L()
        L = phi.T.dot(phi)

        self.assertTrue(np.allclose(dpp.L, L))

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

        dpp.compute_K()
        eig_vals, eig_vecs = eigh(L)
        K = (eig_vecs * (eig_vals / (1.0 + eig_vals))).dot(eig_vecs.T)

        self.assertTrue(np.allclose(dpp.K, K))
    def test_instanciation_from_eig_vals_in_01(self):
        rank, N = 6, 10

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

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

        dpp.compute_K()
        K = (eig_vecs * eig_vals).dot(eig_vecs.T)

        self.assertTrue(np.allclose(dpp.K, K))

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

        dpp.compute_L()
        L = (eig_vecs * (eig_vals / (1.0 - eig_vals))).dot(eig_vecs.T)

        self.assertTrue(np.allclose(dpp.L, L))