隐马尔可夫模型基本问题——概率计算问题详细讲解

版权声明:转载请注明出处! PS:欢迎大家提出疑问或指正文章的错误! https://blog.csdn.net/zhuqiang9607/article/details/83934961

概率计算问题又称评价问题(Evaluation Problem)

已知条件:给定模型 λ = [ A , B , π ] \lambda=[A,B,\pi] 和观测序列 O = ( o 1 , o 2 , o 3 , . . . , o n ) O=(o_{1},o_{2},o_{3},...,o_{n})
求解目标:计算在模型 λ \lambda 和观测序列 O O 出现情况下的 P ( O λ ) P(O|\lambda) ,也可以认为是求解观测序列和评估模型之间的匹配程度。
求解方式:直接计算法、前向算法、后向算法

例子:有三个盒子,编号1、2、3,每个盒子都有红、白两种颜色的球,有放回的从盒子里拿1个球,总共进行了四次,出现“红、白、红、白”的概率是多少?(初始状态概率矩阵 π = ( 1 , 0 , 0 ) \pi=(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 , π ] \lambda=[A,B,\pi] 和观测序列 O = ( ) O=(红、白、红、白) ”为已知条件,求解目标是:“ O = ( ) O=(红、白、红、白) 发生的概率,即 P ( O λ ) = P(O|\lambda)=?

直接计算法(不提倡)

通过列举所有可能长度为T的状态序列 S = ( s 1 , s 2 , s 3 , . . . , s T ) S=(s_{1},s_{2},s_{3},...,s_{T}) ,求各个状态序列 S S 和观测序列 O O 的联合概率 P ( O , S λ ) P(O,S|\lambda) ,然后对所有可能的状态序列求和,得到 P ( O λ ) P(O|\lambda) ,求解方式如下( a i j b i j a_{ij}是状态转移概率,b_{ij}是观测概率 ):

P ( O S λ ) = b 11 b 22 b 33 . . . b T M P(O|S,\lambda)=b_{11}b_{22}b_{33}...b_{TM}

P ( S λ ) = π 1 a 12 a 23 . . . a ( T 1 ) T P(S|\lambda)=\pi_{1}a_{12}a_{23}...a_{(T-1)T}

P ( O , S λ ) = P ( O S λ ) P ( S λ ) = π 1 b 11 a 12 b 22 a 23 b 33 . . . a ( T 1 ) T b T M P(O,S|\lambda)=P(O|S,\lambda)P(S|\lambda) =\pi_{1}b_{11}a_{12}b_{22}a_{23}b_{33}...a_{(T-1)T}b_{TM}

P ( O λ ) = S S T P ( O , S λ ) = S 1 , S 2 , S 3 , . . . S T π 1 b 11 a 12 b 22 a 23 b 33 . . . a ( T 1 ) T b T M P(O|\lambda)=\sum_{S∈S_{T}}P(O,S|\lambda) =\sum_{S_{1},S_{2},S_{3},...S_{T}}\pi_{1}b_{11}a_{12}b_{22}a_{23}b_{33}...a_{(T-1)T}b_{TM}

理论上可以计算,但计算量很大,时间复杂度是 O ( T N T ) O(TN^T) N N 是状态的个数, T T 是观测列表的长度),因此不可行。

解析:还是上面例子,如果 O = ( ) O=(红、白、红、白) ,那么只要枚举 3 4 3^4 个就行,分别求出对应的概率,再相加就行了,但要是 O = ( . . . ) O=(红、白、红、...、白) 有1000个,需要枚举 3 1000 3^{1000} ,这数目就不少了,因此该方法只要知道是什么就可以了,可行度不高。

前向算法(重要)

前向概率:在 λ \lambda 给定的情况下,到时刻 t t 时,出现的观测序列为 o 1 , o 2 , o 3 , . . . , o t o_{1},o_{2},o_{3},...,o_{t} 且状态为 s i s_{i} 时的概率,记为:

α t ( i ) = P ( o 1 , o 2 , o 3 , . . . , o t , s i λ ) \alpha_{t}(i)=P(o_{1},o_{2},o_{3},...,o_{t},s_{i}|\lambda)

求解步骤

  1. 起始值: α 1 ( i ) = π i b i ( o 1 ) ,      i = 1 , 2 , 3 , . . . , N \alpha_{1}(i)=\pi_{i}b_{i}(o_{1}),\:\:\:\:i=1,2,3,...,N

  2. 递推:当 t = 1 , 2 , 3 , . . . , T 1 t=1,2,3,...,T-1 时, α t + 1 ( i ) = [ j = 1 N α t ( j ) α j i ] b i ( o t + 1 ) ,      i = 1 , 2 , 3 , . . . , N \alpha_{t+1}^{(i)}=[\sum_{j=1}^{N}\alpha_{t}(j)\alpha_{ji}]b_{i}(o_{t+1}), \:\:\:\:i=1,2,3,...,N

  3. 执行完步骤1和2,可得 P ( O λ ) = i = 1 N α T ( i ) ,      i = 1 , 2 , 3 , . . . , N P(O|\lambda)=\sum_{i=1}^{N}\alpha_{T}(i),\:\:\:\:i=1,2,3,...,N

此时,求解 P ( O λ ) P(O|\lambda) 的时间复杂度是 O ( N 2 T ) O(N^2T)

递推求解,直到T时为止

解析:对上面的例子进行求解,现在观测序列O=(红、白、红、白),初始状态概率矩阵 π = ( 1 , 0 , 0 ) \pi=(1,0,0) ,状态转移矩阵A和观测概率B如下:

A = [ 0.4 0.6 0 0 0.8 0.2 0 0 1 ] A=\begin{bmatrix} 0.4& 0.6 &0 \\ 0&0.8 &0.2 \\ 0 & 0& 1 \end{bmatrix}        \:\:\:\:\:\: B = [ 0.7 0.3 0.4 0.6 0.8 0.2 ] B=\begin{bmatrix} 0.7& 0.3 \\ 0.4&0.6 \\ 0.8 & 0.2 \end{bmatrix}

1、当 t = 1 t=1 时:
α 1 ( 1 ) = π b 1 ( o 1 ) = 1 0.7 = 0.7 \alpha_{1}(1)=\pi*b_{1}(o_{1})=1*0.7=0.7
2、当 t = 2 t=2 时:
α 2 ( 1 ) = α 1 ( 1 ) a 11 b 1 ( o 2 ) = 0.7 0.4 0.3 = 0.084 \alpha_{2}(1)=\alpha_{1}(1)*a_{11}*b_{1}(o_{2})=0.7*0.4*0.3=0.084
α 2 ( 2 ) = α 1 ( 1 ) a 12 b 2 ( o 2 ) = 0.7 0.6 0.6 = 0.252 \alpha_{2}(2)=\alpha_{1}(1)*a_{12}*b_{2}(o_{2})=0.7*0.6*0.6=0.252
3、当 t = 3 t=3 时:
α 3 ( 1 ) = α 2 ( 1 ) a 11 b 1 ( o 3 ) = 0.084 0.4 0.7 = 0.02352 \alpha_{3}(1)=\alpha_{2}(1)*a_{11}*b_{1}(o_{3})=0.084*0.4*0.7=0.02352
α 3 ( 2 ) = [ α 2 ( 1 ) a 12 + α 2 ( 2 ) a 22 ] b 2 ( o 3 ) = ( 0.084 0.6 + 0.252 0.8 ) 0.4 = 0.1008 \alpha_{3}(2)=[\alpha_{2}(1)*a_{12}+\alpha_{2}(2)*a_{22}]*b_{2}(o_{3})=(0.084*0.6+0.252*0.8)*0.4=0.1008
α 3 ( 3 ) = α 2 ( 2 ) a 23 b 3 ( o 3 ) = 0.252 0.2 0.8 = 0.04032 \alpha_{3}(3)=\alpha_{2}(2)*a_{23}*b_{3}(o_{3})=0.252*0.2*0.8=0.04032
4、当 t = 4 t=4 时:
α 4 ( 1 ) = α 3 ( 1 ) a 11 b 1 ( o 4 ) = 0.02352 0.4 0.3 = 0.0028224 \alpha_{4}(1)=\alpha_{3}(1)*a_{11}*b_{1}(o_{4})=0.02352*0.4*0.3=0.0028224
α 4 ( 2 ) = [ α 3 ( 1 ) a 12 + α 3 ( 2 ) a 22 ] b 2 ( o 4 ) = ( 0.02352 0.6 + 0.1008 0.8 ) 0.6 = 0.0568512 \alpha_{4}(2)=[\alpha_{3}(1)*a_{12}+\alpha_{3}(2)*a_{22}]*b_{2}(o_{4})=(0.02352*0.6+0.1008*0.8)*0.6=0.0568512
α 4 ( 3 ) = [ α 3 ( 2 ) a 23 + α 3 ( 3 ) a 33 ] b 3 ( o 4 ) = ( 0.1008 0.2 + 0.04032 1 ) 0.2 = 0.012096 \alpha_{4}(3)=[\alpha_{3}(2)*a_{23}+\alpha_{3}(3)*a_{33}]*b_{3}(o_{4})=(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 P(O|\lambda)=\alpha_{4}(1)+\alpha_{4}(2)+\alpha_{4}(3)=0.0028224+0.0568512+0.012096=0.0717696

计算流程图如图2所示,其中初始状态概率、状态转移概率和观测概率为0的线没有画

计算流程图

后向算法(和前向算法差不多)

后向概率:在 λ \lambda 给定的情况下,并且时刻 t t 的状态为 s i s_{i} 的条件下,观测序列 o t + 1 , o t + 2 , o t + 3 , . . . , o T o_{t+1},o_{t+2},o_{t+3},...,o_{T} 的概率,记为:

β t ( i ) = P ( o t + 1 , o t + 2 , o t + 3 , . . . , o T λ , s i ) \beta_{t}(i)=P(o_{t+1},o_{t+2},o_{t+3},...,o_{T}|\lambda,s_{i})

求解步骤

  1. 起始值: β 1 ( i ) = 1 ,      i = 1 , 2 , 3 , . . . , N \beta_{1}(i)=1,\:\:\:\:i=1,2,3,...,N T T 时刻的状态,后向概率都为1)

  2. 递推:当 t = T 1 , T 2 , T 3 , . . . , 1 t=T-1,T-2,T-3,...,1 时, β t ( i ) = j = 1 N α i j b j ( o t + 1 ) β t + 1 ( j ) ,      i = 1 , 2 , 3 , . . . , N \beta_{t}^{(i)}=\sum_{j=1}^{N}\alpha_{ij}b_{j}(o_{t+1})\beta_{t+1}(j), \:\:\:\:i=1,2,3,...,N

  3. 执行完步骤1和2,可得 P ( O λ ) = i = 1 N π i b i ( o 1 ) β 1 ( i ) ,      i = 1 , 2 , 3 , . . . , N P(O|\lambda)=\sum_{i=1}^{N}\pi_{i}b_{i}(o_{1})\beta_{1}(i),\:\:\:\:i=1,2,3,...,N

反向递推求解,直到时刻1时为止

猜你喜欢

转载自blog.csdn.net/zhuqiang9607/article/details/83934961