def test_transformed_domain_does_not_pickle_data(self): iris = self.iris pca = PCA(n_components=2)(iris) pca_iris = pca(iris) pca_iris2 = Table(pca_iris.domain, iris) pca_iris2 = pickle.loads(pickle.dumps(pca_iris)) self.assertIsNone(pca_iris2.domain[0].compute_value.transformed)
def __pca_test_helper(self, data, n_com, min_xpl_var): pca = PCA(n_components=n_com) pca_model = pca(data) pca_xpl_var = np.sum(pca_model.explained_variance_ratio_) self.assertGreaterEqual(pca_xpl_var + 1e-6, min_xpl_var) self.assertEqual(n_com, pca_model.n_components) self.assertEqual((n_com, data.X.shape[1]), pca_model.components_.shape) proj = np.dot(data.X - pca_model.mean_, pca_model.components_.T) np.testing.assert_almost_equal(pca_model(data).X, proj)
def test_compute_value(self): iris = self.iris pca = PCA(n_components=2)(iris) pca_iris = pca(iris) pca_iris2 = Table(pca_iris.domain, iris) np.testing.assert_almost_equal(pca_iris.X, pca_iris2.X) np.testing.assert_equal(pca_iris.Y, pca_iris2.Y) pca_iris3 = pickle.loads(pickle.dumps(pca_iris)) np.testing.assert_almost_equal(pca_iris.X, pca_iris3.X) np.testing.assert_equal(pca_iris.Y, pca_iris3.Y)
def __ipca_test_helper(self, data, n_com, min_xpl_var): pca = IncrementalPCA(n_components=n_com) pca_model = pca(data[::2]) pca_xpl_var = np.sum(pca_model.explained_variance_ratio_) self.assertGreaterEqual(pca_xpl_var + 1e-6, min_xpl_var) self.assertEqual(n_com, pca_model.n_components) self.assertEqual((n_com, data.X.shape[1]), pca_model.components_.shape) proj = np.dot(data.X - pca_model.mean_, pca_model.components_.T) np.testing.assert_almost_equal(pca_model(data).X, proj) pc1_ipca = pca_model.components_[0] self.assertAlmostEqual(np.linalg.norm(pc1_ipca), 1) pc1_pca = PCA(n_components=n_com)(data).components_[0] self.assertAlmostEqual(np.linalg.norm(pc1_pca), 1) self.assertNotAlmostEqual(abs(pc1_ipca.dot(pc1_pca)), 1, 2) pc1_ipca = pca_model.partial_fit(data[1::2]).components_[0] self.assertAlmostEqual(abs(pc1_ipca.dot(pc1_pca)), 1, 4)