def testPCA(self): X = self.iris for n_comp in np.arange(X.shape[1]): pca = PCA(n_components=n_comp, svd_solver='full') X_r = pca.fit(X).transform(X).fetch() np.testing.assert_equal(X_r.shape[1], n_comp) X_r2 = pca.fit_transform(X).fetch() assert_array_almost_equal(X_r, X_r2) X_r = pca.transform(X).fetch() X_r2 = pca.fit_transform(X).fetch() assert_array_almost_equal(X_r, X_r2) # Test get_covariance and get_precision cov = pca.get_covariance() precision = pca.get_precision() assert_array_almost_equal( mt.dot(cov, precision).execute(), np.eye(X.shape[1]), 12) # test explained_variance_ratio_ == 1 with all components pca = PCA(svd_solver='full') pca.fit(X) np.testing.assert_allclose( pca.explained_variance_ratio_.sum().execute(), 1.0, 3)
def testPCARandomizedSolver(self): # PCA on dense arrays X = self.iris # Loop excluding the 0, invalid for randomized for n_comp in np.arange(1, X.shape[1]): pca = PCA(n_components=n_comp, svd_solver='randomized', random_state=0) X_r = pca.fit(X).transform(X) np.testing.assert_equal(X_r.shape[1], n_comp) X_r2 = pca.fit_transform(X) assert_array_almost_equal(X_r.fetch(), X_r2.fetch()) X_r = pca.transform(X) assert_array_almost_equal(X_r.fetch(), X_r2.fetch()) # Test get_covariance and get_precision cov = pca.get_covariance() precision = pca.get_precision() assert_array_almost_equal( mt.dot(cov, precision).execute(), mt.eye(X.shape[1]).execute(), 12) pca = PCA(n_components=0, svd_solver='randomized', random_state=0) with self.assertRaises(ValueError): pca.fit(X) pca = PCA(n_components=0, svd_solver='randomized', random_state=0) with self.assertRaises(ValueError): pca.fit(X) # Check internal state self.assertEqual( pca.n_components, PCA(n_components=0, svd_solver='randomized', random_state=0).n_components) self.assertEqual( pca.svd_solver, PCA(n_components=0, svd_solver='randomized', random_state=0).svd_solver)