Пример #1
0
def test_pca_score2(setup):
    # Test that probabilistic PCA correctly separated different datasets
    n, p = 100, 3
    rng = np.random.RandomState(0)
    X = mt.tensor(rng.randn(n, p) * .1) + mt.array([3, 4, 5])
    for solver in solver_list:
        pca = PCA(n_components=2, svd_solver=solver)
        pca.fit(X)
        ll1 = pca.score(X)
        ll2 = pca.score(mt.tensor(rng.randn(n, p) * .2) + mt.array([3, 4, 5]))
        assert ll1.fetch() > ll2.fetch()

        # Test that it gives different scores if whiten=True
        pca = PCA(n_components=2, whiten=True, svd_solver=solver)
        pca.fit(X)
        ll2 = pca.score(X)
        assert ll1.fetch() > ll2.fetch()
Пример #2
0
 def test_pca_score(self):
     # Test that probabilistic PCA scoring yields a reasonable score
     n, p = 1000, 3
     rng = np.random.RandomState(0)
     X = mt.tensor(rng.randn(n, p) * .1) + mt.array([3, 4, 5])
     for solver in self.solver_list:
         pca = PCA(n_components=2, svd_solver=solver)
         pca.fit(X)
         ll1 = pca.score(X)
         h = -0.5 * mt.log(2 * mt.pi * mt.exp(1) * 0.1**2) * p
         np.testing.assert_almost_equal((ll1 / h).to_numpy(), 1, 0)
Пример #3
0
def test_pca_score3(setup):
    # Check that probabilistic PCA selects the right model
    n, p = 200, 3
    rng = np.random.RandomState(0)
    Xl = mt.tensor(rng.randn(n, p) + rng.randn(n, 1) * np.array([3, 4, 5]) +
                   np.array([1, 0, 7]))
    Xt = mt.tensor(rng.randn(n, p) + rng.randn(n, 1) * np.array([3, 4, 5]) +
                   np.array([1, 0, 7]))
    ll = mt.zeros(p)
    for k in range(p):
        pca = PCA(n_components=k, svd_solver='full')
        pca.fit(Xl)
        ll[k] = pca.score(Xt)

    assert ll.argmax().to_numpy() == 1