机器学习 第14章 概率图模型

隐马尔可夫模型(HMM)

隐马尔可夫模型 (Hidden Markov Model, HMM) 是一种统计模型,主要用于处理序列数据,特别是在存在未观测的或隐藏的状态的情况下。HMM 通过观察到的数据来推断这些隐藏状态的序列。它的核心思想是,虽然真实的系统状态(或“状态”)不可直接观察到,但我们可以通过观察到的数据(“观测值”)来间接地估计或推测这些状态。

HMM 的主要组成部分
(1)状态集:系统可能处于的一组状态,通常记作 S = { s 1 , s 2 . . . s N } S=\left \{ s_{1},s_{2}...s_{N} \right \} S={s1,s2...sN}
(2)观测集:对应于每种状态的可能观测值集合,记作 O = { o 1 , o 2 . . . o M } O=\left \{ o_{1},o_{2}...o_{M} \right \} O={o1,o2...oM}
(3)初始状态概率: 系统开始时处于每个状态的概率,通常表示为一个概率向量 π \pi π,其中 π i = P ( q 1 = s i ) \pi _{i}=P\left ( q_{1}=s_{i} \right ) πi=P(q1=si)
(4)状态转移概率: 描述系统从一个状态转移到另一个状态的概率,通常表示为一个矩阵 A,其中 a i j = P ( s t = s j ∣ s t − 1 = s i ) a_{ij}=P\left ( s_{t}=s_{j}\mid s_{t-1}=s_{i} \right ) aij=P(st=sjst1=si)
(5)发射概率: 给定一个状态,观察到某个特定输出的概率,通常表示为一个矩阵B,其中 b i ​ ( o k ​ ) = P ( o t ​ = o k ​ ∣ s t ​ = s i ​ ) b i​ (o k​ )=P(o t​ =o k​ ∣s t​ =s i​ ) bi(ok)=P(ot=okst=si)

示例
假设我们有一个天气系统,天气可能是晴天、雨天或阴天。我们不能直接观察到天气,但我们有一个喜欢散步的朋友,他的行为(在家、外出散步、购物)会受到天气的影响。我们可以通过观察朋友的行为来推断最近几天的天气状况。

马尔可夫随机场(MRF)

马尔可夫随机场 (Markov Random Field, MRF) 是一种无向图模型,其中每个节点代表一个随机变量,而边表示这些变量之间的依赖关系。MRF 中的关键特性是局部马尔可夫性,这意味着任意一个节点的条件概率只依赖于其直接相邻的节点(邻居),而不依赖于图中的其他节点。这种条件独立性使得MRF 成为一个有用的工具,尤其是在处理那些可以自然地表示为网络或网格结构的问题时。

MRF 的基本概念
无向图模型: 不同于贝叶斯网络中的有向无环图(DAG),MRF 使用无向边来表示变量之间的关系,这允许图中存在环路。
局部马尔可夫性: 在MRF中,任意节点的条件概率只取决于其邻居节点的状态。这意味着一旦知道了邻居的状态,那么该节点与其他非邻居节点是条件独立的。
全局马尔可夫性: 这是指在给定了节点的邻居集后,任何两个非邻接节点都是条件独立的。

应用
在计算机视觉中,MRF 通常用于处理图像分割或去噪问题。例如,当对一幅图像进行分割时,每个像素都可以被视为一个节点,而每个节点的状态代表该像素属于哪个分割区域。通过建立一个MRF,可以捕捉像素之间的空间相互关系,进而提高分割的准确性。

下面是一个简单的马尔可夫随机场,如图所示在这里插入图片描述
MRF 的能量函数
在MRF中,通常定义一个能量函数来衡量一个配置的好坏。能量函数通常是所有节点和边势函数的和。势函数描述了节点间相互作用的强度,通常设计为非负的,以保证能量函数的全局最小值对应于最可能的配置。通过最小化这个能量函数,可以得到最合适的配置。

MRF 与条件随机场 (CRF)
条件随机场 (CRF) 是MRF的一种特殊情况,专门用于处理有监督的学习问题,即给定一些观测数据,预测一个或多个目标变量的值。CRF 在序列标注和结构化预测任务中特别有用,如自然语言处理中的词性标注或命名实体识别。

MRF 的推断和学习
在MRF中,推断通常指的是计算给定观测下的边际概率或其他概率分布的任务。学习则是指从数据中估计模型参数的过程。这两项任务通常都很复杂,尤其是对于大型的图模型,因为它们往往需要复杂的算法来近似解决,例如信念传播或变分方法。

条件随机场(CRF)

CRF 是一类用于建模序列数据的随机场模型,特别适用于标注或分类问题。CRF与HMM的不同之处在于,CRF直接对条件概率分布建模,而不是联合概率分布。
在自然语言处理中的命名实体识别(NER)任务中,CRF可以用于预测句子中每个单词的标签。
下面是伪代码示意

class CRF:
    def __init__(self, features, transitions):
        self.features = features
        self.transitions = transitions

    def forward_algorithm(self, obs_seq):
        # 前向算法用于计算观测序列的概率
        pass

    def viterbi(self, obs_seq):
        # Viterbi算法用于解码最优路径
        pass

学习与推断

学习通常涉及从数据中估计模型参数,而推断则涉及使用已知的数据来估计未知变量的分布。

变量消去

变量消去 (Variable Elimination, VE) 是一种用于求解因子图或贝叶斯网络中的边缘概率分布的方法。这种方法的核心思想是通过一系列的求和操作来消除不感兴趣的变量,从而得到感兴趣的变量的边缘分布。VE 算法通过按一定的顺序消除非目标变量来计算目标变量的边缘分布,这个顺序的选择会影响算法的效率。

VE 的步骤包括:
(1)选择消元顺序:VE 的性能很大程度上依赖于消元变量的顺序,一个合理的消元顺序可以显著减少计算量。
(2)消元过程:在这个过程中,通过固定某些变量的值,逐步消除其他变量,直到只剩下目标变量。
(3)消息传递:在某些情况下,VE 可以看作是一种特殊的消息传递算法,其中消息是通过消元过程传递的。

信念传播

信念传播 (Belief Propagation, BP) 也被称为消息传递算法,是在图模型上执行推理的一种方法,主要用于计算节点的后验概率。BP 算法尤其适合于稀疏图模型,在这些模型中,每个节点只与其少数邻居直接相连。BP 算法通过在网络中传递消息来更新每个节点的信念(即后验概率),直到整个网络收敛于一致的信念状态。

BP 算法的特点包括:
(1)消息传递:每个节点通过接收来自邻居的消息来更新自己的信念,并向邻居发送新的消息。
(2)收敛性:在没有循环的图中,BP 算法能够精确地收敛到真实的边缘后验概率。然而,在存在循环的图中,BP 算法并不保证总是能够收敛到正确的解,但它仍然可以提供有用的近似。
(3)应用范围广泛:BP 可应用于多种类型的图模型,包括贝叶斯网络和马尔可夫随机场。

变量消去 vs 信念传播
虽然 VE 和 BP 都是用于概率图模型上的推理方法,但它们之间存在一些关键差异。VE 更侧重于通过消元来计算边缘分布,而 BP 则更倾向于通过消息传递来更新节点的信念。BP 通常比 VE 更高效,特别是在处理大的稀疏图时。然而,BP 在有环图上的应用需要特别注意,因为它不总是能够提供精确的结果。

近似推断

近似推断(Approximate Inference)是针对那些在计算上难以处理的确切推断问题而发展起来的技术。在许多情况下,尤其是当模型变得非常复杂或数据维度非常高时,直接计算后验概率分布是不现实的。因此,研究者们开发了各种近似推断技术来解决这些问题。

MCMC采样

MCMC采样是一种从复杂的概率分布中获取样本的技术,这种方法特别适用于高维空间中的分布。MCMC方法通过构建一个马尔可夫链,使得该链的平稳分布为目标分布。这种方法不需要知道目标分布的归一化常数,只需要能够计算未归一化分布的比例即可。MCMC的一个关键优点是它能够处理高维分布,并且可以在不需要显式计算归一化常数的情况下从这些分布中采样。

MCMC算法的例子包括Metropolis-Hastings算法和Gibbs采样。Metropolis-Hastings算法允许我们在没有直接访问归一化常数的情况下从任意分布中采样。Gibbs采样则是MCMC的一种特殊情况,它通过逐个地更新变量来构造一个新的样本,这种方式在处理条件分布较为简单的模型时非常有效。
下面是Metropolis-Hastings算法的具体描述在这里插入图片描述

变分推断

变分推断是另一种近似推断方法,它通过构造一个参数化的近似分布来逼近真实的后验分布。变分推断的目标是找到一个近似分布,使得这个分布与真实的后验分布之间的KL散度达到最小。这通常被转化为一个优化问题,其中的目标是最小化KL散度或最大化证据下界(ELBO)。变分推断的一个重要优点是它可以被形式化为一个优化问题,这使得它能够在大规模数据集上高效运行,并且容易与现代优化工具相结合。

变分推断的具体过程通常包括选择一个变分族(即一个参数化的分布族),然后优化这个族内的分布以使其尽可能接近真实的后验。常见的变分族包括高斯分布、指数族分布等。此外,为了简化计算,有时会假设变分分布是各个变量相互独立的(平均场近似),尽管这可能不是最准确的近似方式。

话题模型

话题模型的目标是在大量的文档中自动发现隐含的主题结构信息。一个主题可以被理解为一组经常一起出现的词语,它们共同构成了一个概念或者一个方面的表述。话题模型大多基于数学方法进行计算,通过概率的方法来计算与主题词越相关的词,其概率值越大。

最常见的模型 - Latent Dirichlet Allocation (LDA)
LDA模型认为,每篇文档都是由多个主题构成的,而每个主题又对应着一组特定的词语。在LDA模型中,文档被视为主题的混合体,而每个主题则被视为词语的混合体。
LDA模型是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓的生成模型,是指一篇文档中的每个词都是通过“文档以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”的过程得到。LDA模型的训练过程通常是利用诸如Gibbs采样这样的MCMC方法来进行的。

示例
给定一个文档集合,LDA可以帮助找出这些文档中潜在的话题分布。例如,一个包含新闻报道的文档集可能会揭示出关于经济、政治、科技等多个主题的分布情况。LDA模型不仅可以帮助我们理解每个文档的主题分布,而且还可以帮助我们理解每个主题的词语分布,进而更好地理解和组织文档内容。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
主要介绍了概率图模型的基本概念和常见类型,以及如何利用Python实现这些模型。下面是一些笔记和代码示例。 ## 概率图模型的基本概念 概率图模型是一种用于表示和处理不确定性的图形化模型,它能够将一个复杂的联合概率分布表示为多个简单的条件概率分布的乘积形式,从而简化概率推理和模型学习的过程。概率图模型主要包括两种类型:有向图模型和无向图模型。 有向图模型(Directed Acyclic Graph, DAG)又称为贝叶斯网络(Bayesian Network, BN),它用有向边表示变量之间的因果关系,每个节点表示一个随机变量,给定父节点的条件下,每个节点的取值都可以用一个条件概率分布来描述。有向图模型可以用贝叶斯公式进行概率推理和参数学习。 无向图模型(Undirected Graphical Model, UGM)又称为马尔可夫随机场(Markov Random Field, MRF),它用无向边表示变量之间的相互作用关系,每个节点表示一个随机变量,给定邻居节点的取值,每个节点的取值都可以用一个势函数(Potential Function)来描述。无向图模型可以用和有向图模型类似的方法进行概率推理和参数学习。 ## 概率图模型的Python实现 在Python中,我们可以使用`pgmpy`库来实现概率图模型。该库提供了一个简单而强大的接口来定义和操作概率图模型,支持有向图模型和无向图模型的构建、概率推理、参数学习等功能。 ### 有向图模型 以下是一个简单的有向图模型的示例: ```python from pgmpy.models import BayesianModel model = BayesianModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`BayesianModel`是有向图模型的类,`('A', 'B')`表示A节点指向B节点,即B节点是A节点的子节点,依此类推。我们可以使用以下代码查看模型的结构: ```python print(model.edges()) # 输出:[('A', 'B'), ('B', 'D'), ('C', 'B')] ``` 接下来,我们可以为每个节点定义条件概率分布。以下是一个简单的例子: ```python from pgmpy.factors.discrete import TabularCPD cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.2, 0.8]]) cpd_c = TabularCPD(variable='C', variable_card=2, values=[[0.4, 0.6]]) cpd_b = TabularCPD(variable='B', variable_card=2, values=[[0.1, 0.9, 0.3, 0.7], [0.9, 0.1, 0.7, 0.3]], evidence=['A', 'C'], evidence_card=[2, 2]) cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.9, 0.1], [0.1, 0.9]], evidence=['B'], evidence_card=[2]) model.add_cpds(cpd_a, cpd_c, cpd_b, cpd_d) ``` 其中,`TabularCPD`是条件概率分布的类,`variable`表示当前节点的变量名,`variable_card`表示当前节点的取值个数,`values`表示条件概率分布的值。对于有父节点的节点,需要指定`evidence`和`evidence_card`参数,表示当前节点的父节点和父节点的取值个数。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import VariableElimination infer = VariableElimination(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`VariableElimination`是概率推理的类,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ### 无向图模型 以下是一个简单的无向图模型的示例: ```python from pgmpy.models import MarkovModel model = MarkovModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`MarkovModel`是无向图模型的类,与有向图模型类似,`('A', 'B')`表示A节点和B节点之间有相互作用关系。 接下来,我们可以为每个节点定义势函数。以下是一个简单的例子: ```python from pgmpy.factors.discrete import DiscreteFactor phi_a = DiscreteFactor(['A'], [2], [0.2, 0.8]) phi_c = DiscreteFactor(['C'], [2], [0.4, 0.6]) phi_b = DiscreteFactor(['A', 'C', 'B'], [2, 2, 2], [0.1, 0.9, 0.3, 0.7, 0.9, 0.1, 0.7, 0.3]) phi_d = DiscreteFactor(['B', 'D'], [2, 2], [0.9, 0.1, 0.1, 0.9]) model.add_factors(phi_a, phi_c, phi_b, phi_d) ``` 其中,`DiscreteFactor`是势函数的类,与条件概率分布类似,需要指定变量名、变量取值个数和势函数的值。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import BeliefPropagation infer = BeliefPropagation(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`BeliefPropagation`是概率推理的类,与有向图模型类似,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ## 总结 本介绍了概率图模型的基本概念和Python实现,包括有向图模型和无向图模型的构建、条件概率分布和势函数的定义、概率推理等。使用`pgmpy`库可以方便地实现概率图模型,对于概率模型的学习和应用都有很大的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值