前提・実現したいこと
Pythonで隠れマルコフモデルを用いたプログラムを試しています。
以下のサイトを参考に試していたのですが、IndexErrorが出てしまい自力では解決できませんでした。
対処につき、ご教授お願い致します。
<参考サイト>
http://www.blackarbs.com/blog/introduction-hidden-markov-models-python-networkx-sklearn/2/9/2017
https://github.com/alexsosn/MarslandMLAlgo/blob/master/Ch16/HMM.py
発生している問題・エラーメッセージ
Traceback (most recent call last): File "~~割愛~~", line , in <module> path,delta,phi = viterbi(pi, a, b, obs) File "~~割愛~~", line , in viterbi path[t] = phi[path[t + 1], t + 1] IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
該当のソースコード
python
1def viterbi(pi, a, b, obs): 2 nStates = np.shape(b)[0] 3 T = np.shape(obs)[0] 4 5 # init blank path 6 path = np.zeros(T) 7 # delta --> highest probability of any path that reaches state i 8 delta = np.zeros((nStates, T)) 9 # phi --> argmax by time step for each state 10 phi = np.zeros((nStates, T)) 11 12 # init delta and phi 13 delta[:, 0] = pi * b[:, obs[0]] 14 phi[:, 0] = 0 15 16 print('\nStart Walk Forward\n') 17 # the forward algorithm extension 18 for t in range(1, T): 19 for s in range(nStates): 20 delta[s, t] = np.max(delta[:, t - 1] * a[:, s]) * b[s, obs[t]] 21 phi[s, t] = np.argmax(delta[:, t - 1] * a[:, s]) 22 print('s={s} and t={t}: phi[{s}, {t}] = {phi}'.format(s=s, t=t, phi=phi[s, t])) 23 24 # find optimal path 25 print('-' * 50) 26 print('Start Backtrace\n') 27 path[T - 1] = np.argmax(delta[:, T - 1]) 28 # p('init path\n t={} path[{}-1]={}\n'.format(T-1, T, path[T-1])) 29 for t in range(T-2, -1, -1): 30 path[t] = phi[path[t + 1], t + 1] 31 # p(' '*4 + 't={t}, path[{t}+1]={path}, [{t}+1]={i}'.format(t=t, path=path[t+1], i=[t+1])) 32 print('path[{}] = {}'.format(t, path[t])) 33 34 return path, delta, phi 35 36path,delta,phi = viterbi(pi, a, b, obs) 37 38print('\nsingle best state path: \n', path) 39print('delta:\n', delta) 40print('phi:\n', phi)
試したこと
以下の質問の回答を参考にenumerate関数を用いたり、int(t)にしてみたりと試してみましたが同じ内容のエラーが出てしまいました。
https://teratail.com/questions/159836
https://teratail.com/questions/77978
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/25 02:19
2021/09/25 03:37
2021/09/25 13:58