马尔可夫链 (Markov Chains) 与隐马尔可夫模型 (Hidden Markov Models) 之间的区别
马尔可夫链(Markov Chains, MC)和隐马尔可夫模型(Hidden Markov Models, HMM)是概率论中两个核心概念,它们被广泛应用于自然语言处理、语音识别、生物信息学等领域。虽然二者关系密切,但有显著区别。本文将从理论、公式、应用及代码示例的角度,解析两者的区别和联系,帮助你轻松掌握这两个概念。
1. 马尔可夫链:定义与特性
1.1 定义
马尔可夫链是一个状态转移模型,它基于马尔可夫性假设:未来的状态只依赖于当前状态,与过去的状态无关。
数学定义:
设有一组离散状态空间 ( S = {s_1, s_2, \dots, s_n} ),状态序列 ( X_1, X_2, \dots, X_t ) 满足:
\[
P(X_t = s_i \mid X_{t-1} = s_j, X_{t-2}, \dots, X_1) = P(X_t = s_i \mid X_{t-1} = s_j)
\]
1.2 基本组成
- 状态集合 ( S ):模型可以取的所有可能状态。
- 状态转移概率矩阵 ( P ):
\[
P_{ij} = P(X_{t+1} = s_j \mid X_t = s_i)
\]
是一个 ( n \times n ) 的矩阵。
1.3 性质
- 无记忆性:未来状态只依赖当前状态。
- 时间独立性:转移概率与时间 ( t ) 无关。
1.4 示例:天气预测
假设天气可以是晴天 ((S)) 或雨天 ((R)),转移概率如下:
\[
P =
\begin{bmatrix}
0.8 & 0.2 \\
0.4 & 0.6
\end{bmatrix}
\]
- 从晴天到晴天的概率为 ( 0.8 )。
- 从雨天到晴天的概率为 ( 0.4 )。
代码示例:
import numpy as np
# 定义状态转移矩阵
states = ['Sunny', 'Rainy']
transition_matrix = np.array([[0.8, 0.2], [0.4, 0.6]])
# 初始状态分布
initial_state = np.array([1, 0]) # 起始状态:Sunny
# 模拟一个序列
n_steps = 10
current_state = initial_state
sequence = []
for _ in range(n_steps):
sequence.append(np.random.choice(states, p=current_state))
current_state = np.dot(current_state, transition_matrix)
print("Generated sequence:", sequence)
2. 隐马尔可夫模型:定义与特性
2.1 定义
隐马尔可夫模型是马尔可夫链的扩展,引入了不可观测(隐藏)状态的概念。在 HMM 中,我们只能观察到与隐藏状态相关的输出。
数学定义:
- ( X_t ):隐藏状态序列。
- ( Y_t ):观测序列,依赖于隐藏状态。
- 隐藏状态的转移满足马尔可夫性:
\[
P(X_t \mid X_{t-1}, X_{t-2}, \dots) = P(X_t \mid X_{t-1})
\]
- 观测值与当前隐藏状态相关:
\[
P(Y_t \mid X_t, X_{t-1}, \dots) = P(Y_t \mid X_t)
\]
2.2 基本组成
- 隐藏状态集合 ( S = {s_1, s_2, \dots, s_n} )。
- 观测集合 ( O = {o_1, o_2, \dots, o_m} )。
- 转移概率矩阵 ( A ):隐藏状态之间的转移概率。
- 观测概率矩阵 ( B ):隐藏状态到观测值的发射概率。
- 初始概率分布 ( \pi ):隐藏状态的初始概率。
2.3 示例:天气与活动
假设隐藏状态是天气(晴天、雨天),观测是活动(散步、购物、清理),概率如下:
- 转移概率矩阵 ( A ):与马尔可夫链类似。
- 发射概率矩阵 ( B ):
\[
B =
\begin{bmatrix}
0.6 & 0.3 & 0.1 \\
0.3 & 0.4 & 0.3
\end{bmatrix}
\]
- 初始概率:([0.5, 0.5])。
代码示例:
# 定义发射概率矩阵
activities = ['Walk', 'Shop', 'Clean']
emission_matrix = np.array([[0.6, 0.3, 0.1], [0.3, 0.4, 0.3]])
# 模拟观测序列
hidden_states = ['Sunny', 'Rainy']
n_steps = 10
hidden_sequence = []
observed_sequence = []
current_state = np.array([0.5, 0.5]) # 初始分布
for _ in range(n_steps):
# 生成隐藏状态
hidden_state = np.random.choice(hidden_states, p=current_state)
hidden_sequence.append(hidden_state)
# 根据隐藏状态生成观测
state_idx = hidden_states.index(hidden_state)
observed = np.random.choice(activities, p=emission_matrix[state_idx])
observed_sequence.append(observed)
# 更新隐藏状态
current_state = np.dot(current_state, transition_matrix)
print("Hidden states:", hidden_sequence)
print("Observed sequence:", observed_sequence)
3. 马尔可夫链与隐马尔可夫模型的区别
特性 | 马尔可夫链 (MC) | 隐马尔可夫模型 (HMM) |
---|---|---|
状态类型 | 可观测状态 | 隐藏状态 |
输出 | 状态序列 | 观测序列 |
转移概率 | 描述状态之间的转移概率 | 描述隐藏状态之间的转移概率 |
发射概率 | 不适用 | 描述隐藏状态与观测的关联 |
应用场景 | 天气预测、股票价格建模 | 语音识别、分词、DNA序列分析 |
4. 图解
5. 总结
5.1 联系
- HMM 是 MC 的扩展:HMM 在 MC 的基础上增加了不可观测的隐藏状态。
5.2 区别
- 可见性:MC 直接观测状态,HMM 隐藏状态需要推断。
- 复杂度:HMM 的模型包含更多概率分布,因此更复杂。
通过本文的解析和代码示例,希望你能清晰理解马尔可夫链与隐马尔可夫模型之间的区别,并能熟练应用它们解决实际问题!
评论已关闭