简介:本文系统性地介绍了概率图模型中的隐马尔可夫模型(HMM),包括其理论基础、核心算法、实现步骤及典型应用场景,并通过Python代码示例展示实践方法。
概率图模型(Probabilistic Graphical Model, PGM)是机器学习领域表示复杂概率分布的框架,通过图结构编码随机变量间的依赖关系。作为PGM的典型代表,隐马尔可夫模型(Hidden Markov Model, HMM)具有以下核心特征:
一个标准HMM由五元组定义:λ = (S, V, A, B, π)
问题描述:给定模型λ和观测序列O,计算P(O|λ)
前向算法(Forward Algorithm):
def forward(obs_seq, hmm):
alpha = np.zeros((len(obs_seq), hmm.N))
# 初始化
alpha[0, :] = hmm.pi * hmm.B[:, obs_seq[0]]
# 递推
for t in range(1, len(obs_seq)):
for j in range(hmm.N):
alpha[t, j] = np.sum(alpha[t-1, :] * hmm.A[:, j]) * hmm.B[j, obs_seq[t]]
return np.sum(alpha[-1, :])
问题描述:寻找最优状态序列Q* = argmax₀ P(Q|O,λ)
Viterbi算法动态规划实现:
def viterbi(obs_seq, hmm):
T, N = len(obs_seq), hmm.N
delta = np.zeros((T, N))
psi = np.zeros((T, N), dtype=int)
delta[0] = hmm.pi * hmm.B[:, obs_seq[0]]
for t in range(1, T):
for j in range(N):
trans_prob = delta[t-1] * hmm.A[:, j]
psi[t, j] = np.argmax(trans_prob)
delta[t, j] = np.max(trans_prob) * hmm.B[j, obs_seq[t]]
# 回溯
path = np.zeros(T, dtype=int)
path[-1] = np.argmax(delta[-1])
for t in range(T-2, -1, -1):
path[t] = psi[t+1, path[t+1]]
return path
Baum-Welch算法(EM算法特例)步骤:
特性 | HMM | CRF | RNN/LSTM |
---|---|---|---|
建模方向 | 生成模型 | 判别模型 | 判别模型 |
序列处理 | 严格马尔可夫 | 任意特征 | 长程依赖 |
训练数据 | 无需标注 | 需完全标注 | 需大量数据 |
可解释性 | 高 | 中等 | 低 |
通过本文的系统性阐述,读者应能掌握HMM的核心原理与实现方法,并在实际项目中合理选择和应用这一经典时序建模工具。