hmm(隱馬爾科夫模型)有
兩類變數:(變數序列)
1. hidden states:xi
2. events:ei
模型的三要素:
三種求解問題:
1. 已知 模型三要素 和 events,求hidden states:viterbi演算法
2. 已知 模型三要素 和 events,求這一系列events發生的概率:forward/backward 演算法
3. 已知 events,求 模型三要素: baum-welch演算法 (也可以叫forward-backward 演算法)
(注意:這裡baum-welch演算法也可以叫forward-backward 演算法,是因為它本質上是從forward和backward兩個方向進行的。而forward/backward 演算法這裡為「或」,是因為只要其中乙個方向就能求解出來了)
(另:三種演算法間有著緊密的聯絡)
以下為我個人對三種演算法的理解:
viterbi演算法 和 forward/backward 演算法都是 動態規劃 的一種特例
baum-welch演算法 是 em演算法 的一種特例(迭代的方法估計引數基本都是em演算法)
簡單了解viterbi演算法的思想可以看:
在乙個hmm模型的例子中來講解可以看:
用公式來表達viterbi演算法非常簡潔:
其中m,c作為中間變數,其意義為:
m(i, j):第 i 個狀態時是第 j 個hidden state 的概率
c(i, j): 第 i 個狀態時第 j 個hidden state 對應的上乙個狀態概率最大的 hidden state(因此 i 是取不到0的)
最後的x(i)即為events 對應的 hidden states 序列
時間複雜度分析:
該演算法本質上來說是動態規劃,其中取max相當於剪枝的效果,這樣時間複雜度從暴力列舉的 n^t 縮小到 t * n^2
**如下:
def(其實就是把上面公式翻譯了一遍)viterbi(prior, transprob, emisprob, events):
'''prior: [numhidden]
transprob: [numhidden(last), numhidden(current)]
emisprob: [numhidden, numevents]
events: [lengthevents] # index of events should start from 0
'''numhidden =emisprob.shape[0]
numevents = emisprob.shape[1]
lengthevents =events.shape[0]
hiddenprob =np.zeros((lengthevents, numhidden))
record = np.zeros((lengthevents, numhidden), dtype=np.int) #
record[0, :] is not been used
assert prior.shape[0] ==numhidden
assert transprob.shape[0] ==numhidden
assert transprob.shape[1] ==numhidden
bestroute = np.zeros(lengthevents, dtype=np.int)
#calculate the first state
for i in
range(numhidden):
hiddenprob[0, i] = prior[i] *emisprob[i, events[0]]
#calculate other states
for i in range(1, lengthevents): #
event index
for j in range(numhidden): #
current state
temp =np.zeros(numevents)
for k in range(numhidden): #
last state
temp[k] = hiddenprob[i-1, k] *transprob[k, j]
hiddenprob[i, j] = np.max(temp) *emisprob[j, events[i]]
record[i, j] =np.argmax(temp)
#find the best route
bestroute[-1] = np.argmax(hiddenprob[-1, :])
for i in range(lengthevents - 2, -1, -1):
bestroute[i] = record[i+1, bestroute[i+1]]
return bestroute
關於其他兩個演算法:
forward/backward比較簡單
baum–welch演算法可參考:
參考:
隱馬爾科夫模型HMM
我們通常都習慣尋找乙個事物在一段時間裡的變化規律。在很多領域我們都希望找到這個規律,比如計算機中的指令順序,句子中的詞順序和語音中的詞順序等等。乙個最適用的例子就是天氣的 首先,本文會介紹聲稱概率模式的系統,用來 天氣的變化 然後,我們會分析這樣乙個系統,我們希望 的狀態是隱藏在表象之後的,並不是我...
隱馬爾科夫 HMM 模型
隱馬爾科夫 hidden markov model 模型是一類基於概率統計的模型,是一種結構最簡單的動態貝葉斯網,是一種重要的有向圖模型。自上世紀80年代發展起來,在時序資料建模,例如 語音識別 文字識別 自然語言處理等領域廣泛應用。隱馬爾科夫模型涉及的變數 引數眾多,應用也很廣泛,以至於很多人不明...
HMM隱馬爾科夫模型
問題 講講hmm隱馬爾科夫模型 1 隱馬爾科夫模型是關於時序的概率模型,是由乙個隱藏的馬爾科夫鏈隨機生成不可觀測的隨機狀態序列,並由各個狀態生成乙個觀測而產生觀測隨機序列的過程。統計學習方法 cha10 概念解釋 馬爾可夫鏈 一階馬爾可夫過程,即未來狀態僅與當前狀態有關,與過去無關。馬爾可夫過程 狀...