Пример #1
0
meanstds = [(2., 0.1), (1., 0.1), (1., 0.1)]
hmm = HMM(3, transition_matrix=transition, pdf_mean_and_stds=meanstds)
print(hmm.A[0])
print(hmm.pi)
print(np.random.choice(range(hmm.N), 1, p=hmm.pi))
print(hmm.simulate_state_seq(50))
obs = hmm.simulate_observation_seq(100)
plt.plot(obs, 'ko')
plt.plot(obs, 'k--')
# plt.show()

print(hmm.forward(obs))

transition2 = np.asarray([[0.8, 0.18, 0.02], [0.2, 0.4, 0.4], [0.02, 0.4, 0.58]])
hmm2 = HMM(3, transition_matrix=transition2, pdf_mean_and_stds=meanstds)
# obs = hmm2.simulate_observation_seq(100)
print(hmm2.forward(obs))

print(hmm.backward(obs))
print(hmm2.backward(obs))

print(hmm.backward(obs)
      / hmm2.backward(obs))
print(hmm.forward(obs)
      / hmm2.forward(obs))

print(hmm.backward(obs)
      / hmm2.backward(obs)
      / (hmm.forward(obs)
      / hmm2.forward(obs)))  # always around 0.998, 1.078 or 0.947
Пример #2
0
hmm = HMM()
hmm.train(train)
test(test)


def test(data):
    correct_num = 0.0
    token_num = 0.0
    for seq in data[10:20]:
        true = seq.labels
        sen = seq.features
        ob, T = self.checkOb(seq)
        print(sen)
        result = self.classify(seq)
        print(true)
        print(result)
        B = hmm.backward(ob, T)
        print(sum(B[:, 0] * hmm.P * hmm.E[ob[0]]))
        print(hmm.likelihood(seq))
        print()
        token_num += len(sen)
        for i in range(len(sen)):
            if true[i] == result[i]:
                correct_num += 1
    print('\nAccuracy: ' + str(correct_num / token_num))


print(hmm.forward(data[10]) == hmm.backward(data[10])
      )  # test if the likelihood of Forward algorithm equals to Backforward.