Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
    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")