隱馬爾科夫模型(HMM)及其實現

馬爾科夫模型

馬爾科夫模型是單重隨機過程,是一個2元組:(S,A)。

其中S是狀態集合,A是狀態轉移矩陣。

只用狀態轉移來描述隨機過程。

 

馬爾科夫模型的2個假設

有限歷史性假設:t+l時刻系統狀態的概率分佈只與t時刻的狀態有關,與t時刻以前的狀態無關;

齊次性假設:從t時刻到t+l時刻的狀態轉移與t的值無關。

 

以天氣模型爲例

天氣變化有3中狀態S:{1(陰),2(雲),3(晴)}


圖片來自網絡


則狀態轉移矩陣A:


這樣,只要知道的初始狀態概率向量,就能預測接下來每天的天氣了。

 

隱馬爾科夫模型

隱馬爾科夫模型是雙重隨機過程,是一個5元組


V是輸出集合。

表示在狀態j時輸出k的概率。

是初始狀態概率。

用狀態轉移和輸出概率一起來描述隨機過程。

 

以扔硬幣模型爲例

有個小孩手上拿着3個各不相同,也正反不均勻的硬幣。他每次隨機抽取1個硬幣扔,扔了很多次(比如10次),他並不告訴你他每次抽中的是哪個硬幣。但是他會告訴你每次的正反結果:正正反正反正正正……

在這個問題中,我們知道觀察序列(硬幣的正反),但是小孩手上硬幣類型的變換序列被隱藏起來了,我們不知道小孩每次拿的哪個硬幣扔,因此是雙重隨機過程。這就隱馬爾科夫過程。

 

這裏假設模型參數已知:

A=[0.90.05 0.05;0.45 0.1 0.45;0.45 0.45 0.1];
B=[0.50.75 0.25;0.5 0.25 0.75];
Pi=[1/31/3 1/3]';

隱馬爾科夫模型的3個問題

1.【概率問題】給定上述模型,觀察到[正正反]的概率是多少?

O=[11 2];

2.【預測問題】給定上述模型,如果觀察到上述結果,最可能的硬幣轉換序列(狀態轉換序列)是什麼?

3.【學習問題】不告訴你模型參數,如何根據觀察序列得到它們?

 

【概率問題】

1.向前算法

向前變量:給定模型,在時刻t,狀態爲i,且之前的觀察序列如下的概率。

顯然有

Alpha=zeros(3,N);
Beta=zeros(3,N);
Lambda=zeros(3,N);
 
Alpha(:,1)=B(O(1),:)'.*Pi;
Delta=Alpha;
fori=2:N
    Alpha(:,i)=A'*Alpha(:,i-1).*B(O(i),:)';
end
Q1_1=sum(Alpha(:,N));

輸出

Alpha=
0.166666666666667      0.150000000000000      0.0867187500000000
0.250000000000000      0.0531250000000000    0.00683593750000000
0.0833333333333333    0.0322916666666667    0.0259765625000000
 
Q1_1=0.119531250000000

2.向後算法

向後變量:給定模型,在時刻t,狀態爲i,且之後的觀察序列如下的概率。

顯然有


Beta(:,N)=ones(N,1);
fori=N:-1:2
   Beta(:,i-1)=bsxfun(@times,A,B(O(i),:))*Beta(:,i);
end
Q1_2=sum(Pi.*B(1,:)'.*Beta(:,1));

輸出

Beta=
0.252187500000000      0.500000000000000      1
0.202968750000000      0.587500000000000      1
0.321093750000000      0.412500000000000      1
 
Q1_2=0.119531250000000

 

【預測問題】

Viterbi算法

Viterbi變量:給定模型,在時刻t,狀態爲i,觀察到的最佳轉換序列爲的概率。


顯然有


這裏需要把最佳路徑記錄下來


Q2=zeros(1,N);
fori=2:N
    Delta(:,i)=max(bsxfun(@times,A,Delta(:,i-1)))'.*B(O(i),:)';
   [~,Lambda(:,i)]=max(bsxfun(@times,A,Delta(:,i-1)));
end
[~,Q2(N)]=max(Delta(:,N));
fori=N:-1:2
    Q2(i-1)=Lambda(Q2(i),i);
end


輸出

Delta=
0.166666666666667      0.0750000000000000    0.0337500000000000
0.250000000000000      0.0281250000000000    0.00316406250000000
0.0833333333333333    0.0281250000000000    0.00949218750000000

 

最優序列

1     1     1


【學習問題】

1.有監督模式

在有大量標籤數據下,直接用頻率近似概率參數即可。

2.無監督模式

Baum-Welch算法

定義變量:在給定模型和觀察序列O,在t時刻狀態爲i,在t+1時刻狀態爲j的概率



則關於模型參數的一種估計方法爲



歡迎參與討論並關注本博客微博以及知乎個人主頁後續內容繼續更新哦~

轉載請您尊重作者的勞動,完整保留上述文字以及文章鏈接,謝謝您的支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章