矩阵矢量化操作代替循环

这篇博客探讨了在隐马尔可夫模型中,如何利用矩阵矢量化操作代替传统循环来实现前向算法,以此提高计算效率。文章详细介绍了前向算法的公式,并通过代码设计展示了这一思想,尽管因限制无法展示相关图解,但强调理解代码设计的重要性。
摘要由CSDN通过智能技术生成

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值