4

隠れマルコフ モデル (HMM) のフォワード アルゴリズムを実装しようとしていますが、アルファ テーブルを埋めるときにアンダーフローの問題に直面しています。ここのセクション 6 で説明した方法を使用してアルファ値を正規化しましたが、最終的なアルファ値 (観測シーケンスの確率) の結果の合計は常に 1 に等しくなります。実際の確率を取得するために正規化を「元に戻す」にはどうすればよいですか? 私の実装は、セクション 7.2 hereと非常によく似ています。

この同じ質問に対する最近の回答がありましたが、最後のいくつかの手順を理解できませんでした。より詳細な説明を期待しています。ありがとう!

更新:最近の回答をようやく理解したと思いますが、私の理解が正しいことを確認していただければ幸いです。これが私がしたことです(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;
4

0 に答える 0