def test_pca_increment_noncentred(): pca_samples = [np.random.randn(10) for _ in range(10)] ipca_model = PCAVectorModel(pca_samples[:3], centre=False) ipca_model.increment(pca_samples[3:6]) ipca_model.increment(pca_samples[6:]) bpca_model = PCAVectorModel(pca_samples, centre=False) assert_almost_equal(np.abs(ipca_model.components), np.abs(bpca_model.components)) assert_almost_equal(ipca_model.eigenvalues, bpca_model.eigenvalues) assert_almost_equal(ipca_model.mean(), bpca_model.mean())
def test_pca_vector_init_from_covariance(): n_samples = 30 n_features = 10 centre_values = [True, False] for centre in centre_values: # generate samples matrix and mean vector samples = np.random.randn(n_samples, n_features) mean = np.mean(samples, axis=0) # compute covariance matrix if centre: X = samples - mean C = np.dot(X.T, X) / (n_samples - 1) else: C = np.dot(samples.T, samples) / (n_samples - 1) # create the 2 pca models pca1 = PCAVectorModel.init_from_covariance_matrix(C, mean, centred=centre, n_samples=n_samples) pca2 = PCAVectorModel(samples, centre=centre, inplace=False) # compare them assert_array_almost_equal(pca1.mean(), pca2.mean()) assert_array_almost_equal(pca1.component(0, with_mean=False), pca2.component(0, with_mean=False)) assert_array_almost_equal(pca1.component(7), pca2.component(7)) assert_array_almost_equal(pca1.components, pca2.components) assert_array_almost_equal(pca1.eigenvalues, pca2.eigenvalues) assert_array_almost_equal(pca1.eigenvalues_cumulative_ratio(), pca2.eigenvalues_cumulative_ratio()) assert_array_almost_equal(pca1.eigenvalues_ratio(), pca2.eigenvalues_ratio()) weights = np.random.randn(pca1.n_active_components - 4) assert_array_almost_equal(pca1.instance(weights), pca2.instance(weights)) assert pca1.n_active_components == pca2.n_active_components assert pca1.n_components == pca2.n_components assert pca1.n_features == pca2.n_features assert pca1.n_samples == pca2.n_samples assert pca1.noise_variance() == pca2.noise_variance() assert pca1.noise_variance_ratio() == pca2.noise_variance_ratio() assert_allclose(pca1.variance(), pca2.variance()) assert pca1.variance_ratio() == pca2.variance_ratio() assert_array_almost_equal(pca1.whitened_components(), pca2.whitened_components())
def test_pca_vector_init_from_covariance(): n_samples = 30 n_features = 10 centre_values = [True, False] for centre in centre_values: # generate samples matrix and mean vector samples = np.random.randn(n_samples, n_features) mean = np.mean(samples, axis=0) # compute covariance matrix if centre: X = samples - mean C = np.dot(X.T, X) / (n_samples - 1) else: C = np.dot(samples.T, samples) / (n_samples - 1) # create the 2 pca models pca1 = PCAVectorModel.init_from_covariance_matrix(C, mean, centred=centre, n_samples=n_samples) pca2 = PCAVectorModel(samples, centre=centre, inplace=False) # compare them assert_array_almost_equal(pca1.mean(), pca2.mean()) assert_array_almost_equal(pca1.component(0, with_mean=False), pca2.component(0, with_mean=False)) assert_array_almost_equal(pca1.component(7), pca2.component(7)) assert_array_almost_equal(pca1.components, pca2.components) assert_array_almost_equal(pca1.eigenvalues, pca2.eigenvalues) assert_array_almost_equal(pca1.eigenvalues_cumulative_ratio(), pca2.eigenvalues_cumulative_ratio()) assert_array_almost_equal(pca1.eigenvalues_ratio(), pca2.eigenvalues_ratio()) weights = np.random.randn(pca1.n_active_components - 4) assert_array_almost_equal(pca1.instance(weights), pca2.instance(weights)) assert(pca1.n_active_components == pca2.n_active_components) assert(pca1.n_components == pca2.n_components) assert(pca1.n_features == pca2.n_features) assert(pca1.n_samples == pca2.n_samples) assert(pca1.noise_variance() == pca2.noise_variance()) assert(pca1.noise_variance_ratio() == pca2.noise_variance_ratio()) assert_allclose(pca1.variance(), pca2.variance()) assert(pca1.variance_ratio() == pca2.variance_ratio()) assert_array_almost_equal(pca1.whitened_components(), pca2.whitened_components())