HMM算法-求觀測序列出現的機率

學習HMM的一些簡單總結,具體的內容和推導能夠去參考《條件隨機場理論綜述》,寫的很是好。算法

1,離散馬爾科夫過程編程

時間和狀態都是離散變量,且當前所處的狀態只與它以前的一個狀態有關(馬爾科夫性),這種隨機過程即爲馬爾科夫過程。學習

2,HMM的五個要素spa

HMM能夠用一個五元組表示:\(\lambda= (S,K,A,B,\pi)  \)。其中S爲狀態集合,K爲觀察集合,A爲轉移矩陣,B爲觀察機率矩陣,\(\pi\)爲初始狀態分佈。3d

3,HMM的三個假設blog

(1)t時刻的狀態只依賴於t-1時刻qt

(2)t時刻的觀測值Ot只依賴於t時刻的狀態qt變量

(3)狀態與具體時間無關,即轉移機率是獨立於時間的lambda

4,HMM的三個基本問題im

(1)給定模型,若是和求觀測序列o1,o2...ot出現的機率\(P(O|\lambda)\)

(2)給定模型和觀測序列,如何找到產生這一序列機率最大的狀態序列Q

(3)給定模型和觀測序列,如何調整模型的參數,使得產生觀測序列的機率最大

5,forward-backward算法

本篇文章總結一下如何解決第一個問題?給定一個觀測序列o1,o2,o3..ot,它產生的機率是什麼?一個最直接的思路就是把全部可能產生這個序列的狀態序列窮舉出來,這樣天然序列o1o2...on的機率也出來了,可是這樣作天然是不行的,由於時間複雜度過高了。。那怎麼作呢?forward-backford算法,這實際上是一種動態規劃算法,創建在節點與以前以後節點的關係上。

定義forward變量:

\(\alpha_t(i)=P(O_1O_2O_t,q_t=s_i|\lambda)\)

這是部分觀測序列與t時刻狀態\(s_i\)的聯合分佈。如何從\(\alpha_t(i)\)推導出\(\alpha_{t+1}(j)\)呢?

 

 雖然推導的過程很複雜,可是\(\alpha_j(t+1)=[\sum_{i=1}^{N}\alpha_i(t)a_{ij}]b_j(O_{t+1})\)確不難理解。t+1時刻的狀態j能夠從t時刻的任意狀態轉移而來,因此就有了前半部分的加和\(\sum_{i=1}^{N}\alpha_i(t)a_{ij}\),而後再乘以第二部分的發射機率\(b_j(O_{t+1})\)。

從而也容易推出總體序列O的機率\(P(O|\lambda)=\sum_{i=1}^{N}\alpha_T(i)\)

相似forward變量的定義,backforward變量\(\beta_i(t)\)定義以下:\(\beta_i(t)=P(O_{t+1}...O_T|q_t=s_i,\lambda)\)。這個是部分序列\(O_{t+1}\)到OT,在t時刻狀態爲i時的條件機率,還記的嗎?forword變量是聯合機率。一樣,也能夠獲得\(\beta_i(t)\)與\(\beta_{j}(t+1)\)的關係。

 \(P(O|\lambda)\)能夠用forward變量和backword變量共同表示:

\(P(O|\lambda) = \sum_{i}^{N}P(q_t=s_i,O|\lambda)\)

而 \(P(q_t=s_i,O|\lambda)=P(O|q_t=s_i,\lambda)P(q_t=s_i|\lambda)\)

\(=P(O_1O_2...O_t...O_T|q_t=s_i,\lambda)P(q_t=s_i|\lambda)\)

\(=P(O_1O_2...O_t|q_t=s_i,\lambda)P(O_{t+1}...O_T|q_t=s_j,\lambda)P(q_t=s_i|\lambda)\)

\(=P(O_1O_2...O_t,q_t=s_j|\lambda)P(O_{t+1}...O_T|q_t=s_j,\lambda)\)

\(=\alpha_i(t)\beta_i(t)\)

因此

\(P(O|\lambda) = \sum_{i}^{N}P(q_t=s_i,O|\lambda)=\sum_{i=1}^{N}\alpha_i(t)\beta_i(t)\)

看來要想求\(P(O|\lambda)\)能夠從任何一個t點出發。 

實際問題

編程求解

相關文章
相關標籤/搜索