Exemple #1
0
 def test_1D_data(self):
     x = np.random.randn(10, 1)
     vamp = pyemma_api_vamp([x], 1,
                            right=True)  # just test that this doesn't raise
     # Doing VAMP with 1-D data is just centering and normalizing the data.
     assert_allclose_ignore_phase(
         vamp.get_output()[0], (x - np.mean(x[1:, 0])) / np.std(x[1:, 0]))
Exemple #2
0
    def test_score_vs_MSM(self):
        from pyemma.util.contexts import numpy_random_seed
        with numpy_random_seed(32):
            trajs_test, trajs_train = cvsplit_trajs(self.trajs)
        with numpy_random_seed(32):
            dtrajs_test, dtrajs_train = cvsplit_trajs(self.dtrajs)

        methods = ('VAMP1', 'VAMP2', 'VAMPE')

        for m in methods:
            msm_train = estimate_markov_model(dtrajs=dtrajs_train,
                                              lag=self.lag,
                                              reversible=False)
            score_msm = msm_train.score(dtrajs_test,
                                        score_method=m,
                                        score_k=None)

            vamp_train = pyemma_api_vamp(data=trajs_train,
                                         lag=self.lag,
                                         dim=1.0)
            score_vamp = vamp_train.score(test_data=trajs_test, score_method=m)

            self.assertAlmostEqual(score_msm,
                                   score_vamp,
                                   places=2 if m == 'VAMPE' else 3,
                                   msg=m)
Exemple #3
0
 def setUpClass(cls):
     N_steps = 10000
     N_traj = 20
     lag = 1
     T = np.linalg.matrix_power(
         np.array([[0.7, 0.2, 0.1], [0.1, 0.8, 0.1], [0.1, 0.1, 0.8]]), lag)
     dtrajs = [generate(T, N_steps) for _ in range(N_traj)]
     p0 = np.zeros(3)
     p1 = np.zeros(3)
     trajs = []
     for dtraj in dtrajs:
         traj = np.zeros((N_steps, T.shape[0]))
         traj[np.arange(len(dtraj)), dtraj] = 1.0
         trajs.append(traj)
         p0 += traj[:-lag, :].sum(axis=0)
         p1 += traj[lag:, :].sum(axis=0)
     vamp = pyemma_api_vamp(trajs, lag=lag, scaling=None, dim=1.0)
     msm = estimate_markov_model(dtrajs, lag=lag, reversible=False)
     cls.trajs = trajs
     cls.dtrajs = dtrajs
     cls.lag = lag
     cls.msm = msm
     cls.vamp = vamp
     cls.p0 = p0 / p0.sum()
     cls.p1 = p1 / p1.sum()
     cls.atol = np.finfo(vamp.output_type()).eps * 1000.0
Exemple #4
0
 def test_kinetic_map(self):
     lag = 10
     self.vamp = pyemma_api_vamp(self.trajs,
                                 lag=lag,
                                 scaling='km',
                                 right=False)
     transformed = [t[:-lag] for t in self.vamp.get_output()]
     std = np.std(np.concatenate(transformed), axis=0)
     np.testing.assert_allclose(
         std,
         self.vamp.singular_values[:self.vamp.dimension()],
         atol=1e-4,
         rtol=1e-4)
Exemple #5
0
    def do_test(self, dim, rank, test_partial_fit=False):
        # setup
        N_frames = [123, 456, 789]
        N_trajs = len(N_frames)
        A = random_matrix(dim, rank)
        trajs = []
        mean = np.random.randn(dim)
        for i in range(N_trajs):
            # set up data
            white = np.random.randn(N_frames[i], dim)
            brown = np.cumsum(white, axis=0)
            correlated = np.dot(brown, A)
            trajs.append(correlated + mean)

        # test
        tau = 50
        vamp = pyemma_api_vamp(trajs, lag=tau, scaling=None)
        vamp.right = True
        _check_serialize(vamp)

        assert vamp.dimension() <= rank

        atol = np.finfo(vamp.output_type()).eps * 10.0
        rtol = np.finfo(vamp.output_type()).resolution
        phi_trajs = [sf[tau:, :] for sf in vamp.get_output()]
        phi = np.concatenate(phi_trajs)
        mean_right = phi.sum(axis=0) / phi.shape[0]
        cov_right = phi.T.dot(phi) / phi.shape[0]
        np.testing.assert_allclose(mean_right, 0.0, rtol=rtol, atol=atol)
        np.testing.assert_allclose(cov_right,
                                   np.eye(vamp.dimension()),
                                   rtol=rtol,
                                   atol=atol)

        vamp.right = False
        psi_trajs = [sf[0:-tau, :] for sf in vamp.get_output()]
        psi = np.concatenate(psi_trajs)
        mean_left = psi.sum(axis=0) / psi.shape[0]
        cov_left = psi.T.dot(psi) / psi.shape[0]
        np.testing.assert_allclose(mean_left, 0.0, rtol=rtol, atol=atol)
        np.testing.assert_allclose(cov_left,
                                   np.eye(vamp.dimension()),
                                   rtol=rtol,
                                   atol=atol)

        # compute correlation between left and right
        assert phi.shape[0] == psi.shape[0]
        C01_psi_phi = psi.T.dot(phi) / phi.shape[0]
        n = max(C01_psi_phi.shape)
        C01_psi_phi = C01_psi_phi[0:n, :][:, 0:n]
        np.testing.assert_allclose(
            C01_psi_phi,
            np.diag(vamp.singular_values[0:vamp.dimension()]),
            rtol=rtol,
            atol=atol)

        if test_partial_fit:
            vamp2 = pyemma_api_vamp(lag=tau, scaling=None)
            for t in trajs:
                vamp2.partial_fit(t)
                vamp2 = _check_serialize(vamp2)

            model_params = vamp._model.get_model_params()
            model_params2 = vamp2._model.get_model_params()

            atol = 1e-14
            rtol = 1e-5

            for n in model_params.keys():
                if model_params[n] is not None and model_params2[n] is not None:
                    if n not in ('U', 'V'):
                        np.testing.assert_allclose(
                            model_params[n],
                            model_params2[n],
                            rtol=rtol,
                            atol=atol,
                            err_msg='failed for model param %s' % n)
                    else:
                        assert_allclose_ignore_phase(model_params[n],
                                                     model_params2[n],
                                                     atol=atol)

            vamp2.singular_values  # trigger diagonalization

            vamp2.right = True
            for t, ref in zip(trajs, phi_trajs):
                assert_allclose_ignore_phase(vamp2.transform(t[tau:]),
                                             ref,
                                             rtol=rtol,
                                             atol=atol)

            vamp2.right = False
            for t, ref in zip(trajs, psi_trajs):
                assert_allclose_ignore_phase(vamp2.transform(t[0:-tau]),
                                             ref,
                                             rtol=rtol,
                                             atol=atol)
Exemple #6
0
 def test_const_data(self):
     from pyemma._ext.variational.util import ZeroRankError
     with self.assertRaises(ZeroRankError):
         pyemma_api_vamp([np.ones((10, 2))], 1)
     with self.assertRaises(ZeroRankError):
         pyemma_api_vamp([np.ones(10)], 1)
Exemple #7
0
 def test_default_cs(self):
     v = pyemma_api_vamp(chunksize=None)
     assert v.default_chunksize == v._FALLBACK_CHUNKSIZE