您的位置:首页 > 编程语言 > Go语言

自然语言处理2-隐马尔科夫模型(HMM)-forward algorithm(前向算法)和Viterbi(维特比算法)

2013-06-04 19:17 441 查看

1.隐马尔科夫模型(HMM)

实例:

隐藏状态:Sunny,Cloudy,Rainy

观察状态:Dry,Dryish,Damp,Soggy

初始向量



状态转移矩阵('A' )

weather

yesterday
weather today
Sunny
Cloudy
Rainy
Sunny
0.500

0.375

0.125

Cloudy
0.250

0.125

0.625

Rainy
0.250

0.375

0.375

注:每行之和都为1

混淆矩阵('B' )

hidden

states
observed states
Dry
Dryish
Damp
Soggy
Sunny
0.60

0.20

0.15

0.05

Cloudy
0.25

0.25

0.25

0.25

Rainy
0.05

0.10

0.35

0.50

注:每行之和都为1

1.1.前向算法

定义

用forward algorithm计算观察出现的概率





t=1时





t = 2, ..., T时





最后






注:at+1(j)表示在时间t+1时,状态j的部分概率;bjk混淆矩阵对应的概率;aij转移矩阵对应的概率,

表示状态j对应的初始概率。




求Pr(Dry,Damp,Soggy|HMM)
t=1

a1(sunny) = 0.63 * 0.6 = 0.37800002

a1(cloudy)=0.17 * 0.25= 0.0425

a1(rainy)=0.2 * 0.05= 0.010000001

t=2

a2(sunny)=(0.37800002*0.5+ 0.0425*0.250 + 0.010000001*0.250) * 0.15

a2(cloudy)=(0.37800002*0.375+ 0.0425*0.125 + 0.010000001*0.375)*0.25

a2(rainy)=(0.37800002*0.125 + 0.0425*0.625 + 0.010000001*0.375) * 0.35

t=3

a3(sunny)=(a2(sunny)*0.5+ a2(cloudy)*0.250 + a2(rainy)*0.250) * 0.05

a3(cloudy)=(a2(sunny)*0.375+ a2(cloudy)*0.125 + a2(rainy)*0.375)*0.25

a3(rainy)=(a2(sunny)*0.125 + a2(cloudy)*0.625 + a2(rainy)*0.375)* 0.50

Pr(Dry,Damp,Soggy|HMM)= a3(sunny) + a3(cloudy)+ a3(rainy)

1.2.Viterbi算法

计算Pr(观察序列| 隐藏状态组合),即计算

Pr(dry,damp,soggy|sunny,sunny,sunny),

Pr(dry,damp,soggy|sunny,sunny,cloudy),

Pr(dry,damp,soggy|sunny,sunny,rainy),

. . . .

Pr(dry,damp,soggy| rainy,rainy,rainy)中的最大值,从而获得使dry,damp,soggy出现的最可能序列。



t=1时



当t= 2, ..., T;并且i = 1, ... , n时



找出T(i)中的最大值



当t= T - 1, ..., 1时,通过回溯的方法找出最大概率状态序列





t=1时






t=2时



t=3时



因此可得使dry,damp,soggy出现的最可能序列是sunny,cloudy,rainy。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: