机器学习(14)

概率图模型(PGM)

含义:用图来表示变量概率依赖关系

三步曲:

  • 表示 representation(建模为图结构)
  • 推断 inference(计算概率)
  • 学习 learning(估计模型参数)

有向图

  • 节点对应连续或离散随机变量
  • 有向边连接父节点
  • 有向边表示条件概率分布
  • 不存在回路,又称为有向无环图模型(DAG)

公式

  • :节点父节点集合

  • 每一项都是一个条件概率分布(CPD)

无向图

  • 节点对应连续或离散随机变量
  • 边表示依赖关系
  • 任意两节点都有连接,则该节点子集为团(clique)
  • 联合概率分布能够基于团分解(实现简化)

公式

  • :所有的集合

  • :团上的势函数(potential function)

  • 配分函数(Partition Function),用于归一化,让整体还是一个概率

相互转换

有向图转换为无向图

  1. 对"共同子节点"的父节点连边(道德化)
  2. 去掉所有箭头方向
  3. 得到无向图(MRF)

无向图转换为有向图

弦: 在一个 里,连接两个不相邻节点的那条边,就叫弦

  1. 检查无向图是否为弦图,任意长度 ≥ 4 的简单环,都必须存在一条"弦"
  2. 给节点设定一个序号(方便后续定向)
  3. 节点连线并给边定向(也可以按照**所有边都从"后出现的节点"指向"先出现的节点"**的规则)

推断方法

  • 精确推断:变量消去法、信念传播法
  • 近似推断:MCMC采样法、变分推断(Variational inference)

隐马尔可夫模型(HMM)

HMM 用一个"看不见的状态序列"来生成"看得见的观测序列",并假设状态满足马尔可夫性、观测只依赖当前状态。

存在隐状态序列

  • 数据是由不可直接观测的状态生成的
  • 我们只能看到状态的"外在表现"

例子:

  • 真实天气(隐)→ 是否下雨/带伞(观测)
  • 人的行为意图(隐)→ 传感器数据(观测)

近似推断----EM算法参数估计

期望最大化算法(Expectation Maximization)

目标:估计模型参数 θ,使观测数据的似然最大

Jensen不等式(函数的期望与期望的函数的关系):

算法思想:

EM 算法使用Jenson不等式 ,将难以直接优化的对数似然函数转化为一个可优化的下界 ,并通过交替最大化该下界实现参数估计

先"猜"隐变量的分布(公式中的),再用这个"猜测"来更新模型,不断重复,直到参数和隐变量相互匹配

E步骤:估计隐变量

  • q分布不变
  • 最大化Z

M步骤:更新参数

  • Z不变
  • q最大化寻优

隐马尔可夫模型代码实现

基本假设

观测独立性假设

当前观测只由当前隐状态决定,与其他状态和观测无关。

齐次马尔科夫假设

当前隐状态只依赖于前一个隐状态,与更早的状态无关。

简单的隐马尔可夫模型

问题:已知小明连续五次考试成绩:A+,B,A-,C+,A,求小明每次考试的状态

存在三种状态(隐状态):认真复习(S1),简单复习(S2),没有复习(S3)

考试成绩--->观测数据:A+:o1,A:o2,A-:o3,B+:o4,B:o5,B-:o6,C+:o7,C:o7,C-:o9
隐状态转移概率 隐状态对应观测结果

状态初始概率:

状态转移矩阵:

发射概率矩阵(在某个隐状态下,产生各个观测值的概率分布):

隐马尔可夫模型推理

|---------|---------------------------------------|---------------------------------------|---------------------------------------|---------------------------------------|---------------------------------------|
| 时间 | | | | | |
| 成绩 | A+ | B | A- | C+ | A |
| 观测 | | | | | |
| 隐状态 | | | | | |

  • t0,t2,t4时刻产生的观测数据只能由状态S1产生所以此时三个时刻对应的状态为S1
  • t1时刻观测值为o5,可能由S1,S2产生,分析t0->t2时刻:

①S1->S1->S1概率:

②S1->S2->S1概率:

对比分析①的概率大于②的概率,则选择①

  • 同理,继续分析下面的状态
  • 最终状态:

代码实现

python 复制代码
import numpy as np
state = np.array(['认真复习','简单复习','没有复习'])
grade = np.array(['A+','A','A-','B+','B','B-','C+','C','C-'])
n_state = len(state)
m_grade = len(grade)
pi = np.ones(n_state)/n_state
t = np.array([
    [0.4,0.3,0.3],
    [0.3,0.4,0.3],
    [0.3,0.3,0.4]
])
e = np.zeros([3,9])
e[0,:9]=1/9
e[1,3:9]=1/6
e[2,5:9]=1/4

from hmmlearn.hmm import CategoricalHMM
hmm = CategoricalHMM(n_state)

hmm.startprob_ = pi
hmm.transmat_ = t
hmm.emissionprob_ = e
hmm.n_features = 9

datas = np.array([0,4,2,6,1])
datas = np.expand_dims(datas,axis=1)
states = hmm.predict(datas)

优缺点和适用条件

|---------|----------------------------|--------------------|-------------------------|
| 方法 | 优点 | 缺点 | 应用 |
| HMM | 很多场景下可以大大简化条件概率计算 | 应用范围比较窄,主要用于时序数据建模 | 语音识别 故障检测 行为识别 |
| 概率图 | 思路清晰:建模表示+推断学习 可解释性强,白盒子模型 | 推断和学习复杂,高维数据处理困难 | 动态化结构学习 非参数化建模 深度学习+概率图 |

相关推荐
格林威2 小时前
多光源条件下图像一致性校正:消除阴影与高光干扰的 6 个核心策略,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·分类·视觉检测
小爷毛毛_卓寿杰2 小时前
修复 Xinference + vLLM 启动失败:0 bytes read 错误的真实原因与解决方案
人工智能
田井中律.2 小时前
知识图谱(一)
人工智能·知识图谱
Mintopia2 小时前
🌱 一个小而美的核心团队能创造出哪些奇迹?
前端·人工智能·团队管理
沈浩(种子思维作者)2 小时前
量子AI真的可以在经典物理硬件中实现吗?
人工智能·python·量子计算
程序员哈基耄2 小时前
一站式在线图像编辑器:全面解析多功能图像处理工具
图像处理·人工智能·计算机视觉
小康小小涵2 小时前
WSL2安装移植到F盘并集成ubuntu20的ros-noetic
人工智能·机器人·自动驾驶
脑子缺根弦2 小时前
云端集中管控 辉视系统赋能校园监狱商场 信息传播更智能
人工智能·私人定制·多媒体信息发布系统
川西胖墩墩2 小时前
开源模型的安全审查与社区治理
人工智能