2014-03-25 57 views
2

讓我們假設我有一組隨機觀察:Matlab的 - 生成HMM

obs = [1, 2, 3, 5, 5, 5, 5, 5]

這些意見在HMM代表1點的狀態。在Matlab中,我想對這些觀測建模,所以我可以使用維特比算法來創建一種分類器。

我遇到的問題是我真的不知道從哪裏開始在Matlab中生成模型。工具箱中的功能似乎沒有這個功能。

是否有一個特定的圖書館,這將使我能夠執行這樣的程序,以模擬一系列觀察?

+0

定義一個你至少需要的分立HMM:你的模型的一個狀態'n',一個'n×n'轉換概率,一個'm'可視觀測值(發射)和一個m×n'的列表矩陣和每個狀態下每個發射的概率。你有什麼是一系列的觀察,從那個角度看,你無法定義一個HMM。 – ben

+0

@ben謝謝!但是,我確實有一個C++庫,可以根據觀察值生成一個HMM,並給出狀態總數?這將計算轉換概率和排放量。 – Phorce

回答

2

來定義你需要至少在一個離散的HMM:一個數量模型,一個n X n轉移概率的m更多鈔票觀測(排放)和n X m矩陣的概率在每個國家的每個排放清單狀態n的。你有什麼是一系列的觀察,從那個角度看,你無法定義一個HMM。

所以我首先看看this教程表格mathworks以掌握基本知識。這裏使用的函數是統計工具箱的一部分。

然後,您首先創建一個猜測HMM中的統計數量。假設你有2個統計數據(如上面提到的教程) 下一步將是創建發射矩陣和轉換矩陣的初始猜測。如果你的可能發射是1 2 3 4 5而你的狀態是2那麼你將得到一個2x5發射概率矩陣和一個2x2轉換矩陣。

現在讓我們假設你猜狀態1產生1 2 3和狀態2產生4 5然後(均勻分佈)的發射矩陣是這樣的:

>> emis=[1/3 1/3 1/3 0 0; 0 0 0 1/2 1/2] 
emis = 
    0.3333 0.3333 0.3333   0   0 
     0   0   0 0.5000 0.5000 

還猜測,美國不從狀態1變爲2幾次後,然後呆在那裏。你的猜測就有點像這樣:

>> trans = [.8 .2; 0 1] 
trans = 
    0.8000 0.2000 
     0 1.0000 

,你可以看看你的HMM會產生什麼:從你用觀測序列與功能訓練你的HMM點

>> [seq,states] = hmmgenerate(6, trans, emis) 
seq = 
    2  1  3  2  4  5 

states = 
    1  1  1  1  2  2 

hmmestimatehmmtrain