1. 背景
根据隐马尔可夫模型中的前项算法和后向算法,计算观测序列概率
2. 前向算法
2.1前向算法公式
① 初值,计算第一个时间点处于各隐状态的概率
② 递推
③终止
2.2. 代码设计
def _alpha(hmm, obs, t):
# 计算时刻t各个状态的前向概率
b = hmm.B[:, obs[0]]
alpha = np.array([hmm.S * b]) # n*1
for i in range(1, t + 1):
# 同样的这样写,大大简化了代码
alpha = (alpha @ hmm.A) * np.array([hmm.B[:, obs[i]]]) # @代表矩阵乘法
return alpha[0]
def forward_prob(hmm, obs):
# 前向算法计算最终生成观测序列的概率, 即各个状态下概率之和
alpha = _alpha(hmm, obs, len(obs) - 1)