65 lines
2.0 KiB
Python
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)
|
|
|
|
|