隱馬爾可夫模型之python實戰

2021-10-23 11:21:09 字數 3623 閱讀 3178

隱馬爾可夫模型之hmm基礎

隱馬爾可夫模型之評估觀察序列概率

隱馬爾可夫模型之學習演算法

隱馬爾可夫模型之**演算法

隱馬爾可夫模型之python實戰

定義資料

hidden_states =

("box 1"

,"box 2"

,"box 3"

)# 隱狀態集合

observations_states =

('red'

,'white'

,'red'

)# 觀測狀態集合

start_probability =

# 初始狀態

hidden_transition_probability =

,'box 2':,

'box 3':,

}hidden_observations_probability =

,'box 2':,

'box 3':,

}

定義維特比演算法

def

viterbi

(obs, states, start_p, trans_p, h2o_p)

:# viterbi演算法

''' input:

obs:觀測狀態集合o=

states:隱狀態集合q=

start_p:初始狀態π=(0.2,0.4,0.4)t

trans_p:轉移狀態矩陣a=【0.5 0.3 0.2

0.2 0.5 0.3

0.3 0.2 0.5】

h2o_p:觀測狀態概率矩陣為:b=【0.5 0.4

0.7 0.5

0.6 0.3】

output:

prob:最優概率

path[state]:最優路徑

'''v =

path =

# initialize base cases (t == 0)

for y in states:

#t=1時刻,狀態為i觀測o1為紅的概率,即δ1(i)

v[0]

[y]= start_p[y]

* h2o_p[y]

[obs[0]

]# 初始狀態,由start的概率,對應乘上發射概率,即由隱狀態到觀測狀態的可能性

path[y]

=[y]

# 開始遍歷,t=2和t=3時刻

for t in

range(1

,len

(obs)):

) newpath =

for y in states:

# 對於每個箱子,計算其由前乙個的各個狀態,到現在箱子的概率大小,取最大值。即求出最有可能到達現在箱子的路徑

# 前乙個箱子轉移到現在箱子的每個狀態對應的路徑大小都計算了,取最大值。作為v[t][y]的值,並更新路徑

(prob, state)

=max([

(v[t-1]

[y0]

* trans_p[y0]

[y]* h2o_p[y]

[obs[t]

], y0)

for y0 in states]

) v[t]

[y]= prob

newpath[y]

= path[state]

+[y]

# don't need to remember the old paths

path = newpath

print_dptable(v)

(prob, state)

=max([

(v[len

(obs)-1

][y]

, y)

for y in states]

)return

(prob, path[state]

)

**

viterbi(observations_states,

hidden_states,

start_probability,

hidden_transition_probability,

hidden_observations_probability)

(0.014699999999999998, [『box 3』, 『box 3』, 『box 3』])

hmmlearn安裝很簡單,"pip install hmmlearn"即可完成。

hmmlearn文件

定義資料

states =

["box 1"

,"box 2"

,"box3"

]n_states =

len(states)

observations =

["red"

,"white"

]n_observations =

len(observations)

start_probability = np.array(

[0.2

,0.4

,0.4])

transition_probability = np.array([[

0.5,

0.2,

0.3],[

0.3,

0.5,

0.2],[

0.2,

0.3,

0.5]])

emission_probability = np.array([[

0.5,

0.5],[

0.4,

0.6],[

0.7,

0.3]

])

建模

model = hmm.multinomialhmm(n_components=n_states)

model.startprob_=start_probability

model.transmat_=transition_probability

model.emissionprob_=emission_probability

seen = np.array([[

0,1,

0]])

.tlogprob, box = model.decode(seen, algorithm=

"viterbi"

)

結果

print

("the ball picked:【"

,", "

.join(

map(

lambda x: observations[x[0]

], seen)),

"】")

print

("the hidden box【"

,", "

.join(

map(

lambda x: states[x]

, box)),

"】")

the ball picked:【 red, white, red 】

the hidden box【 box3, box3, box3 】

github

隱馬爾可夫模型

隱 馬爾可夫模型 hidden markov model,hmm 作為一種統計分析模型,創立於20世紀70年代。80 年代得到了傳播和發展,成為訊號處理的乙個重要方向,現已成功地用於語音識別 行為識別,文字識別以及故障診斷等領域。隱馬爾可夫模型是馬爾可夫鏈的一種,它的狀態不能直接觀察到,但能通過觀測...

隱馬爾可夫模型

對隱馬爾可夫模型的解釋,個人覺得一句簡單概括就是 在馬爾可夫鏈的情況下對每乙個狀態都加入乙個單獨輸出口,而我們把這個輸出口定為可視視窗,可把馬爾可夫鏈放到裡面藏起來。ok!這樣就是知道隱馬爾可夫模型的結構了。通過如下例子來說明hmm的含義。假定乙個暗室中有n個口袋,每個口袋中有m種不同顏色的球,乙個...

隱馬爾可夫模型

搖色子的比喻很好 它解釋了模型的概念 模型的n個狀態 s 對應於色子的種類 隱狀態 真實不可見狀態s的序列,是每次用的色子種類d4 d6 d8組成的序列 觀測狀態 o 是可見的狀態,這裡是色子搖出的點數 觀測概率 是當確定用d4 d6 d8搖的色子的種類,求產生某種點數的概率 如 d4產生點數1的概...