当前位置: 首页 > news >正文

隐马尔可夫模型(HMM):观测背后的状态解码艺术

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

一、核心概念:双重随机过程

隐马尔可夫模型(Hidden Markov Model, HMM) 是一种通过可观测序列推断隐含状态序列的概率图模型,包含两个核心随机过程:

  1. 隐含状态链:不可观测的马尔可夫过程 $ {q_t} $
    P ( q t ∣ q t − 1 , q t − 2 , … , q 1 ) = P ( q t ∣ q t − 1 ) P(q_t | q_{t-1}, q_{t-2}, \dots, q_1) = P(q_t | q_{t-1}) P(qtqt1,qt2,,q1)=P(qtqt1)
  2. 观测输出链:每个状态生成的可见输出 $ {o_t} $
    P ( o t ∣ q t , q t − 1 , … , o t − 1 , … ) = P ( o t ∣ q t ) P(o_t | q_t, q_{t-1}, \dots, o_{t-1}, \dots) = P(o_t | q_t) P(otqt,qt1,,ot1,)=P(otqt)

经典比喻

  • 隐含状态 = 天气(晴/雨)
  • 观测输出 = 路人携带的物品(伞/墨镜)
    通过物品序列推测天气变化

往期文章推荐:

  • 20.条件概率:不确定性决策的基石
  • 19.深度解读概率与证据权重 -Probability and the Weighing of Evidence
  • 18.WOE值:风险建模中的“证据权重”量化术——从似然比理论到FICO评分卡实践
  • 17.KS值:风控模型的“风险照妖镜”
  • 16.如何量化违约风险?信用评分卡的开发全流程拆解
  • 15.CatBoost:征服类别型特征的梯度提升王者
  • 14.XGBoost:梯度提升的终极进化——统治Kaggle的算法之王
  • 13.LightGBM:极速梯度提升机——结构化数据建模的终极武器
  • 12.PAC 学习框架:机器学习的可靠性工程
  • 11.Boosting:从理论到实践——集成学习中的偏差征服者
  • 10.GBDT:梯度提升决策树——集成学习中的预测利器
  • 9.集成学习基础:Bagging 原理与应用
  • 8.随机森林详解:原理、优势与应用实践
  • 7.经济学神图:洛伦兹曲线
  • 6.双生“基尼”:跨越世纪的术语撞车与学科分野
  • 5.CART算法全解析:分类回归双修的决策树之王
  • 4.C4.5算法深度解析:决策树进化的里程碑
  • 3.决策树:化繁为简的智能决策利器
  • 2.深入解析ID3算法:信息熵驱动的决策树构建基石
  • 1.类图:软件世界的“建筑蓝图”

二、HMM 的五元组参数

一个完整HMM由以下参数定义:
λ = ( S , V , A , B , π ) \lambda = (S, V, A, B, \pi) λ=(S,V,A,B,π)

符号含义数学描述示例
S S S隐含状态集合 { s 1 , s 2 , … , s N } \{s_1, s_2, \dots, s_N\} {s1,s2,,sN} { 晴 , 雨 } \{\text{晴}, \text{雨}\} {,}
V V V观测符号集合 { v 1 , v 2 , … , v M } \{v_1, v_2, \dots, v_M\} {v1,v2,,vM} { 伞 , 墨镜 } \{\text{伞}, \text{墨镜}\} {,墨镜}
A A A状态转移矩阵 a i j = P ( q t + 1 = s j ∣ q t = s i ) a_{ij} = P(q_{t+1}=s_j | q_t=s_i) aij=P(qt+1=sjqt=si) a 晴→雨 = 0.3 a_{\text{晴→雨}} = 0.3 a=0.3
B B B观测概率矩阵 b j ( k ) = P ( o t = v k ∣ q t = s j ) b_j(k) = P(o_t=v_k | q_t=s_j) bj(k)=P(ot=vkqt=sj) b 雨 ( 伞 ) = 0.9 b_{\text{雨}}(\text{伞}) = 0.9 b()=0.9
π \pi π初始状态分布 π i = P ( q 1 = s i ) \pi_i = P(q_1 = s_i) πi=P(q1=si) π 晴 = 0.6 \pi_{\text{晴}} = 0.6 π=0.6

三、HMM 的三大核心问题

1. 评估问题(Evaluation)
  • 目标:计算观测序列 $ O = (o_1, o_2, \dots, o_T) $ 的概率 $ P(O|\lambda) $
  • 算法:前向算法(动态规划避免指数爆炸)
    前向概率
    α t ( i ) = P ( o 1 , o 2 , … , o t , q t = s i ∣ λ ) \alpha_t(i) = P(o_1, o_2, \dots, o_t, q_t = s_i | \lambda) αt(i)=P(o1,o2,,ot,qt=siλ)
    递推公式
    α t + 1 ( j ) = [ ∑ i = 1 N α t ( i ) a i j ] b j ( o t + 1 ) \alpha_{t+1}(j) = \left[ \sum_{i=1}^N \alpha_t(i) a_{ij} \right] b_j(o_{t+1}) αt+1(j)=[i=1Nαt(i)aij]bj(ot+1)
    终止
    P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda) = \sum_{i=1}^N \alpha_T(i) P(Oλ)=i=1NαT(i)
2. 解码问题(Decoding)
  • 目标:寻找最可能的隐含状态序列 $ Q^* = \arg\max_Q P(Q|O,\lambda) $
  • 算法:维特比算法(动态规划最优路径)
    路径概率
    δ t ( i ) = max ⁡ q 1 , … , q t − 1 P ( q 1 , … , q t = s i , o 1 , … , o t ∣ λ ) \delta_t(i) = \max_{q_1,\dots,q_{t-1}} P(q_1,\dots,q_t=s_i, o_1,\dots,o_t|\lambda) δt(i)=q1,,qt1maxP(q1,,qt=si,o1,,otλ)
    递推公式
    δ t ( j ) = max ⁡ 1 ≤ i ≤ N [ δ t − 1 ( i ) a i j ] b j ( o t ) \delta_{t}(j) = \max_{1 \leq i \leq N} [\delta_{t-1}(i) a_{ij}] b_j(o_t) δt(j)=1iNmax[δt1(i)aij]bj(ot)
    回溯:记录每一步最优状态 $ \psi_t(j) $
3. 学习问题(Learning)
  • 目标:从观测序列 $ O $ 学习参数 $ \lambda = (A,B,\pi) $
  • 算法:Baum-Welch(EM算法特例)
    E步:计算后验概率
    ξ t ( i , j ) = P ( q t = s i , q t + 1 = s j ∣ O , λ ) \xi_t(i,j) = P(q_t=s_i, q_{t+1}=s_j | O, \lambda) ξt(i,j)=P(qt=si,qt+1=sjO,λ)
    M步:更新参数
    a ^ i j = ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 ∑ k = 1 N ξ t ( i , k ) \hat{a}_{ij} = \frac{\sum_{t=1}^{T-1} \xi_t(i,j)}{\sum_{t=1}^{T-1} \sum_{k=1}^N \xi_t(i,k)} a^ij=t=1T1k=1Nξt(i,k)t=1T1ξt(i,j)

四、HMM 的四大经典应用

1. 语音识别
  • 状态:音素(如 /a/, /b/)
  • 观测:声学特征(MFCC系数)
  • 解码:将声音信号转为文字序列
2. 生物序列分析
  • DNA序列标注
    • 状态:外显子/内含子/启动子
    • 观测:核苷酸(A/T/C/G)
      工具:GENSCAN
3. 自然语言处理
  • 词性标注
    • 状态:名词/动词/形容词
    • 观测:单词序列
      P ( 标签序列 ∣ 单词序列 ) ∝ P ( 标签 ) ∏ P ( 单词 ∣ 标签 ) P ( 标签 ∣ 前标签 ) P(\text{标签序列} | \text{单词序列}) \propto P(\text{标签}) \prod P(\text{单词}|\text{标签}) P(\text{标签}|\text{前标签}) P(标签序列单词序列)P(标签)P(单词标签)P(标签前标签)
4. 金融时间序列
  • 市场状态预测
    • 状态:牛市/熊市/震荡市
    • 观测:股价收益率序列

五、Python 实战:天气预测 HMM

import numpy as np
from hmmlearn import hmm# 定义参数
states = ["晴", "雨"]; observations = ["伞", "墨镜"]
pi = np.array([0.6, 0.4])  # 初始分布
A = np.array([[0.7, 0.3],  # 转移矩阵[0.4, 0.6]])
B = np.array([[0.1, 0.9],  # 观测矩阵 (行:状态, 列:观测)[0.8, 0.2]])# 创建模型
model = hmm.CategoricalHMM(n_components=2)
model.startprob_ = pi
model.transmat_ = A
model.emissionprob_ = B# 问题1:评估观测序列概率
obs_seq = [0, 0, 1]  # [伞, 伞, 墨镜]
log_prob = model.score(np.array([obs_seq]).T)
print(f"P(观测序列) = {np.exp(log_prob):.4f}")  # 0.0612# 问题2:解码最优状态序列
states_seq = model.predict(np.array([obs_seq]).T)
print("隐含状态:", [states[i] for i in states_seq])  # [雨, 雨, 晴]# 问题3:学习参数 (Baum-Welch)
model.fit(np.random.randint(0,2,(100,1)))  # 随机观测序列训练
print("学习后的转移矩阵:\n", model.transmat_)

六、HMM 的局限性及扩展

局限性
  1. 马尔可夫假设过强:状态仅依赖前一时刻
  2. 观测独立性假设:当前观测仅依赖当前状态
  3. 离散观测限制:需离散化连续信号(高斯HMM可缓解)
扩展模型
模型改进点应用场景
高斯HMM观测概率为高斯分布连续信号处理
层次HMM状态本身是HMM复杂行为识别
输入输出HMM加入外部控制信号机器人控制
隐半马尔可夫模型状态持续时间显式建模基因结构分析

七、HMM 与相关模型对比

特征HMM马尔可夫随机场循环神经网络
状态类型离散隐状态图节点状态连续隐向量
序列依赖性一阶马尔可夫任意邻域依赖长程依赖
训练方式EM算法最大似然/MCMC梯度下降
可解释性中等

结语:HMM 的时代意义

“HMM 是时间序列建模的瑞士军刀——在深度学习崛起前,它统治了语音识别、生物信息等领域数十年。其优雅的概率框架,仍是理解序列决策的黄金标准。”

尽管面临RNN/Transformer的竞争,HMM凭借可解释性小数据优势,仍在以下场景不可替代:

  • 资源受限的嵌入式设备(智能家居语音控制)
  • 需要状态可解释的领域(医疗诊断、金融监管)
  • 标注数据稀缺的场景(濒危语言保护)

掌握HMM,就是掌握了一把解码时间序列隐秘规律的钥匙

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

http://www.lryc.cn/news/580413.html

相关文章:

  • STM32HAL库总结
  • HuggingFists: 无代码处理复杂PDF
  • Debian、Buildroot 和 Ubuntu 都是基于 Linux 的系统区别
  • 在VMware虚拟机中安装Windows 98时,Explorer提示“该程序执行了非法操作,即将关闭”的解决办法
  • 若 VSCode 添加到文件夹内右键菜单中显示(通过reg文件方式)
  • linux系统源代码安装apache、编译隐藏版本号
  • ubuntu手动编译VTK9.3 Generating qmltypes file 失败
  • Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇
  • 高频交易服务器篇
  • Redis服务器
  • 【Elasticsearch】检索高亮
  • 【网络与爬虫 13】智能伪装:Scrapy-Fake-UserAgent反检测技术实战指南
  • Matplotlib 安装部署与版本兼容问题解决方案(pyCharm)
  • Vue.js TDD开发深度指南:工具链配置与精细化测试策略
  • Linux(centos)安装 MySQL 8
  • ADAS功能介绍
  • alpine安装及配置nodejs开发测试环境
  • 流水线(Jenkins)打包拉取依赖的时候提示无法拉取,需要登录私仓的解决办法
  • Swift 数学计算:用 Accelerate 框架让性能“加速吃鸡”
  • Vue前端项目接收webSocket信息
  • ASP.NET 安装使用教程
  • CppCon 2018 学习:THE BITS BETWEEN THE BITS HOW WE GET TO HOW WE GET TO main()
  • 3dmax标准材质转物理材质插件,支持VR材质和CR材质转换成功物理材质,支持多维子材质
  • Python asyncio库与GIL之间的关系,是否能够解决核心问题?
  • 【鸿蒙】鸿蒙操作系统发展综述
  • Redis 哨兵模式部署--docker版本
  • 个人独创-CV领域快速测试缝合模型实战框架讲解-基础篇-Pytorch必学知识
  • STM32中实现shell控制台(命令解析实现)
  • PyTorch中 item()、tolist()使用详解和实战示例
  • 如何修改Siteground max_execution_time值?