隐马尔可夫模型解释(转移矩阵,发射矩阵,初始概率)

本文深入解析隐马尔可夫模型(HMM),包括模型的基本概念、关键假设及应用。探讨了如何通过减少隐状态值来简化复杂的转换函数,从而解决观测值状态过多的问题。同时,介绍了使用EM算法(最大期望算法)来求解最优函数参数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.隐马尔可夫模型详解
2. 简析EM算法(最大期望算法)
3. 悉尼科技大学徐亦达课程。
4. Python实现HMM(隐马尔可夫模型) 以下基础知识来源于该链接。
5. HMM的一些基础知识:
在这里插入图片描述在这里插入图片描述Xi是观测值,以上是一个观测值序列;如果观测值x的状态非常多(特别极端的情况是连续数据),转换函数会变成一个非常大的矩阵,如果x的状态有K个,那么转换函数就会是一个K*(K-1)个参数,而且对于连续变量观测值更是困难。
为了降低马尔科夫链的转换函数的参数量,我们引入了一个包含较少状态的隐状态值,将观测值的马尔科夫链转换为隐状态的马尔科夫链(即为隐马尔科夫链HMM)
在这里插入图片描述
其包含了一个重要假设:当前观测值只由当前隐状态所决定。这么做的一个重要好处是,隐状态值的状态远小于观测值的状态,因此隐藏状态的转换函数 的参数更少。
此时我们要决定的问题是:
在这里插入图片描述即在所有可能隐藏状态序列情况下,求使得序列 发生概率最大的函数参数 。
隐马尔科夫链HMM三个重要假设:

  1. 当前观测值只由当前隐藏状态确定,而与其他隐藏状态或观测值无关(隐藏状态假设)
  2. 当前隐藏状态由其前一个隐藏状态决定(一阶马尔科夫假设)
  3. 隐藏状态之间的转换函数概率不随时间变化(转换函数稳定性假设)

隐马尔科夫链HMM所要解决的问题:
在所有可能隐藏状态序列情况下,求使得当前序列X产生概率最大的函数参数θ。

代码⬅️?️

### 隐马尔可夫模型中的三个矩阵 #### 初始状态概率向量 π 初始状态概率向量 \(\pi\) 描述了系统处于各个隐藏状态的起始概率。对于一个具有 \(N\) 个可能的状态集合,\(\pi_i\) 表示在时间步 \(t=0\) 时系统位于第 \(i\) 个状态的概率。 \[ \sum_{i=1}^{N}\pi_i = 1, \quad 0 \leq \pi_i \leq 1 \] 这个向量决定了第一个时刻系统的状态分布情况[^2]。 #### 状态转移概率矩阵 A 状态转移概率矩阵 \(A=[a_{ij}]_{N\times N}\),其中元素 \(a_{ij}=P(q_t=j|q_{t-1}=i)\) 是指给定前一时刻处在状态 \(i\) 的条件下,在当前时刻转移到另一个特定状态 \(j\) 的条件概率。这里假设共有 \(N\) 种不同的内部状态,则有: \[ a_{ii'}=\frac{\text{从状态 } i \text{ 转移到状态 } i' \text{ 的次数}}{\text{总离开状态 } i \text{ 的次数}}, \forall i,i'\in S \] 并且满足每一行之和等于1: \[ \sum_j a_{ij}=1,\; j=1,...,N \] 该矩阵反映了随时间变化而发生的潜在状态之间的转换规律。 #### 观测概率矩阵 B 观测概率矩阵 \(B=[b_j(o)]_{N\times M}\),用来定义当系统处于某个具体状态下生成观察值的可能性大小。如果存在 \(M\) 类别的输出符号,则 \(b_j(k)=P(O=k | q=t,j)\) 给出了在已知某一时段内实际发生的是第 \(k\) 类事件的情况下,对应于这一时段内的真实物理过程确实是由第 \(j\) 个隐含因素所引起的比例关系。 \[ b_j(v_k)= P(V=v_k | Q=q_j), k=1,...,M;\; v_k \in V \] 这表明了每一个隐藏状态如何映射到可见的数据上。 ```python import numpy as np # 定义参数 states = ['Rainy', 'Sunny'] observations = ['walk', 'shop', 'clean'] start_probability = {'Rainy': 0.6, 'Sunny': 0.4} transition_probability = { 'Rainy': {'Rainy': 0.7, 'Sunny': 0.3}, 'Sunny': {'Rainy': 0.4, 'Sunny': 0.6} } emission_probability = { 'Rainy': {'walk': 0.1, 'shop': 0.4, 'clean': 0.5}, 'Sunny': {'walk': 0.6, 'shop': 0.3, 'clean': 0.1} } def hmm_forward(observations_seq): T = len(observations_seq) N = len(states) alpha = np.zeros((T,N)) # 初始化alpha的第一列 for s in range(N): state_name = states[s] obs_name = observations_seq[0] alpha[0][s] = start_probability[state_name]*emission_probability[state_name][obs_name] # 前向算法迭代更新剩余部分 for t in range(1,T): for s_to in range(N): sum_prob = 0 current_state = states[s_to] observation = observations_seq[t] emission_p = emission_probability[current_state][observation] for s_from in range(N): prev_alpha = alpha[t-1,s_from] trans_p = transition_probability[states[s_from]][current_state] sum_prob += (prev_alpha * trans_p) alpha[t][s_to]=emission_p*sum_prob return alpha[-1].sum() print(hmm_forward(['walk','shop'])) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值