下午好/早上好/晚上好
两天以来,我一直在尝试使用viterbi算法实现一个隐马尔可夫模型,但我没有成功
我有一个错误:只有整数、片(:
)、省略号(...
)、numpy.newaxis(None
)和整数或布尔数组是有效的索引
在第41行中,“错误是路径,delta,phi=viterbi(pi,a,b,obs)” 在第35行中,“路径[t]=phi[path[t+1],[t+1]”
我的代码是:
'''
def viterbi(pi, a, b, obs):
nStates = np.shape(b)[0]
T = np.shape(obs)[0]
# init blank path
path = np.zeros(T)
# delta --> highest probability of any path that reaches state i
delta = np.zeros((nStates, T))
# phi --> argmax by time step for each state
phi = np.zeros((nStates, T))
# init delta and phi
delta[:, 0] = pi * b[:, obs[0]]
phi[:, 0] = 0
print('\nStart Walk Forward\n')
# the forward algorithm extension
for t in range(1, T):
for s in range(nStates):
delta[s, t] = np.max(delta[:, t-1] * a[:, s]) * b[s, obs[t]]
phi[s, t] = np.argmax(delta[:, t-1] * a[:, s])
print('s={s} and t={t}: phi[{s}, {t}] = {phi}'.format(s=s, t=t, phi=phi[s, t]))
# find optimal path
print('-'*50)
print('Start Backtrace\n')
path[T-1] = np.argmax(delta[:, T-1])
#p('init path\n t={} path[{}-1]={}\n'.format(T-1, T, path[T-1]))
for t in range(T-2, -1, -1):
path[t] = phi[path[t+1], [t+1]] #line35
#p(' '*4 + 't={t}, path[{t}+1]={path}, [{t}+1]={i}'.format(t=t, path=path[t+1], i=[t+1]))
print('path[{}] = {}'.format(t, path[t]))
return path, delta, phi
path, delta, phi = viterbi(pi, a, b, obs) #line41
print('\nsingle best state path: \n', path)
print('delta:\n', delta)
print('phi:\n', ph)
'''
目前没有回答
相关问题 更多 >
编程相关推荐