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) ]
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])
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)
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]))