演算法 HMM模型 維特比演算法詳解

2022-05-14 20:07:27 字數 3117 閱讀 6127

假設連續觀察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觀察的海藻情況影響。

p(day3-sunny)= max *0.05;

p(day3-cloudy)= max *0.25;

p(day3-rainy)= max *0. 05;

choosemax,得到p(day3-rainy)最大,得出第3天rainy的概率最大。故是這三天最可能的天氣序列。

5.python**流程圖:

1

#-*- 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)

view code

輸出結果:

[, , ]

[, , ]

維特比演算法

維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的 問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。以乙個簡單的隱馬爾科夫模型為例,n 為觀測符號,y y1,y2,y n 為隱狀態序列,要求的 問題為 y 1,y...

維特比演算法

維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...

維特比演算法 python 維特比演算法實現分詞

維特比演算法原理可以參考以下文章,講解的非常詳細,那麼接下來將講解維特比演算法如何應用到分詞演算法中,並如何用python 實現。如何通俗地講解 viterbi 演算法?www.zhihu.com 一 過程分析 句子 經常有意見分歧 詞典 經常 經 有 有意見 意見 分歧 見 意 見分歧 分 概率 ...