Exemplo n.º 1
0
def test_grouppca_inverse_index(
    n_individual_components,
    prewhiten,
    whiten,
    multiview_output,
    index,
    inverse_index,
):
    # Test that the projection of data can be inverted
    rng = np.random.RandomState(0)
    n, p = 50, 3
    X = rng.randn(n, p)  # spherical data
    X[:, 1] *= 0.00001  # make middle component relatively small
    X += [5, 4, 3]  # make a large mean

    X2 = np.copy(X)
    X2[:, 1] += rng.randn(n) * 0.00001
    X2 = X2.dot(rng.rand(p, p))

    X3 = np.copy(X)
    X3[:, 1] += rng.randn(n) * 0.00001
    X3 = X3.dot(rng.rand(p, p))

    Xs = [X, X2, X3]
    gpca = GroupPCA(
        n_components=2,
        prewhiten=prewhiten,
        whiten=whiten,
        n_individual_components=n_individual_components,
        multiview_output=multiview_output,
    ).fit(Xs)
    if index is not None:
        index_ = np.atleast_1d(index)
        Xs_transform = [Xs[i] for i in index_]
        len_index = len(index_)
    else:
        len_index = 3
        Xs_transform = np.copy(Xs)

    if inverse_index is not None:
        inverse_index_ = np.atleast_1d(inverse_index)
        Xs_inverse = [Xs[i] for i in inverse_index_]
        len_inverse_index = len(inverse_index_)
    else:
        len_inverse_index = 3
        Xs_inverse = np.copy(Xs)

    Y = gpca.transform(Xs_transform, index=index)
    if multiview_output and len_index != len_inverse_index:
        with pytest.raises(AssertionError):
            Y_inverse = gpca.inverse_transform(Y, index=inverse_index)
    elif multiview_output and index != inverse_index:
        pass
    else:
        Y_inverse = gpca.inverse_transform(Y, index=inverse_index)
        for X, X_estimated in zip(Xs_inverse, Y_inverse):
            assert_allclose(X, X_estimated, atol=1e-4)
Exemplo n.º 2
0
def test_grouppca_inverse(n_individual_components, prewhiten, whiten,
                          multiview_output):
    # Test that the projection of data can be inverted
    rng = np.random.RandomState(0)
    n, p = 50, 3
    X = rng.randn(n, p)  # spherical data
    X[:, 1] *= 0.00001  # make middle component relatively small
    X += [5, 4, 3]  # make a large mean

    X2 = np.copy(X)
    X2[:, 1] += rng.randn(n) * 0.00001

    Xs = [X, X2]

    gpca = GroupPCA(
        n_components=2,
        prewhiten=prewhiten,
        whiten=whiten,
        n_individual_components=n_individual_components,
        multiview_output=multiview_output,
    ).fit(Xs)
    Y = gpca.transform(Xs)
    Y_inverse = gpca.inverse_transform(Y)
    assert len(Y_inverse) == len(Xs)
    for X, X_estimated in zip(Xs, Y_inverse):
        assert_allclose(X, X_estimated, atol=1e-4)