隐马尔可夫模型python实现

仅作为保存,大佬请跳过。


直接上代码

前向算法

from numpy import *
import numpy as np
import matplotlib as plt
import math


def hmm_forward():
    A=np.array([[0.5,0.1,0.4],[0.3,0.5,0.2],[0.2,0.2,0.6]])
    B=np.array([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
    pai=np.array([0.2,0.3,0.5])
    o=np.array([0,1,0,0,1,0,1,1])

    # 初始化
    T=len(o)
    boxnumber=shape(B)[0]
    alpha=np.zeros(T*boxnumber).reshape(boxnumber,T)

    for i in range(boxnumber):
        alpha[i][0]=pai[i]*B[i][o[0]]


    # 迭代
    sigma=0
    for j in range(T-1):
        for i in range(boxnumber):
            for k in range(boxnumber):
                sigma+=alpha[k][j]*A[k][i]
            alpha[i][j+1]=sigma*B[i][o[j+1]]
            sigma=0


    # 终止
    prob=np.sum(alpha,axis=0)

    print(alpha)
    print(prob[-1])


if __name__=='__main__':
    hmm_forward()

后向算法

from numpy import *
import numpy as np
import matplotlib as plt
import math


def hmm_backward():
    A=np.array([[0.5,0.1,0.4],[0.3,0.5,0.2],[0.2,0.2,0.6]])
    B=np.array([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
    pai=np.array([0.2,0.3,0.5])
    o=np.array([0,1,0,0,1,0,1,1])

    # 初始化
    T=len(o)
    boxnumber=shape(B)[0]
    beta=np.zeros(T*boxnumber).reshape(boxnumber,T)

    for i in range(boxnumber):
        beta[i][0]=1


    # 迭代
    sigma=0
    t=T
    for j in range(T-1):
        t -= 1
        for i in range(boxnumber):
            for k in range(boxnumber):
                sigma+=A[i][k]*B[k][o[t]]*beta[k][j]
            beta[i][j+1]=sigma
            sigma=0

    print(beta)


    # 终止
    sigma=0
    for i in range(boxnumber):
        sigma+=pai[i]*B[i][o[0]]*beta[i][T-1]
    print(sigma)



if __name__=='__main__':
    hmm_backward()

参考

感谢大佬博主文章

李航统计学习方法-第十章-习题代码学习-前向后向维特比

在这里插入图片描述

第10章 隐马尔可夫模型
在这里插入图片描述

隐马尔可夫模型的前向算法和后向算法理解与实现(Python)

——————————————————————————

其他参考(此仅作为博主的收藏,博友们请跳过)

笔记: 从EM算法到隐马尔可夫模型

Python实现语音识别和语音合成

隐马尔可夫链(一)前向算法和后向算法

例子——从EM算法到Baum-Welch算法

维特比算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值