概率计算算法
1.1 前向算法
前向概率:给定隐马尔科夫模型
λ
, 定义到时刻
t
的部分观测序列为
可以递推的求得前向概率 α(i) 及观测概率 P(O|λ) .
前向算法过程
输入:隐马尔科夫模型
λ
, 观测序列
O
输出:观测序列概率
- 初值
α(i)=πibi(o1),i=1,2,⋯,N 递推 对 t=1,2,⋯,T−1 ,
αt+1(i)=[∑j=1Nαt(j)aji]bi(ot+1),i=1,2,⋯,N终止
P(O|λ)=∑i=1NαT(i)
步骤 1 是初始化前向概率,是初始时刻的状态 i1=qi 和观测 o1 的联合概率。步骤 2 是前向概率的递推公式,计算到时刻 t+1 部分观测序列为 o1,o2,⋯,ot,ot+1 且在时刻 t+1 处于状态 qi 的前向概率。
步骤 2 是前向概率的递推公式,计算到时刻
t+1
部分观测序列为
o1,o2,⋯,ot,ot+1
且在时刻
(t+1)
处于状态
qi
的前向概率。在递推式中
αt(j)
是到时刻
t
观测到
步骤3 给出了
P(O|λ)
的计算公式,因为
αT(i)=P(o1,o2,⋯,oT,iT=qi|λ)
, 所以
因为对于在T时刻所有的N个可能的状态求和那么前向概率中的 (iT=qi) 约束就被消除了,就有了上面的公式。
前向算法实际是基于“状态序列的路径结构”递推的计算 P(O|λ) 算法。其时间复杂度是 O(N2T) 。
1.2 后向算法
后向概率: 给定隐马尔科夫模型
λ
, 定义在时刻
t
状态为
可以用递推的方法求得后巷概率 βt(i) 及观测序列概率 P(O|λ)
后向算法过程:
输入:隐马尔科夫模型
λ
, 观测序列O;
输出:观测序列概率
P(O|λ)
- 初值
βT(i)=1,i=1,2,⋯,N - 递推, 对
t=T−1,T−2,⋯,1
βt(i)=∑j=1Naijbj(ot+1)βt+1(j),i=1,2,⋯,N - 终止
P(O|λ)=∑i=1Nπibi(o1)β1(i)
步骤 1 初始化后向概率,对最终时刻的所有状态 qi 规定 βT(i)=1 .
步骤 2 是后向概率的递推公式,为了计算在时刻
t
状态为
步骤 3 求 P(O|λ) 的思路与步骤2中一致,只是初始概率 πi 代替转移概率。
1.3 一些概率与期望值的计算
给定模型 λ 和 观测 O ,在时刻
t 处于状态 qi 的概率,记
γt(i)=P(it=qi|O,λ)
可以通过前向后向概率计算,事实上,
γt(i)=P(it=qi|O,λ)=P(it=qi,O|λ)P(O|λ)
由前向概率 αt(i) 和后向概率 βt(i) 定义可知:
αt(i)βt(i)=P(it=qi,O|λ)
于是得到:
γt(i)=αt(i)βt(i)P(O|λ)=αt(i)βt(i)∑Nj=1αt(j)βt(j)给定模型 λ 和观测 O ,在时刻
t 处于状态 qi 且在时刻 t+1 处于状态 qj 的概率,记
ξt(i,j)=P(it=qi,ii+1=qj|O,λ)
可以通过前向后向概率计算:
ξt(i,j)=P(it=q,it+1=qj,O|λ)P(O|λ)=P(it=q,it+1=qj,O|λ)∑Ni=1∑Nj=1P(it=qi,it+1=qj,O|λ)
而
P(it=qi,it+1=qj,O|λ)=αi(i)aijbj(ot+1)βt+1(j)
所以
一些有用的期望值
在观测 O 下状态
i 出现的期望值 ∑Ni=1γt(i)在观测 O 下由状态
i 转移的期望值 ∑T−1t=1γt(i)在观测 O 下由状态
i 转移到状态 j 的期望值∑T−1t=1ξt(i,j)