Viterbi怎么Rescale?# Engineering - 工程
y*o
1 楼
我按照wikipedia给的那个pseudo code做的。
http://en.wikipedia.org/wiki/Viterbi_algorithm
目的是想找到隐性马科夫模型(HMM)的最佳State sequence.
如果Observation比较简短, 跑起来没有问题,如果太长,我会得到None.
想必一定是因为里面概率相乘,乘太多了,就underflow了。
可否将那做乘法的那3行相应地变成:
p = log(ep[state][output] * tp[state][next_state])
prob *= log(p)
v_prob *= log(p)
我数学很差,所以想请教前辈大牛儿们,如何rescale? 查不到什么文献。
wikipedia的pseudo-code在此:
def forward_viterbi(y, X, sp, tp, ep):
T = {}
for state in X:
## prob. V. path V. prob.
T[state] = (sp[state], [
http://en.wikipedia.org/wiki/Viterbi_algorithm
目的是想找到隐性马科夫模型(HMM)的最佳State sequence.
如果Observation比较简短, 跑起来没有问题,如果太长,我会得到None.
想必一定是因为里面概率相乘,乘太多了,就underflow了。
可否将那做乘法的那3行相应地变成:
p = log(ep[state][output] * tp[state][next_state])
prob *= log(p)
v_prob *= log(p)
我数学很差,所以想请教前辈大牛儿们,如何rescale? 查不到什么文献。
wikipedia的pseudo-code在此:
def forward_viterbi(y, X, sp, tp, ep):
T = {}
for state in X:
## prob. V. path V. prob.
T[state] = (sp[state], [