def run_hmm(labels, observations, axis_divs, angle_divs, smooth_iterations, smooth_radius, validation_runs): train_runs = 6000 - validation_runs pd = PointDiscretizer(axis_divs) ad = AngleDiscretizer(angle_divs) print("Loading HMM Data...", end='') start_time = time.time() start_probabilities, transition_probabilities, emission_probabilities = load_hmm_data( pd, ad, labels, observations, smooth_iterations, smooth_radius, train_runs) print("Done ({:.3f} secs)".format(time.time() - start_time)) model = Hmm(start_probabilities, transition_probabilities, emission_probabilities) # grade the model on the validation runs # grading scheme: mean squared error (lower is better) print("Grading Model...", end='') start_time = time.time() hidden_states = pd.states() errors = [] for validation_run in range(train_runs, 6000): run_labels = filter(lambda l: l[0] == validation_run, labels) observation_list = [ ad.discretize(angle) for angle in observations[validation_run] ] hidden_state_list = model.viterbi(observation_list, hidden_states) for label in run_labels: label_timestep = label[1] label_state = ( label[2], label[3], ) guessed_state = pd.un_discretize( hidden_state_list[label_timestep][0], hidden_state_list[label_timestep][1]) errors.append(euclidean(guessed_state + label_state)) # get Mean Squared Error MSE = statistics.mean(map(lambda x: x * x, errors)) print("Done! ({}s)".format(time.time() - start_time)) print( "MSE of {:.3f} from AxDivs: {} AngDivs: {} SmIts: {} SmR: {} ValSet: {}" .format(MSE, axis_divs, angle_divs, smooth_iterations, smooth_radius, validation_runs)) return MSE
from hmm import Hmm import time label_map_file = '../dataset/phones/48_39.map' chr_map_file = '../dataset/48_idx_chr.map_b' label_file = '../dataset/label/train.lab' post_file = '../dataset/posteriorgram/test6.post'#'../dataset/posteriorgram/train2.post' Hmm.loadgetprob(label_map_file, chr_map_file, label_file, post_file)#'test_y_.txt' setting = 0.57 for i in xrange(3): n, p, path = Hmm.viterbi(setting) #count,counttotal = Hmm.check(path) #print (str(count) +'/'+ str(counttotal)) Hmm.save_result(path, setting) setting += 0.05
model_file1 = "model1.json" hmm1 = Hmm(os.path.join(model_file1)) model_file2 = "model2.json" hmm2 = Hmm(os.path.join(model_file2)) print("Machine 1 generated samples:") hmm1.generator() print("\nFORWARD ALGORITHM:") for obs in observations: p1 = hmm1.forward(obs) p2 = hmm2.forward(obs) # print("Observations = ", obs, " Fwd Prob (Machine 1) = ", p1, ", Fwd Prob (Machine 2) = ", p2, ", Fwd Prob log (Machine 1) = ", (math.log(p1) if p1 != 0 else "NA"), ", Fwd Prob log (Machine 2) = ", (math.log(p2) if p2 != 0 else "NA"), ", Best sequence coming from - ", "Machine 1" if p1 > p2 else "Machine 2") # print("Viterbi (Machine 1): ""Observations = ", obs, "Prob = ", prob,"Log Probability = ", (math.log(p1) if prob!=0 else "NA"), " Hidden State Sequence = ", hidden_states) print("\nViterbi (Machine 2): ") for obs in observations: prob, hidden_states = hmm2.viterbi(obs) print("Observations = ", obs, "Prob = ", prob, ", Log Probability = ", (math.log(prob) if prob != 0 else "NA"), ", Hidden State Sequence = ", hidden_states if prob != 0 else "NA")