前向演算法(Forward Algorithm)(四)
阿新 • • 發佈:2019-01-28
首先需要說明的是,本節不是這個系列的翻譯,而是作為前向演算法這一章的補充,希望能從實踐的角度來說明前向演算法。除了用程式來解讀hmm的前向演算法外,還希望將原文所舉例子的問題拿出來和大家探討。
文中所舉的程式來自於UMDHMM這個C語言版本的HMM工具包,具體見《幾種不同程式語言的HMM版本》。先說明一下UMDHMM這個包的基本情況,在linux環境下,進入umdhmm-v1.02目錄,“make all”之後會產生4個可執行檔案,分別是:
genseq: 利用一個給定的隱馬爾科夫模型產生一個符號序列(Generates a symbol sequence using the specified model sequence using the specified model)
testfor
testvit: 對於給定的觀察符號序列及HMM,利用Viterbi 演算法生成最可能的隱藏狀態序列(Generates the most like state sequence for a given symbol sequence, given the HMM, using Viterbi)
esthmm: 對於給定的觀察符號序列,利用BaumWelch演算法學習隱馬爾科夫模型HMM(Estimates the HMM from a given symbol sequence using BaumWelch)。
這些可執行檔案需要讀入有固定格式的HMM檔案及觀察符號序列檔案,格式要求及舉例如下:
HMM 檔案格式:
——————————————————————–
M= number of symbols
N= number of states
A:
a11 a12 … a1N
a21 a22 … a2N
. . . .
. . . .
. . . .
aN1 aN2 … aNN
B:
b11 b12 … b1M
b21 b22 … b2M
. . . .
. . . .
. . . .
bN1 bN2 … bNM
pi:
pi1 pi2 … piN
——————————————————————–
HMM檔案舉例:
——————————————————————–
M= 2
N= 3
A:
0.333 0.333 0.333
0.333 0.333 0.333
0.333 0.333 0.333
B:
0.5 0.5
0.75 0.25
0.25 0.75
pi: