如是我闻: 本文通过一个简单的例子来详细说明隐马尔可夫模型(HMM)的暴力算法
我们求解的问题是:给定模型及观测序列计算其出现的概率。
隐马尔可夫模型由三个主要部分组成:
- 隐藏状态集合
- 观测状态集合
- 以及三个概率矩阵(状态转移概率矩阵、观测概率矩阵、和初始状态概率向量)
示例说明
假设有一个简化的天气模型,其中隐藏状态是“晴朗”(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 |
任务
给定观测序列:O = {Dry, Wet},计算这个观测序列出现的概率。
解决过程
要计算观测序列{Dry, Wet}的概率,我们需要考虑所有可能的隐藏状态序列,并计算每个序列生成观测序列的概率,然后将这些概率相加。对于这个例子,可能的隐藏状态序列有四种:{Sunny, Sunny},{Sunny, Rainy},{Rainy, Sunny},和{Rainy, Rainy}。
-
序列{Sunny, Sunny}的概率:
- 初始概率:P(Sunny) = 0.8
- 转移概率:P(Sunny|Sunny) = 0.7
- 观测概率:P(Dry|Sunny) * P(Wet|Sunny) = 0.9 * 0.1 = 0.09
- 总概率:0.8 * 0.7 * 0.09 = 0.0504
-
序列{Sunny, Rainy}的概率:
- 初始概率:P(Sunny) = 0.8
- 转移概率:P(Rainy|Sunny) = 0.3
- 观测概率:P(Dry|Sunny) * P(Wet|Rainy) = 0.9 * 0.7 = 0.63
- 总概率:0.8 * 0.3 * 0.63 = 0.1512
-
序列{Rainy, Sunny}的概率:
- 初始概率:P(Rainy) = 0.2
- 转移概率:P(Sunny|Rainy) = 0.4
- 观测概率:P(Dry|Rainy) * P(Wet|Sunny) = 0.3 * 0.1 = 0.03
- 总概率:0.2 * 0.4 * 0.03 = 0.0024
-
序列{Rainy, Rainy}的概率:
- 初始概率:P(Rainy) = 0.2
- 转移概率:P(Rainy|Rainy) = 0.6
- 观测概率: P(Dry|Rainy) * P(Wet|Rainy) = 0.3 * 0.7 = 0.21
- 总概率:0.2 * 0.6 * 0.21 = 0.0252
结论
将所有可能的隐藏状态序列产生的观测序列概率相加,得到观测序列{Dry, Wet}出现的总概率:
总概率 = 0.0504 + 0.1512 + 0.0024 + 0.0252 = 0.2292
因此,给定模型及观测序列{Dry, Wet}出现的概率是0.2292。
暴力方法的一般步骤:
-
确定所有可能的隐藏状态序列:首先,基于HMM模型中的隐藏状态集合,列出所有可能的隐藏状态序列,这些序列长度应与观测序列长度相同。
-
计算每个隐藏状态序列的概率:
- 使用初始状态概率(π)找出序列开始的状态概率。
- 通过状态转移概率矩阵(A),计算从一个状态转移到下一个状态的概率。
- 使用观测概率矩阵(B),计算每个隐藏状态生成观测序列中相应观测的概率。
-
应用乘法公式:对于每个隐藏状态序列,将初始状态概率、相应的转移概率、和观测概率相乘,得到生成特定观测序列的概率。
-
应用全概率公式:将所有可能的隐藏状态序列产生给定观测序列的概率相加,得到最终的观测序列出现概率。
涉及的概率论公式:
-
乘法公式:用于计算一个事件序列同时发生的概率。如果事件A发生后事件B发生的条件概率是P(B|A),那么事件A和B同时发生的概率是P(A) × P(B|A)。
-
全概率公式:如果一组事件B1, B2, …, Bn构成一个完备事件组(即这些事件互斥且并集为全集),那么任何事件A的概率可以表示为所有这些B事件之一发生后A发生的条件概率的加权和:P(A) = ΣP(Bi)P(A|Bi),其中i从1变化到n。
在HMM中,乘法公式用于计算给定隐藏状态序列生成观测序列的概率,而全概率公式用于将所有这些概率相加,得到最终的观测序列出现概率。暴力方法虽然直观,但计算量随隐藏状态数和观测序列长度的增加而指数增长,因此在实际应用中,通常采用如前向算法这样的更高效算法来进行计算。
非常的有品
以上