隐马尔可夫模型

隐马尔可夫模型的定义

隐马尔可夫模型(Hidden Markov Model, HMM)是一种时序概率模型,它描述了一个由不可见状态序列(state sequence)所驱动的过程。这些隐藏的状态由一个马尔可夫链随机生成,并且每个状态都对应着一个观测结果。这样,每个状态不仅代表了系统在某一时刻的内在特性,而且决定了在那个时刻可以观测到的随机序列(observation sequence)。

HMM的三要素

组成三要素\lambda =(A,B,\pi )

        初始概率分布:\pi

        状态转移概率分布:A

        观测概率分布:B

        𝑸 = {𝒒𝟏, 𝒒𝟐, … , 𝒒𝑵 }:所有可能状态的集合

        𝑽 = {𝒗𝟏, 𝒗𝟐, … , 𝒗𝑴} :所有可能观测的集合

        𝑰 = (𝒊𝟏, 𝒊𝟐, … , 𝒊𝑻): 长度为T的状态序列

        𝑶 = (𝒐𝟏, 𝒐𝟐, … , 𝒐𝑻): 对应的观测序列

三个基本问题

1. 概率计算问题

给定模型和观测序列,计算观测序列出现的概率。这可以通过前向算法(Forward Algorithm)或后向算法(Backward Algorithm)来解决。

  • 前向算法:用于计算到时刻 tt 的所有可能的隐含状态序列的概率。

Code
def HMM_forward(A,B,Pi,T):
    Pi_cur = Pi
    t = 1
    for j in T:
        alpha = Pi_cur*B[:,j]
        if t < len(T)
            for i in range(len(Pi)):
                Pi_cur[i] = np.dot(A[:,i],alpha)
        t += 1
        print(alpha)_
    prob = np.sum(alpha)
    return prob
 
  • 后向算法:与前向算法类似,但计算的是时刻 tt 之后到达每个状态的概率。

Code
def HMM_backward(A,B,Pi,T):
    n=len(T)
    beta_cur = np.ones(n)
    for j in range(n):
        if j < n-1:
            beta = beta_cur
            for i in range(n):
                beta_cur = np.dot(A,beta*B[:,T[n-j-1]])
            print(beta_cur)
    prob = np.dot(beta_cur,Pi*B[:,T[0]])
    return prob

2. 参数估计问题

已知观测序列,估计模型参数(状态转移概率、观测概率、初始状态概率)。这通常通过Baum-Welch算法,一种基于EM算法的特例来实现。

  • Baum-Welch算法:迭代地调整模型参数,直到收敛到局部最优解。

3. 预测算法或解码问题

给定模型和观测序列,找到最可能的隐含状态序列。这通常通过Viterbi算法来解决。

  • Viterbi算法:动态规划算法,用于寻找最可能的隐含状态路径。

隐马尔可夫模型课后习题——李航

第一题:

解题过程如下:

 第二题:

解题过程如下: 

 

第三题: 

解题过程如下:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值