def test_baum_welch(self): states = ["CP", "IP"] alphabet = ["cola", "ice_t", "lem"] outputs = [ (2, 1, 0) ] p_initial = [1.0, 0.0000001] p_transition = [[0.7, 0.3], [0.5, 0.5]] p_emission = [[0.6, 0.1, 0.3], [0.1, 0.7, 0.2]] N, M = len(states), len(alphabet) x = MarkovModel._baum_welch(N, M, outputs, p_initial=p_initial, p_transition=p_transition, p_emission=p_emission ) p_initial, p_transition, p_emission = x markov_model = MarkovModel.MarkovModel(states, alphabet, p_initial, p_transition, p_emission) self.assertEqual(markov_model.states, ["CP", "IP"]) self.assertEqual(markov_model.alphabet, ["cola", "ice_t", "lem"]) self.assertEqual(len(markov_model.p_initial), 2) self.assertAlmostEqual(markov_model.p_initial[0], 1.0, places=4) self.assertAlmostEqual(markov_model.p_initial[1], 0.0, places=4) self.assertEqual(len(markov_model.p_transition), 2) self.assertEqual(len(markov_model.p_transition[0]), 2) self.assertEqual(len(markov_model.p_transition[1]), 2) self.assertAlmostEqual(markov_model.p_transition[0][0], 0.02460365, places=4) self.assertAlmostEqual(markov_model.p_transition[0][1], 0.97539634, places=4) self.assertAlmostEqual(markov_model.p_transition[1][0], 1.0, places=4) self.assertAlmostEqual(markov_model.p_transition[1][1], 0.0, places=4) self.assertEqual(len(markov_model.p_emission), 2) self.assertEqual(len(markov_model.p_emission[0]), 3) self.assertEqual(len(markov_model.p_emission[1]), 3) self.assertAlmostEqual(markov_model.p_emission[0][0], 0.5) self.assertAlmostEqual(markov_model.p_emission[0][1], 0.0) self.assertAlmostEqual(markov_model.p_emission[0][2], 0.5) self.assertAlmostEqual(markov_model.p_emission[1][0], 0.0) self.assertAlmostEqual(markov_model.p_emission[1][1], 1.0) self.assertAlmostEqual(markov_model.p_emission[1][2], 0.0)
def test_baum_welch(self): states = ["CP", "IP"] alphabet = ["cola", "ice_t", "lem"] outputs = [ (2, 1, 0) ] p_initial = [1.0, 0.0000001] p_transition = [[0.7, 0.3], [0.5, 0.5]] p_emission = [[0.6, 0.1, 0.3], [0.1, 0.7, 0.2]] N, M = len(states), len(alphabet) x = MarkovModel._baum_welch(N, M, outputs, p_initial=p_initial, p_transition=p_transition, p_emission=p_emission ) p_initial, p_transition, p_emission = x markov_model = MarkovModel.MarkovModel(states, alphabet, p_initial, p_transition, p_emission) self.assertEqual(markov_model.states, ['CP', 'IP']) self.assertEqual(markov_model.alphabet, ['cola', 'ice_t', 'lem']) self.assertEqual(len(markov_model.p_initial), 2) self.assertAlmostEqual(markov_model.p_initial[0], 1.0, places=4) self.assertAlmostEqual(markov_model.p_initial[1], 0.0, places=4) self.assertEqual(len(markov_model.p_transition), 2) self.assertEqual(len(markov_model.p_transition[0]), 2) self.assertEqual(len(markov_model.p_transition[1]), 2) self.assertAlmostEqual(markov_model.p_transition[0][0], 0.02460365, places=4) self.assertAlmostEqual(markov_model.p_transition[0][1], 0.97539634, places=4) self.assertAlmostEqual(markov_model.p_transition[1][0], 1.0, places=4) self.assertAlmostEqual(markov_model.p_transition[1][1], 0.0, places=4) self.assertEqual(len(markov_model.p_emission), 2) self.assertEqual(len(markov_model.p_emission[0]), 3) self.assertEqual(len(markov_model.p_emission[1]), 3) self.assertAlmostEqual(markov_model.p_emission[0][0], 0.5) self.assertAlmostEqual(markov_model.p_emission[0][1], 0.0) self.assertAlmostEqual(markov_model.p_emission[0][2], 0.5) self.assertAlmostEqual(markov_model.p_emission[1][0], 0.0) self.assertAlmostEqual(markov_model.p_emission[1][1], 1.0) self.assertAlmostEqual(markov_model.p_emission[1][2], 0.0)
print "TESTING baum welch" states = ["CP", "IP"] alphabet = ["cola", "ice_t", "lem"] outputs = [ (2, 1, 0) ] print "Training HMM" p_initial = [1.0, 0.0000001] p_transition = [[0.7, 0.3], [0.5, 0.5]] p_emission = [[0.6, 0.1, 0.3], [0.1, 0.7, 0.2]] N, M = len(states), len(alphabet) x = MarkovModel._baum_welch(N, M, outputs, p_initial=p_initial, p_transition=p_transition, p_emission=p_emission ) p_initial, p_transition, p_emission = x mm = MarkovModel.MarkovModel(states, alphabet, p_initial, p_transition, p_emission) print_mm(mm) # Test Baum-Welch. This is hard because it is a non-deterministic # algorithm. Each run will result in different states having to # different emissions. In order to help this, we need to specify some # initial probabilities to bias the final results. This is not # implemented yet in the MarkovModel module. ## states = [