1. 程式人生 > >隱馬爾科夫模型(四)預測演算法

隱馬爾科夫模型(四)預測演算法

預測問題,也稱作解碼問題。已知模型 λ = ( A , B , π )

λ=(A,B,π) 和觀測序列 O = ( o 1 , o
2 o T ) O=(o_1,o_2……o_T)
求對給定觀測序列條件概率P(I|O)最大的狀態序列 I
= ( i 1 , i 2 i T ) I=(i_1,i_2……i_T)
.即給定觀測序列,求最可能的對應的狀態序列。

預測演算法:近似演算法與維特比演算法

近似演算法:
近似演算法的思想是,在每一個時刻t選擇在該時刻最優可能出現的狀態 i t i_t^* ,從而得到一個狀態序列 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*) 將它作為預測的結果。

給定隱馬爾科夫模型 λ λ 和觀測序列O,在時刻t處於狀態 q i q_i 的概率為 γ t ( i ) γ_t(i)

γ t ( i ) = α t ( i ) β t ( i ) P ( O λ ) = α t ( i ) β t ( i ) j = 1 N α t ( i ) β t ( i ) γ_t(i)=\frac{α_t(i)β_t(i)}{P(O|λ)}=\frac{α_t(i)β_t(i)}{\displaystyle\sum_{j=1}^{N}α_t(i)β_t(i)}
在每一個時刻t最有可能的狀態 i t i_t^* 是:

i t = a r g m a x [ γ t ( i ) ] , i = 1 , 2 N , t = 1 , 2 T i_t^*=argmax[γ_t(i)],i=1,2……N,t=1,2……T

從而得到狀態序列 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*)

近似演算法的優點是計算簡單,缺點是不能保證預測的狀態序列整體是最有可能的狀態序列。

維特比演算法:
維特比演算法的基礎可以概括為下面散點:
1)如果概率最大的路徑p(或者說最短的路徑)經過某個點,比如下面中的 x 2 2 x_22 ,那麼這條路徑上的歧視點S到 x 2 2 x_22 的這段子路徑Q,一定是S到 x 2 2 x_22 之間的最短路徑。否則用S到 x 2 2 x_22 的最短路徑R代替Q,便構成了一條更短的路徑,這顯然矛盾。
2)從S到E的路徑必經過第i個時刻的某個狀態,假設第i個時刻有k個狀態,那麼如果記錄了從S到第i個狀態的所有k個結點的最短路徑,最終的最短路徑必經過其中一條,這樣,在任意時刻,只要考慮非常有限的最短路徑即可。
3)結合以上2點,假定當我們從狀態i進入狀態i+1時,從S到狀態i上各個結點的最短路徑已經找到,並且記錄在這些結點上,那麼在計算從起點S到第i+1狀態的某個結點 x i + 1 x_{i+1} 的最短路徑時,只要考慮S到前一個狀態i所有的k個結點的最短路徑,以及從這個結點到 x i + 1 x_{i+1} 的距離即可。

維特比演算法實際使用動態規劃解隱馬爾科夫模型預測問題,即用動態規劃求解最大概率路徑(最優路徑)。這裡一條路徑對應著一個狀態序列。

我們需要從時刻t開始,遞推的計算在時刻t狀態為i的各條部分路徑的最大概率,直到得到時刻t=T狀態為i的各條路徑的最大概率。

時刻t=T的最大概率即為最優路徑的概率 P P^* ,最優路徑的終節點 i T i_T^* 也同時得到。

之後為了找出最優路徑的各個結點,從終結點 i T i_T^* 開始,由後向前逐步求得結點 i T 1 i 1 i_{T-1}^*…i_1^* ,得到最優路徑 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*)

首先引入兩個變數 δ Ψ δ和Ψ
定義在時刻t狀態為i的所有可能的狀態轉移路徑 i 1 , i 2 i t i_1,i_2……i_t