假設連續觀察3天的海藻濕度為(dry,damp,soggy),求這三天最可能的天氣情況。
①天氣只有三類(sunny,cloudy,rainy),海藻濕度有四類,而且海藻濕度和天氣有一定的關係。
②隱藏的狀態:sunny, cloudy, rainy;
③觀察狀態序列:
④初始狀態序列:
sunny
cloudy
rainy
0.63
0.17
0.20
⑤狀態轉移矩陣:
sunny
cloudy
rainy
sunny
0.50.375
0.125
cloudy
0.25
0.125
0.625
rainy
0.25
0.375
0.375
⑥發射矩陣:
drydryish
damp
soggy
sunny
0.60.2
0.15
0.05
cloudy
0.25
0.25
0.25
0.25
rainy
0.05
0.10
0.35
0.53、分析
由一階hmm可知,day2的天氣僅取決於day1;day3的天氣又只取決於day2的天氣。
(1)day1由於是初始狀態,我們分別求p(day1-sunny)=0.63*0.6;
p(day1-cloudy)=0.17*0.25;
p(day1-rain)=0.20*0.05;
choose max, 得到p(day1-sunny)最大,得出第1天sunny的概率最大。
(2)day2的天氣又取決於day1的天氣狀況,同時也受day2觀察的海藻情況影響。p(day2-sunny)= max *0.15;
p(day2-cloudy)= max *0.25;
p(day2-rainy)= max *0.35;
choosemax,得到p(day2-cloudy)最大,得出第2天cloudy的概率最大。
故是前兩天最大可能的天氣序列。
(3)day3的天氣又取決於day2的天氣狀況,同時也受day3觀察的海藻情況影響。5.python**流程圖:p(day3-sunny)= max *0.05;
p(day3-cloudy)= max *0.25;
p(day3-rainy)= max *0. 05;
choosemax,得到p(day3-rainy)最大,得出第3天rainy的概率最大。故是這三天最可能的天氣序列。
1view code#-*- coding:utf-8 -*-
2__author__ = '
administrator'3
4 init_vec=
5 trans_mat=,6"
cloudy
":,7
"rainy
":}8 emit_mat=,9"
cloudy
":,10
"rainy
":}11 observes=["
dry","
damp
","soggy"]
12 states=["
sunny
","cloudy
","rainy"]
1314
#列表中包含字典,就相當於二階列表使用
15 tab=[{}] #
只有一行
16 path=[{}]
17for t in
range(len(observes)):18#
print(t)
19if t==0:
20 temp=
21for state in
states:
22 prob=init_vec[state]*emit_mat[state].get(observes[t])
23 tab[0][state]=prob
2425 best_prob,best_state=max(temp,key=lambda
x:x[0])
26 path[0][best_state]=best_prob
27else:28
2930 temp=
31for state1 in
states:
32 item=
33for state2 in
states:
34 prob=tab[t-1][state2]*trans_mat[state2].get(state1)*emit_mat[state1].get(observes[t])
3536 best_prob,best_state=max(item,key=lambda
x:x[0])
37 tab[t][state1]=best_prob
3839 best_prob,best_state=max(temp,key=lambda
x:x[0])
40 path[t][best_state]=best_prob
41print
(tab)
42print(path)
輸出結果:
[, , ]
[, , ]
維特比演算法
維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的 問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。以乙個簡單的隱馬爾科夫模型為例,n 為觀測符號,y y1,y2,y n 為隱狀態序列,要求的 問題為 y 1,y...
維特比演算法
維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...
維特比演算法 python 維特比演算法實現分詞
維特比演算法原理可以參考以下文章,講解的非常詳細,那麼接下來將講解維特比演算法如何應用到分詞演算法中,並如何用python 實現。如何通俗地講解 viterbi 演算法?www.zhihu.com 一 過程分析 句子 經常有意見分歧 詞典 經常 經 有 有意見 意見 分歧 見 意 見分歧 分 概率 ...