HMM MATLAB Toolbox應用

一、比較全面的MATLAB自帶HMM Toolbox的分析介紹,可以參考http://blog.csdn.net/whiteinblue/article/details/40625291
hmmgenerate: 已知轉移矩陣A和混淆矩陣B,隨機生成定製長度的觀察序列和隱層序列。
hmmestimate: 已知觀察序列和隱層序列,最大似然估計轉移矩陣A和混淆矩陣B。
1)hmmgenerate:已知轉移矩陣A和混淆矩陣B,隨機生成定製長度的觀察序列和隱層序列。
[seq, states]=hmmgenerate(len,TRANS,EMIS)
len: 觀察序列和隱層序列的長度
TRANS:轉移矩陣A
EMIS:混淆矩陣B
[seq, states]=hmmgenerate(len,TRANS,EMIS,’Symbols’,{‘One’,’Two’},’Statenames’,{‘1’,’2’,’3’})
Symbols: 觀察序列的符號
Statenames:隱層序列的符號
2) hmmestimate: 已知觀察序列和隱層序列,最大似然估計轉移矩陣A和混淆矩陣B。
[seq, states] = hmmgenerate(len,TRANS,EMIS)
[TRANS1, EMIS1] = hmmestimate(seq,states)
只能輸入一組觀察序列和隱層序列,不能對比較多組的觀察序列和隱層序列進行估計。
3)hmmtrain: 已知隱層序列,初始猜測矩陣A和B,然後最大似然估計轉移矩陣A和混淆矩陣B。
seq = hmmgenerate(len, TRANS, EMIS);
[estTR, estE] = hmmtrain(seq, initTR, initE);
initTR, initE分別爲初始猜測A和B。其中輸入seq就是隱層序列,還是seq越長,hmmtrain對A和B的估計結果越準確。
- 和產生的訓練數據有關,如果一直是同一組訓練數據,肯定train的結果是一樣的。
- 如果是每次隨機產生訓練數據的話,肯定是產生的數據長度越長,越能反應A和B的特點。
- 這個hmmtrain受initTR和initE的影響很大,估計的A和B基本在initTR和initE周圍浮動。
4) hmmviterbi: 已知矩陣A,B和觀察序列,給出生成觀察序列最可能的隱層序列。seqv和statesv是隨機產生的,但是estStates是估計的最可能產生觀察序列的隱層序列。
[seqv, statesv] = hmmgenerate(100, TRANS, EMIS);
estStates = hmmviterbi(seqv, TRANS, EMIS);
5) hmmdecode: 計算觀察序列的後驗狀態概率,計算第i個狀態在第j步出現的概率。所以,hmmdecode得到的後驗狀態概率是num(states)*len的矩陣。
[seqd, statesd] = hmmgenerate(100, TRANS, EMIS);
pStates = hmmdecode(seqd, TRANS, EMIS);

Conclusion:通過具體實驗我們發現matlab工具箱中提供的函數,在很多情況下不能夠很好的估計結果,而且現象的隨機性越大,估計誤差越大;這主要是由於觀察樣本不足和函數算法本身的優化問題,因爲viterbi等hmm算法,都是局部尋優算法,很多時候,並不是全局的最優算法;所以在目前情況下,可以通過增加觀察序列的個數和改進算法來提高估計的準確率。

二、我需要解決的問題是,在有多組隱層序列的基礎上計算 狀態的先驗概率和轉移矩陣,或者是在有多組觀察序列的基礎上計算 狀態的先驗概率,轉移矩陣和混淆矩陣。

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