1. 程式人生 > >前向演算法(Forward Algorithm)(四)

前向演算法(Forward Algorithm)(四)

首先需要說明的是,本節不是這個系列的翻譯,而是作為前向演算法這一章的補充,希望能從實踐的角度來說明前向演算法。除了用程式來解讀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

: 利用前向演算法計算log Prob(觀察序列| HMM模型)(Computes log Prob(observation|model) using the Forward algorithm.)
  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: