def test_provided_means(self): data = np.random.random((300, 3)) mean = data.mean(axis=0) pca_spec_mean = pca(data, mean=mean) pca_calc_mean = pca(data) np.testing.assert_allclose(mean, pca_calc_mean.mean) np.testing.assert_allclose(mean, pca_spec_mean.mean) np.testing.assert_allclose(pca_spec_mean.cov, pca_calc_mean.cov)
def test_api_cs(self): p = pca(chunksize=1, dim=10) assert p.chunksize == 1 # in case, we do not have a fixed dimension, pca can not calculate a proper chunksize. p = pca(chunksize=None) assert p.chunksize == p._FALLBACK_CHUNKSIZE p = pca(chunksize=None, dim=10) assert p.chunksize != 0 assert p.chunksize != p._FALLBACK_CHUNKSIZE
def test_partial_fit(self): data = [np.random.random((100, 3)), np.random.random((100, 3))] pca_part = pca() pca_part.partial_fit(data[0]) pca_part.partial_fit(data[1]) ref = pca(data) np.testing.assert_allclose(pca_part.mean, ref.mean) np.testing.assert_allclose(pca_part.eigenvalues, ref.eigenvalues) np.testing.assert_allclose(pca_part.eigenvectors, ref.eigenvectors)
def test_dimension(self): assert types.is_int(self.pca_obj.dimension()) # Here: assert self.pca_obj.dimension() == 1 # Test other variants obj = pca(data=self.X, dim=-1, var_cutoff=1.0) assert obj.dimension() == 2 obj = pca(data=self.X, dim=-1, var_cutoff=0.8) assert obj.dimension() == 1 with self.assertRaises( ValueError ): # trying to set both dim and subspace_variance is forbidden pca(data=self.X, dim=1, var_cutoff=0.8)
def test_with_data_in_mem(self): import pyerna.coordinates as api data = [ np.random.random((100, 50)), np.random.random((103, 50)), np.random.random((33, 50)) ] reader = source(data) assert isinstance(reader, DataInMemory) tpca = api.pca(dim=2) n_centers = 10 km = api.cluster_kmeans(k=n_centers) disc = api.discretizer(reader, tpca, km) disc.parametrize() dtrajs = disc.dtrajs for dtraj in dtrajs: n_states = np.max((np.unique(dtraj))) self.assertGreaterEqual( n_centers - 1, n_states, "dtraj has more states than cluster centers")
def test_feature_correlation_MD(self): # Copying from the test_MD_data path = pkg_resources.resource_filename(__name__, 'data') + os.path.sep self.pdb_file = os.path.join(path, 'bpti_ca.pdb') self.xtc_file = os.path.join(path, 'bpti_mini.xtc') inp = source(self.xtc_file, top=self.pdb_file) pcamini = pca(inp) feature_traj = pcamini.data_producer.get_output()[0] nfeat = feature_traj.shape[1] pca_traj = pcamini.get_output()[0] npcs = pca_traj.shape[1] test_corr = pcamini.feature_PC_correlation true_corr = np.corrcoef(feature_traj.T, pca_traj.T)[:nfeat, -npcs:] np.testing.assert_allclose(test_corr, true_corr, atol=1.E-8)
def test_feature_correlation_data(self): # Create features with some correlation feature_traj = np.zeros((100, 3)) feature_traj[:, 0] = np.linspace(-.5, .5, len(feature_traj)) feature_traj[:, 1] = (feature_traj[:, 0] + np.random.randn(len(feature_traj)) * .5)**1 feature_traj[:, 2] = np.random.randn(len(feature_traj)) nfeat = feature_traj.shape[1] # PCA pca_obj = pca(data=feature_traj, dim=3) pca_traj = pca_obj.get_output()[0] npcs = pca_traj.shape[1] # Create correlations test_corr = pca_obj.feature_PC_correlation true_corr = np.corrcoef(feature_traj.T, pca_traj.T)[:nfeat, -npcs:] np.testing.assert_allclose(test_corr, true_corr, atol=1.E-8)
def setUpClass(cls): import msmtools.generation as msmgen # set random state, remember old one and set it back in tearDownClass cls.old_state = np.random.get_state() np.random.seed(0) # generate HMM with two Gaussians cls.P = np.array([[0.99, 0.01], [0.01, 0.99]]) cls.T = 10000 means = [np.array([-1, 1]), np.array([1, -1])] widths = [np.array([0.3, 2]), np.array([0.3, 2])] # continuous trajectory cls.X = np.zeros((cls.T, 2)) # hidden trajectory dtraj = msmgen.generate_traj(cls.P, cls.T) for t in range(cls.T): s = dtraj[t] cls.X[t, 0] = widths[s][0] * np.random.randn() + means[s][0] cls.X[t, 1] = widths[s][1] * np.random.randn() + means[s][1] cls.pca_obj = pca(data=cls.X, dim=1)
def test_variances(self): obj = pca(data=self.X) O = obj.get_output()[0] vars = np.var(O, axis=0) refs = obj.eigenvalues assert np.max(np.abs(vars - refs)) < 0.01