本文主要是介绍隐马尔可夫模型(HMM) |前向算法 |一个简单的例子说清计算过程 |一般步骤总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如是我闻: 本文通过一个简单的例子来详细说明隐马尔可夫模型(HMM)的前向算法
我们求解的问题类型是:给定模型及观测序列计算其出现的概率。
隐马尔可夫模型由三个主要部分组成:
- 隐藏状态集合
- 观测状态集合
- 以及三个概率矩阵(状态转移概率矩阵、观测概率矩阵、和初始状态概率向量)
1. 示例说明
假设有一个简化的天气模型,其中隐藏状态是“晴朗”(Sunny)和“雨天”(Rainy),观测状态是“干燥”(Dry)和“湿润”(Wet)。
- 隐藏状态集合:S = {Sunny, Rainy}
- 观测状态集合:O = {Dry, Wet}
我们定义以下概率:
- 初始状态概率向量(π):P(Sunny) = 0.8, P(Rainy) = 0.2
- 状态转移概率矩阵(A):
Sunny | Rainy | |
---|---|---|
Sunny | 0.7 | 0.3 |
Rainy | 0.4 | 0.6 |
- 观测概率矩阵(B):
Dry | Wet | |
---|---|---|
Sunny | 0.9 | 0.1 |
Rainy | 0.3 | 0.7 |
1.1 任务
给定观测序列:O = {Dry, Wet},计算这个观测序列出现的概率。
2.解决过程
2.1前向算法概述
前向算法通过递归的方式计算每个时间点上所有隐藏状态的前向概率。前向概率α是给定模型参数和观测序列直到当前时间点的所有观测值条件下,隐藏状态为某状态的概率。那么前向概率是什么呢
2.2 前向算法中的前向概率(这个是重点,明白前向概率就明白前向算法)
在隐马尔可夫模型(HMM)中,α(前向概率)代表了在给定模型参数和到当前时间点为止的观测序列的条件下,序列处于某一特定隐藏状态的概率。具体来说,对于时间点t的状态i, α t ( i ) α_t(i) αt(i)表示从序列开始到时间点t观察到特定观测序列,并且在时间点t处于状态i的联合概率。这个概念是通过结合初始状态概率、状态转移概率,以及观测概率来计算得出的。
2.3示例计算过程
给定的观测序列O = {Dry, Wet},我们如何使用前向算法计算其概率?
2.3.1初始化
对于第一个观测“Dry”,我们计算每个隐藏状态的前向概率 α 1 ( i ) α_1(i) α1(i):
- α 1 ( S u n n y ) = π ( S u n n y ) ⋅ B ( S u n n y ∣ D r y ) = 0.8 ∗ 0.9 = 0.72 α_1(Sunny) = π(Sunny) \cdot B(Sunny|Dry) = 0.8 * 0.9 = 0.72 α1(Sunny)=π(Sunny)⋅B(Sunny∣Dry)=0.8∗0.9=0.72
- α 1 ( R a i n y ) = π ( R a i n y ) ⋅ B ( R a i n y ∣ D r y ) = 0.2 ∗ 0.3 = 0.06 α_1(Rainy) = π(Rainy) \cdot B(Rainy|Dry) = 0.2 * 0.3 = 0.06 α1(Rainy)=π(Rainy)⋅B(Rainy∣Dry)=0.2∗0.3=0.06
实际上要是把 α 1 ( S u n n y ) α_1(Sunny) α1(Sunny)和 α 1 ( R a i n y ) α_1(Rainy) α1(Rainy)相加,得到就是t=1的时刻下,观测是Dry的概率
2.3.2递归
接下来,我们使用前一步的前向概率来计算第二个观测“Wet”时,每个隐藏状态的前向概率 α 2 ( i ) α_2(i) α2(i):
- α 2 ( S u n n y ) = [ α 1 ( S u n n y ) ⋅ A ( S u n n y ∣ S u n n y ) + α 1 ( R a i n y ) ⋅ A ( S u n n y ∣ R a i n y ) ] ⋅ B ( S u n n y ∣ W e t ) = [ 0.72 ⋅ 0.7 + 0.06 ⋅ 0.4 ] ⋅ 0.1 = ( 0.504 + 0.024 ) ⋅ 0.1 = 0.0528 α_2(Sunny) = [α_1(Sunny) \cdot A(Sunny|Sunny) + α_1(Rainy) \cdot A(Sunny|Rainy)] \cdot B(Sunny|Wet) = [0.72 \cdot 0.7 + 0.06 \cdot 0.4] \cdot 0.1 = (0.504 + 0.024) \cdot 0.1 = 0.0528 α2(Sunny)=[α1(Sunny)⋅A(Sunny∣Sunny)+α1(Rainy)⋅A(Sunny∣Rainy)]⋅B(Sunny∣Wet)=[0.72⋅0.7+0.06⋅0.4]⋅0.1=(0.504+0.024)⋅0.1=0.0528
- α 2 ( R a i n y ) = [ α 1 ( S u n n y ) ⋅ A ( R a i n y | S u n n y ) + α 1 ( R a i n y ) ⋅ A ( R a i n y ∣ R a i n y ) ] ⋅ B ( R a i n y ∣ W e t ) = [ 0.72 ⋅ 0.3 + 0.06 ⋅ 0.6 ] ⋅ 0.7 = ( 0.216 + 0.036 ) ⋅ 0.7 = 0.1764 α_2(Rainy) = [α_1(Sunny) \cdot A(Rainy|Sunny) + α_1(Rainy) \cdot A(Rainy|Rainy)] \cdot B(Rainy|Wet) = [0.72 \cdot 0.3 + 0.06 \cdot 0.6] \cdot 0.7 = (0.216 + 0.036)\cdot 0.7 = 0.1764 α2(Rainy)=[α1(Sunny)⋅A(Rainy|Sunny)+α1(Rainy)⋅A(Rainy∣Rainy)]⋅B(Rainy∣Wet)=[0.72⋅0.3+0.06⋅0.6]⋅0.7=(0.216+0.036)⋅0.7=0.1764
2.3.3终止
观测序列的总概率是最后一个观测的所有前向概率之和:
- 总概率 = α 2 ( S u n n y ) + α 2 ( R a i n y ) = 0.0528 + 0.1764 = 0.2292 α_2(Sunny) + α_2(Rainy) = 0.0528 + 0.1764 = 0.2292 α2(Sunny)+α2(Rainy)=0.0528+0.1764=0.2292
结果非常amazing啊,这与我们通过暴力方法计算的结果相同。但是前向算法的效率更高,特别是在处理长观测序列时。
3.前向算法的一般步骤总结:
- 初始化:对于每个状态i,计算第一个观测的前向概率 α 1 ( i ) α_1(i) α1(i)。
- 递归:对于每个后续的时间点t和每个状态i,更新 α t ( i ) α_t(i) αt(i)。
- 终止:计算给定观测序列出现的概率,即最后一个时间点的所有前向概率之和。
前向算法不仅提高了计算效率,而且是理解更复杂HMM算法(如Baum-Welch算法和维特比算法)的基础。
通过前向算法,我们能够以更高效的方式解决给定观测序列在特定HMM下出现概率的计算问题,使其在实际应用中更为可行,特别是在序列较长或状态空间较大的情况下
大家一定要理解前向概率啊
非常的有品
以上
这篇关于隐马尔可夫模型(HMM) |前向算法 |一个简单的例子说清计算过程 |一般步骤总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!