InitialP = [0.5, 0.5] EmissionP = { 'a': [0.25, 0.1], 't': [0.25, 0.1], 'c': [0.25, 0.4], 'g': [0.25, 0.4] } for seq in ["aactgcacatgcggcgcgcccgcgctaat", "gggcgcgggcgccccgcg"]: # NB. Book and Lio's notes use integrated transition and initial # distribution matrix (initial step is transition from dummy state 0) # This is confusing, so I will separate them out. # Wiki has non-integrated Viterbi algorithm implementation # 1.1. Implement Forward algorithm fwd = Forward(TransitionP, EmissionP, InitialP) p = fwd.prob(seq) print "**************************************" print "Probability of", seq, ":", p print "Log probability:", -log(p) print "**************************************" # 1.2. Implement Viterbi algorithm vtb = Viterbi(TransitionP, EmissionP, InitialP) (prob, path) = vtb.maxSeq(seq) print "**************************************" print "Viterbi path:" print "P =", prob print seq print ''.join(str(i) for i in path) print "**************************************"