版权声明:转载请注明出处! PS:欢迎大家提出疑问或指正文章的错误! https://blog.csdn.net/zhuqiang9607/article/details/83934961
概率计算问题又称评价问题(Evaluation Problem)
已知条件:给定模型
λ=[A,B,π]和观测序列
O=(o1,o2,o3,...,on)
求解目标:计算在模型
λ和观测序列
O出现情况下的
P(O∣λ),也可以认为是求解观测序列和评估模型之间的匹配程度。
求解方式:直接计算法、前向算法、后向算法
例子:有三个盒子,编号1、2、3,每个盒子都有红、白两种颜色的球,有放回的从盒子里拿1个球,总共进行了四次,出现“红、白、红、白”的概率是多少?(初始状态概率矩阵
π=(1,0,0))
表1. 盒子之间的转移概率
盒子 |
盒1 |
盒 2 |
盒3 |
盒1 |
0.4 |
0.6 |
0 |
盒2 |
0 |
0.8 |
0.2 |
盒 3 |
0 |
0 |
1 |
表2. 每个盒子中红、白球的个数
盒子 |
盒1 |
盒 2 |
盒3 |
红球 |
7 |
4 |
8 |
白球 |
3 |
6 |
2 |
解析:由表1和表2,可知状态转移矩阵A和观测概率B,此时“模型
λ=[A,B,π]和观测序列
O=(红、白、红、白)”为已知条件,求解目标是:“
O=(红、白、红、白)发生的概率,即
P(O∣λ)=?”
直接计算法(不提倡)
通过列举所有可能长度为T的状态序列
S=(s1,s2,s3,...,sT),求各个状态序列
S和观测序列
O的联合概率
P(O,S∣λ),然后对所有可能的状态序列求和,得到
P(O∣λ),求解方式如下(
aij是状态转移概率,bij是观测概率):
P(O∣S,λ)=b11b22b33...bTM
P(S∣λ)=π1a12a23...a(T−1)T
P(O,S∣λ)=P(O∣S,λ)P(S∣λ)=π1b11a12b22a23b33...a(T−1)TbTM
P(O∣λ)=∑S∈STP(O,S∣λ)=∑S1,S2,S3,...STπ1b11a12b22a23b33...a(T−1)TbTM
理论上可以计算,但计算量很大,时间复杂度是
O(TNT)(
N是状态的个数,
T是观测列表的长度),因此不可行。
解析:还是上面例子,如果
O=(红、白、红、白),那么只要枚举
34个就行,分别求出对应的概率,再相加就行了,但要是
O=(红、白、红、...、白)有1000个,需要枚举
31000,这数目就不少了,因此该方法只要知道是什么就可以了,可行度不高。
前向算法(重要)
前向概率:在
λ给定的情况下,到时刻
t时,出现的观测序列为
o1,o2,o3,...,ot且状态为
si时的概率,记为:
αt(i)=P(o1,o2,o3,...,ot,si∣λ)
求解步骤:
-
起始值:
α1(i)=πibi(o1),i=1,2,3,...,N
-
递推:当
t=1,2,3,...,T−1时,
αt+1(i)=[∑j=1Nαt(j)αji]bi(ot+1),i=1,2,3,...,N
-
执行完步骤1和2,可得
P(O∣λ)=∑i=1NαT(i),i=1,2,3,...,N
此时,求解
P(O∣λ)的时间复杂度是
O(N2T)
解析:对上面的例子进行求解,现在观测序列O=(红、白、红、白),初始状态概率矩阵
π=(1,0,0),状态转移矩阵A和观测概率B如下:
A=⎣⎡0.4000.60.8000.21⎦⎤
B=⎣⎡0.70.40.80.30.60.2⎦⎤
1、当
t=1时:
α1(1)=π∗b1(o1)=1∗0.7=0.7
2、当
t=2时:
α2(1)=α1(1)∗a11∗b1(o2)=0.7∗0.4∗0.3=0.084
α2(2)=α1(1)∗a12∗b2(o2)=0.7∗0.6∗0.6=0.252
3、当
t=3时:
α3(1)=α2(1)∗a11∗b1(o3)=0.084∗0.4∗0.7=0.02352
α3(2)=[α2(1)∗a12+α2(2)∗a22]∗b2(o3)=(0.084∗0.6+0.252∗0.8)∗0.4=0.1008
α3(3)=α2(2)∗a23∗b3(o3)=0.252∗0.2∗0.8=0.04032
4、当
t=4时:
α4(1)=α3(1)∗a11∗b1(o4)=0.02352∗0.4∗0.3=0.0028224
α4(2)=[α3(1)∗a12+α3(2)∗a22]∗b2(o4)=(0.02352∗0.6+0.1008∗0.8)∗0.6=0.0568512
α4(3)=[α3(2)∗a23+α3(3)∗a33]∗b3(o4)=(0.1008∗0.2+0.04032∗1)∗0.2=0.012096
此时,可求
P(O∣λ)=α4(1)+α4(2)+α4(3)=0.0028224+0.0568512+0.012096=0.0717696
计算流程图如图2所示,其中初始状态概率、状态转移概率和观测概率为0的线没有画
后向算法(和前向算法差不多)
后向概率:在
λ给定的情况下,并且时刻
t的状态为
si的条件下,观测序列
ot+1,ot+2,ot+3,...,oT的概率,记为:
βt(i)=P(ot+1,ot+2,ot+3,...,oT∣λ,si)
求解步骤:
-
起始值:
β1(i)=1,i=1,2,3,...,N(
T时刻的状态,后向概率都为1)
-
递推:当
t=T−1,T−2,T−3,...,1时,
βt(i)=∑j=1Nαijbj(ot+1)βt+1(j),i=1,2,3,...,N
-
执行完步骤1和2,可得
P(O∣λ)=∑i=1Nπibi(o1)β1(i),i=1,2,3,...,N