2016-03-01 5 views
0

Я начинаю с Python. В настоящее время я изучаю алгоритм Витерби. Я нашел код в Wiki, и я хотел бы реализовать его в Python.Как применить алгоритм Витерби в Python

Я использую online Python для выполнения алгоритма. Однако я столкнулся с проблемой.

После того как я скопировать код в сайт онлайн Python, он показывает

«ш-4,3 $ питон main.py»

Означает ли это, у меня нет никакого выхода? Как я могу вставлять данные в онлайн-сайт Python?

ответ

0

Чтобы попробовать алгоритм Витерби онлайн Вы должны вставить следующий код

def viterbi(obs, states, start_p, trans_p, emit_p): 
    V=[{}] 
    for i in states: 
     V[0][i]=start_p[i]*emit_p[i][obs[0]] 
    # Run Viterbi when t > 0 
    for t in range(1, len(obs)): 
     V.append({}) 
     for y in states: 
      (prob, state) = max((V[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states) 
      V[t][y] = prob 
     for i in dptable(V): 
      print i 
     opt=[] 
     for j in V: 
      for x,y in j.items(): 
       if j[x]==max(j.values()): 
        opt.append(x) 
    #the highest probability 
    h=max(V[-1].values()) 
    print 'The steps of states are '+' '.join(opt)+' with highest probability of %s'%h 
    #it prints a table of steps from dictionary 

def dptable(V): 
    yield " ".join(("%10d" % i) for i in range(len(V))) 
    for y in V[0]: 
     yield "%.7s: " % y+" ".join("%.7s" % ("%f" % v[y]) for v in V) 

states = ('Healthy', 'Fever') 
observations = ('normal', 'cold', 'dizzy') 
start_probability = {'Healthy': 0.6, 'Fever': 0.4} 
transition_probability = { 
'Healthy' : {'Healthy': 0.7, 'Fever': 0.3}, 
'Fever' : {'Healthy': 0.4, 'Fever': 0.6} 
} 
emission_probability = { 
'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1}, 
'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6} 
} 

viterbi(observations, 
        states, 
        start_probability, 
        transition_probability, 
        emission_probability) 

онлайн ide и печатать в командной строке python main.py (если файл с именем main.py). Или нажмите кнопку Execute над редактором.

+0

Это работает! Благодарю. Кстати, я новичок в Python. Могу ли я узнать, почему после последней строки, которая является Витерби (наблюдения, состояния, start_probability, transition_probability, emission_probability), код выводит что-то? – Idonknow

+0

Я понимаю сейчас. Это работает, потому что мы вызываем функцию viterbi, правильно? – Idonknow

+0

@Idonknow Да. И внутри функции есть два выражения 'print'. – kvorobiev

Смежные вопросы