Пример #1
0
    def test_exact_fhmm_train(self):
        path = os.path.join(TESTDATA_PATH, 'X.mat')
        self.assertTrue(os.path.exists(path))
        X = loadmat(path)['X']
        obs = [X]

        fhmm_exact = ExactGaussianFHMM(n_chains=2, n_states=3, n_training_iterations=20, training_threshold=0.01, topology='full')
        fhmm_exact.fit(obs)
        print 'exact:', fhmm_exact.loglikelihood(obs[0])

        fhmm_seq = SequentialGaussianFHMM(n_chains=2, n_states=3, n_training_iterations=20, training_threshold=0.01, topology='full')
        fhmm_seq.fit(obs)
        print 'seq:', fhmm_seq.loglikelihood(obs[0])
Пример #2
0
    def test_forward(self):
        chain0_means = np.array([[-5.99882413e+02, 9.99894546e+01],
                                 [-3.00048799e+02, 1.99167070e+02],
                                 [-4.28859220e-02, 2.99416348e+02]])
        chain0_covars = np.array([[0.93523132, 0.75423995],
                                  [0.58861593, 0.4016048],
                                  [0.25641893, 1.60482337]])
        chain0_logstart = np.array([-4.44089210e-16, -3.60436534e+01, -3.60436534e+01])
        chain0_logtransmat = np.array([[-38.34619345,  0.0, -38.34619345],
                                       [-38.34619345, -38.34619345, 0.0],
                                       [-1.09861229, -1.09861229, -1.09861229]])

        chain1_means = np.array([[-5.99882413e+02, 9.99894546e+01],
                                 [-3.00048799e+02, 1.99167070e+02],
                                 [-4.39995282e-02, 2.99415977e+02]])
        chain1_covars = np.array([[3.73792529, 3.01395982],
                                  [2.35146944, 1.60341962],
                                  [1.3566332, 6.45346843]])
        chain1_logstart = np.array([-4.44089210e-16, -3.60436534e+01, -3.60436534e+01])
        chain1_logtransmat = np.array([[-3.83461934e+01, -3.71345941e-06, -1.25035485e+01],
                                       [-3.83461897e+01, -2.35611266e+01, -5.85509419e-11],
                                       [-2.58426449e+01, -2.58426449e+01, -1.19594334e-11]])

        loglikelihood = -55.089351487070289
        obs = [np.array([[-600, 100], [-300, 200], [0, 300]]) for _ in xrange(1)]

        # Fit the FHMM on random noise b/c we need it to be fitted in order to manipulate the chains
        fhmm = SequentialGaussianFHMM(n_chains=2, n_states=3)
        fhmm.fit([np.random.random((3, 2))])

        # Update chain0
        fhmm.chains_[0]._means_ = chain0_means
        fhmm.chains_[0]._covars_ = chain0_covars
        fhmm.chains_[0]._log_startprob = chain0_logstart
        fhmm.chains_[0]._log_transmat = chain0_logtransmat

        # Update chain1
        fhmm.chains_[1]._means_ = chain1_means
        fhmm.chains_[1]._covars_ = chain1_covars
        fhmm.chains_[1]._log_startprob = chain1_logstart
        fhmm.chains_[1]._log_transmat = chain1_logtransmat

        self.assertEqual(loglikelihood, fhmm.loglikelihood(obs[0]))
Пример #3
0
 def setUp(self):
     n_states = 3
     self.hmms = [
         HMMLearnGaussianHMM(n_states=n_states),
         PomegranateGaussianHMM(n_states=n_states),
         SequentialGaussianFHMM(n_states=n_states, n_chains=2)
     ]
     r = np.random.randn
     self.obs = [
         np.array([[-600 + r(), 100 + r()], [-300 + r(), 200 + r()],
                   [0 + r(), 300 + r()]]) for _ in xrange(10)
     ]
Пример #4
0
def get_classifier(args):
    if args.model == 'hmmlearn':
        model = HMMLearnModel()
    elif args.model == 'fhmm-exact':
        model = ExactGaussianFHMM(n_chains=args.n_chains)
    elif args.model == 'fhmm-seq':
        model = SequentialGaussianFHMM(n_chains=args.n_chains)
    elif args.model == 'pomegranate':
        model = PomegranateModel()
    else:
        model = None
    assert model is not None
    model.n_training_iterations = args.n_iterations
    model.n_states = args.n_states
    model.topology = args.topology
    return HMMClassifier(model, n_jobs=args.n_jobs)
def get_classifier(args):
    if args.model == 'hmm':
        model = GaussianHMM()
    elif args.model == 'fhmm-exact':
        model = ExactGaussianFHMM(n_chains=args.n_chains)
    elif args.model == 'fhmm-seq':
        model = SequentialGaussianFHMM(n_chains=args.n_chains)
    else:
        model = None
    assert model is not None
    model.n_training_iterations = args.n_training_iter
    model.n_states = args.n_states
    model.topology = args.topology
    model.verbose = args.verbose
    model.transition_init = args.transition_init
    model.emission_init = args.emission_init
    model.covar_type = args.covar_type
    return HMMClassifier(model, n_jobs=args.n_jobs)