Beispiel #1
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)
 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)
Beispiel #3
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 = [
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 = [