Exemplo n.º 1
0
    def test_randomized_pca_inverse(self):
        # Test that randomized PCA is inversible on dense data
        rng = np.random.RandomState(0)
        n, p = 50, 3
        X = mt.tensor(rng.randn(n, p))  # spherical data
        X[:, 1] *= .00001  # make middle component relatively small
        X += [5, 4, 3]  # make a large mean

        # same check that we can find the original data from the transformed signal
        # (since the data is almost of rank n_components)
        pca = PCA(n_components=2, svd_solver='randomized',
                  random_state=0).fit(X)
        Y = pca.transform(X)
        Y_inverse = pca.inverse_transform(Y)
        assert_almost_equal(X.to_numpy(), Y_inverse.to_numpy(), decimal=2)

        # same as above with whitening (approximate reconstruction)
        pca = PCA(n_components=2,
                  whiten=True,
                  svd_solver='randomized',
                  random_state=0).fit(X)
        Y = pca.transform(X)
        Y_inverse = pca.inverse_transform(Y)
        relative_max_delta = (mt.abs(X - Y_inverse) / mt.abs(X).mean()).max()
        self.assertLess(relative_max_delta.to_numpy(), 1e-5)
Exemplo n.º 2
0
    def testMultiOutputsOp(self):
        sess = new_session()

        rs = np.random.RandomState(0)
        raw = rs.rand(20, 5)
        a = mt.tensor(raw, chunk_size=5)
        q = mt.abs(mt.linalg.qr(a)[0])

        ret = sess.run(q)
        np.testing.assert_almost_equal(ret, np.abs(np.linalg.qr(raw)[0]))
        self.assertEqual(len(sess._sess.executor.chunk_result),
                         len(get_tiled(q).chunks))
Exemplo n.º 3
0
    def test_randomized_pca_check_projection(self):
        # Test that the projection by randomized PCA on dense data is correct
        rng = np.random.RandomState(0)
        n, p = 100, 3
        X = mt.tensor(rng.randn(n, p) * .1)
        X[:10] += mt.array([3, 4, 5])
        Xt = 0.1 * mt.tensor(rng.randn(1, p)) + mt.array([3, 4, 5])

        Yt = PCA(n_components=2, svd_solver='randomized',
                 random_state=0).fit(X).transform(Xt)
        Yt /= np.sqrt((Yt**2).sum())

        assert_almost_equal(mt.abs(Yt[0][0]).to_numpy(), 1., 1)
Exemplo n.º 4
0
def test_pca_check_projection(setup):
    # Test that the projection of data is correct
    rng = np.random.RandomState(0)
    n, p = 100, 3
    X = mt.tensor(rng.randn(n, p) * .1)
    X[:10] += mt.array([3, 4, 5])
    Xt = 0.1 * mt.tensor(rng.randn(1, p)) + mt.array([3, 4, 5])

    for solver in solver_list:
        Yt = PCA(n_components=2, svd_solver=solver).fit(X).transform(Xt)
        Yt /= mt.sqrt((Yt ** 2).sum())

        assert_almost_equal(mt.abs(Yt[0][0]).to_numpy(), 1., 1)