隐马可夫模型 维特比算法
代码实现
import numpy as np
import math
import operator
s=np.array([0.4,0.6]) #初始概率,S=0.4 R=0.6
e=np.array([[0.6,0.1],#发射概率 S1 R1
[0.4,0.3],# S2 R2
[0.5,0.1]])# S3 R3
t=np.array([[0.4,0.6],#转换概率 SR SS
[0.7,0.3]])# RR RS
for i in range (2):
one=s[i]*e[0,i]
print (one)
0.24 0.06
one=np.array([0.24,0.06]) one
array([0.24, 0.06])
for i in range (2):
two1=one[0]*t[0,i]*e[1,i]
two2=one[1]*t[1,i]*e[1,i]
print (i,two1,two2)#竖着看,第一列SR SS 第二列是RR RS
0 0.038400000000000004 0.0168 1 0.043199999999999995 0.005399999999999999
m=np.max([0.0384,0.0168])#SR 和 RR n=np.max([0.0432,0.0054])#SS 和 RS print(m,n)#第二天是sunny时,第一天是sunny概率最大;第二天是rainy时,第一天是sunny概率最大。只要最大的,把小的都舍弃掉,这就是维特比算法的核心。
0.0384 0.0432
for i in range (2):
three1=n*t[0,i]*e[2,i]#SS
three2=m*t[1,i]*e[2,i]#SR
print (i,three1,three2) #第一列,SSR SSS 第二列,SRR SRS
0 0.00864 0.013439999999999999 1 0.0025920000000000006 0.001152
M=np.max([0.0086,0.01344,0.0026,0.001152]) M #求出的最大值,SSR
0.01344



