矩阵矢量化操作代替循环

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值