用HMM前向算法处理下溢

时间:2012-11-27 21:18:39

标签: algorithm probability forward hidden-markov-models underflow

我正在尝试实现隐马尔可夫模型(HMM)的前向算法,并且在填充alpha表时我遇到了下溢问题。我使用第6节here中描述的方法对alpha值进行了标准化,但现在最终alpha值的总和(观察序列的概率)始终等于1.如何“撤消”规范化以获取实际概率?我的实现与第7.2节here非常相似。

最近有answer同样的问题,但我无法理解最后几个步骤,并希望得到更详细的解释。谢谢!

更新:我想我终于理解了最近的答案,但我很高兴确认我的理解是正确的。这是我做的(c [k]是系数):

    double sum = 0.0;
    for (i = 0; i < 4; i ++) { // only 4 hidden states
        sum += alpha[l-1][i]; // sum last column of alpha table (normalized)
    }

    double sumLogC = 0.0;
    for (k = 0; k < l; k++) {
        sumLogC += Math.log(c[k]);
    }

    probability = Math.log(sum) - sumLogC;

    return probability;

0 个答案:

没有答案