def test_simple_hmm(self): "https://people.csail.mit.edu/rameshvs/content/hmms.pdf" hidden_values = ['Area 1', 'Area 2', 'Area 3'] prior = {'Area 1': 1 / 3, 'Area 2': 1 / 3, 'Area 3': 1 / 3} transition_table = { 'Area 1': { 'Area 1': 0.25, 'Area 2': 0.75, 'Area 3': 0. }, 'Area 2': { 'Area 1': 0., 'Area 2': 0.25, 'Area 3': 0.75 }, 'Area 3': { 'Area 1': 0., 'Area 2': 0., 'Area 3': 1. }, } obs_values = ['hot', 'cold'] obs_table = { 'Area 1': { 'hot': 1.0, 'cold': 0.0 }, 'Area 2': { 'hot': 0.0, 'cold': 1.0 }, 'Area 3': { 'hot': 1.0, 'cold': 0.0 }, } hmm = HMM(hidden_values, prior, transition_table, obs_values, obs_table, n_steps=3) hmm.set_observed_values(['hot', 'cold', 'hot']) hmm.compute_alpha() result = hmm.filtered_posterior(index=2) for r, v in zip(result.values(), [0.0, 0.0, 1.0]): self.assertEqual(r, v) hmm.compute_beta() for r, v in zip( hmm.smoothed_posterior(index=2).values(), [0.0, 0.0, 1.0]): self.assertEqual(r, v)