如何在Python中应用Viterbi算法
我是Python的初学者。目前我正在学习维特比算法。我在中找到了代码,我想用Python实现它 我正在使用来执行算法。然而,我遇到了一个问题 在我将代码复制到在线Python站点之后,它显示 'sh-4.3$python main.py'如何在Python中应用Viterbi算法,python,algorithm,implementation,Python,Algorithm,Implementation,我是Python的初学者。目前我正在学习维特比算法。我在中找到了代码,我想用Python实现它 我正在使用来执行算法。然而,我遇到了一个问题 在我将代码复制到在线Python站点之后,它显示 'sh-4.3$python main.py' 这是否意味着我没有任何输出?如何将数据插入在线Python站点?要在线尝试维特比算法,您应该粘贴以下代码 def viterbi(obs, states, start_p, trans_p, emit_p): V=[{}] for i in state
这是否意味着我没有任何输出?如何将数据插入在线Python站点?要在线尝试维特比算法,您应该粘贴以下代码
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)
联机并在命令行中打印
python main.py
(如果文件名为main.py
)。或者按编辑器上方的执行按钮。它可以工作!谢谢顺便说一句,我是Python新手。我可以知道为什么在最后一行,即Viterbi(观测、状态、开始概率、转移概率、发射概率)之后,代码会输出一些东西吗?我现在明白了。它之所以有效是因为我们调用了函数viterbi,对吗?@Idonknow是的。函数中有两个print
语句。