Files
labs/Module-5/hidden_markov/tests/small_test.py
T

65 lines
2.0 KiB
Python

# Note these are just sample tests
# Not very comprehensive tests
from unittest import TestCase
from hidden_markov import hmm
import numpy as np
states = ('s', 't')
#list of possible observations
possible_observation = ('A','B' )
# The observations that we observe and feed to the model
observations = ('A', 'B','B','A')
obs4 = ('B', 'A','B')
# Tuple of observations
observation_tuple = []
observation_tuple.extend( [observations,obs4] )
quantities_observations = [10, 20]
# Numpy arrays of the data
start_probability = np.matrix( '0.5 0.5')
transition_probability = np.matrix('0.6 0.4 ; 0.3 0.7 ')
emission_probability = np.matrix( '0.3 0.7 ; 0.4 0.6 ' )
class TestHmm(TestCase):
########## Training HMM ####################
def test_forward(self):
#Declare Class object
test = hmm(states,possible_observation,start_probability,transition_probability,emission_probability)
# Forward algorithm
forw_prob = (test.forward_algo(observations))
forw_prob = round(forw_prob, 5)
self.assertEqual(0.05153, forw_prob)
def test_viterbi(self):
#Declare Class object
test = hmm(states,possible_observation,start_probability,transition_probability,emission_probability)
# Viterbi algorithm
vit_out = (test.viterbi(observations))
self.assertEqual(['t','t','t','t'] , vit_out)
def test_log(self):
#Declare Class object
test = hmm(states,possible_observation,start_probability,transition_probability,emission_probability)
# Log prob function
prob = test.log_prob(observation_tuple, quantities_observations)
prob = round(prob, 3)
self.assertEqual(-67.920, prob)
def test_train_hmm(self):
#Declare Class object
test = hmm(states,possible_observation,start_probability,transition_probability,emission_probability)
# Baum welch Algorithm
num_iter=1000
e,t,s = test.train_hmm(observation_tuple,num_iter,quantities_observations)