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)
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)