Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def viterbi(hmm,observaciones):
- nu_list_list = []
- pr_list = []
- s = []
- #Calculo nu en la primera it
- nu_list=[hmm.b[(e,observaciones[0])]*hmm.pi[e] for e in hmm.estados]
- nu_list_list.append(nu_list)
- #Recorro las observaciones
- for o in observaciones[1:]:
- #Calculo los pr en cada it
- pr = [[nu*hmm.a[(e1,e)] for (e1,nu) in zip(hmm.estados,nu_list)] for e in hmm.estados]
- pr_e = []
- #Calculo el estado que tiene la mayor prob en cada pr(si)
- pr_e = [hmm.estados[pr[i].index(max(pr[i]))]for i in range(len(pr))]
- pr_list.append(pr_e)
- #Calculo nu(si)
- nu_list = [hmm.b[(e,o)] * max(nu * hmm.a[(e1,e)] for (nu,e1) in zip(nu_list,hmm.estados)) for e in hmm.estados]
- nu_list_list.append(nu_list)
- #Recorro la lista con las prob de cada estado
- for i in range(len(nu_list_list)):
- #รndice de mayor prob
- nu_e = [nu_list_list[i].index(max(nu_list_list[i]))]
- s.append(nu_e)
- return pr_list
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement