隱馬爾可夫模型之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的概...