隐马尔可夫模型(二)——前向算法和后向算法

本文回顾了在隐马尔可夫模型中计算观测序列概率的问题,并详细介绍了前向算法和后向算法。前向算法通过递推公式计算观测序列的概率,其时间复杂度为O(TN^2);后向算法同样用于求解观测序列概率,初始条件是T时刻的后向概率为1,同样具有O(TN^2)的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 问题回顾

计算观测序列概率。
即给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},计算在模型λ下观测序列O出现的概率P(O;λ)。这个问题的求解需要用到前向算法和后向算法,我会在隐马尔可夫模型系列的第二篇博客中讲解,这个问题是HMM模型三个问题中最简单的。

二、前向算法

用前向算法来求观测序列O={o1,o2,…oT}的概率,首先定义前向概率。

前向概率:
给定隐马尔可夫模型λ,定义到时刻 t 时的部分观测序列为o1,o2,…ot且此时的状态为qi的概率为前向概率。记为:
αt( i ) = P(o1, o2, … ot, it = qi;λ)

前向概率的递推公式:
我们已经知道 αt( j ) = P(o1, o2, … ot, it = qj;λ),又因为aji 表示在时刻 t 的状态为 qj 的条件下时刻 t+1 的状态为qi的概率,所以αt( j )aji = P(o1, o2, … ot, it = qj, it+1 = qi;λ),现在利用联合概率和边缘概率的关系,将 it = qj 的所有情况相加得:

### 隐马尔可夫模型前后算法 #### 算法概述 算法用于计算给定观察序列下,隐马尔可夫模型产生的该序列的概率。此概率表示为 \( P(O|\lambda) \),其中 \( O \) 是观测序列而 \( \lambda \) 表示HMM参数集。 向变量定义如下: \[ \alpha_t(i)=P(o_1,o_2,\ldots ,o_t,q_t=S_i | \lambda ) \] 这里 \( o_j \) 代表第 j 步的观测值;\( q_t=S_i \) 则指 t 时间点处于状态 i 。因此,\(\alpha\) 描述的是到时间步 t 结束时,在已知 HMM 参数的情况下,到达特定状态并产生相应观测的可能性[^2]。 #### 后向算法概述 后向算法同样用来评估 \( P(O|\lambda)\),不过它从相反方向处理这个问题——即从最后一个观测开始向推进。后向变量被定义成: \[ \beta_t(i)=P(o_{t+1},o_{t+2},\ldots, o_T|q_t=S_i,\lambda) \] 这意味着在给定时刻 t 的状态下,未来所有可能发生的事件(剩余部分的观测)的发生几率。当我们将两者结合起来考虑时,可以更全面地理解整个系统的动态特性。 #### Python代码实现前后算法 ```python import numpy as np def forward_algorithm(A, B, pi, observations): N = A.shape[0] T = len(observations) alpha = np.zeros((T,N)) # 初始化初态分布乘以发射矩阵对应位置元素作为第一个时刻各隐藏状态下的向概率 alpha[0,:] = pi * B[:,observations[0]] for t in range(1,T): for n in range(N): alpha[t,n] = (alpha[t-1].dot(A[:,n]))*B[n,observations[t]] return alpha def backward_algorithm(A,B,pi,observations): N=A.shape[0] T=len(observations) beta=np.ones((T,N)) for t in reversed(range(T-1)): for n in range(N): beta[t,n]=np.sum([A[n,j]*B[j,observations[t+1]]*beta[t+1,j]for j in range(N)]) return beta ``` 上述函数实现了基于输入转移矩阵 `A`、发射矩阵 `B` 初始状态分布 `pi` 计算指定观测序列 `observations` 下的后向概率数组 `alpha` 及 `beta`。这些数值可用于进一步分析如估计最有可能的状态路径等问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值