第十四章:概率图模型

目录

1. 隐马尔可夫模型

2. 马尔可夫随机场

3. 条件随机场

4. 学习与推断

4.1 变量消去

4.2 信念传播

5. 近似推断

5.1 MCMC采样

5.2 变分推断

6. 话题模型

二、实验

Metropolies-Hastings算法 


1. 隐马尔可夫模型

概率模型:提供了一种描述框架,将学习任务归结于计算变量的概率分布.

在概率模型中,利用已知变量推测未知变量的分布称为“推断”(inference),

推断:基于可观测变量推测出未知变量的条件分布.

  • “生成式”模型:考虑联合分布P(Y,R,O),
  • “判别式”模型:考虑条件分布P(Y,R |O).

给定一组观测变量值,推断就是要由P(Y,R,O)或P(Y,R|O)得到条件概率分布P(Y |O).

概率模型的训练:基于训练样本来估计变量分布的参数往往相当困难.

概率图模型:一类用图来表达变量相关关系的概率模型.它以图为表示工具

“变量关系图”:用一个结点表示一个或一组随机变量,结点之间的边表示变量间的概率相关关系

概率图模型可大致分为两类:

  • 第一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网
  • 第二类是使用无向图表示变量间的相关关系,称为无向图模型或马尔可夫网

隐马尔可夫模型:结构最简单的动态贝叶斯网,主要用于时序数据建模,在语音识别、自然语言处理等领域有广泛应用.

变量可分为两组:

  • 第一组是状态变量{y_1,y_2,...y_n},其中y_i∈y表示第i时刻的系统状态.通常假定状态变量是隐藏的、不可被观测的,因此状态变量亦称隐变量
  • 第二组是观测变量{x_1,x_2,...x_n},其中x_i ∈X表示第i时刻的观测值.
图1.1 隐马尔可夫模型的图结构

上图中的箭头表示了变量间的依赖关系,在任一时刻,观测变量的取值仅依赖于状态变量

“马尔可夫链”:系统下一时刻的状态仅由当前状态决定,不依赖于以往的任何状态.

基于这种依赖关系,所有变量的联合概率分布为

P(x_1,y_1,\ldots,x_n,y_n)=P(y_1)P(x_1\mid y_1)\prod_{i=2}^nP(y_i\mid y_{i-1})P(x_i\mid y_i)

  • 状态转移概率:

a_{ij}=P(y_{t+1}=s_j\mid y_t=s_i) ,\quad1\leqslant i,j\leqslant N,

  • 输出观测概率:

b_{ij}=P(x_t=o_j\mid y_t=s_i) ,\quad1\leqslant i\leqslant N ,1\leqslant j\leqslant M

  • 初始状态概率:

\pi_i=P(y_1=s_i),\quad1\leqslant i\leqslant N

产生观测序列步骤:

  1. 设置t =1,并根据初始状态概率\pi选择初始状态y1;
  2. 根据状态yt和输出观测概率B选择观测变量取值xt;
  3. 根据状态 yt和状态转移矩阵A转移模型状态,即确定yt+1;
  4. 若t <n,设置t =t+1,并转到第(2)步,否则停止.

隐马尔可夫模型的三个基本问题:

  • 给定模型\lambda=[A,B,\pi],如何有效计算其产生观测序列x={x_1,x_2,...x_n}的概率P(x |X)?换言之,如何评估模型与观测序列之间的匹配程度?
  • 给定模型\lambda=[A,B,\pi]和观测序列x = {x_1,x_2,...x_n},如何找到与此观测序列最匹配的状态序列y = {y_1,y_2,...y_n}?换言之,如何根据观测序列推断出隐藏的模型状态?
  • 给定观测序列x = {x_1,x_2,...x_n},如何调整模型参数\lambda=[A,B,\pi]使得该序列出现的概率P(x│|\lambda)最大?换言之,如何训练模型使其能最好地描述观测数据?

2. 马尔可夫随机场

马尔可夫随机场:一种著名的无向图模型.图中每个结点表示一个或一组变量,结点之间的边表示两个变量之间的依赖关系.

马尔可夫随机场有一组势函数,亦称“因子”(factor),这是定义在变量子集上的非负实函数,主要用于定义概率分布函数.

对于图中结点的一个子集,若其中任意两结点间都有边连接,则称该结点子集为一个“”(clique).若在一个团中加入另外任何一个结点都不再形成团,则称该团为“极大团”(maximalclique);换言之,极大团就是不能被其他团所包含的团.

多个变量之间的联合概率分布基于团分解为多个因子的乘积,每个因子仅与一个团相关.

P(\mathbf{x})=\frac{1}{Z}\prod_{Q\in\mathcal{C}}\psi_Q(\mathbf{x}_Q)

都是团的话,相对复杂,在这使用极大团进行一定的简化:

P(\mathbf{x})=\frac{1}{Z^*}\prod_{Q\in\mathcal{C}^*}\psi_Q(\mathbf{x}_Q)

借助“分离”的概念得到条件独立性,

分离集:若从结点集A中的结点到B中的结点都必须经过结点集C中的结点,则称结点集A和B被结点集C分离,C称为“分离集”,如下图所示

图2.1 分离集

“全局马尔可夫性”:给定两个变量子集的分离集,则这两个变量子集条件独立.

局部马尔可夫性:给定某变量的邻接变量,则该变量条件独立于其他变量.

成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立.

图2.2 分离集的简化

 上图中的变量均为二值变量,若势函数为:

\left.\psi_{AC}(x_{A},x_{C})=\left\{\begin{array}{ll}1.5,&\mathrm{if~}x_{A}=x_{C};\\0.1,&\mathrm{otherwise} ,\end{array}\right.\right.\\\psi_{BC}(x_{B},x_{C})=\left\{\begin{array}{ll}0.2,&\mathrm{if~}x_{B}=x_{C};\\1.3,&\mathrm{otherwise} ,\end{array}\right.

该模型偏好变量A与C有相同取值(正相关),B与C有不同取值(负相关)

为了满足非负性,指数函数常被用于定义势函数,即

\psi_Q(\mathbf{x}_Q)=e^{-H_Q(\mathbf{x}_Q)}

H_Q(x_Q)是一个定义在变量x_Q上的实值函数,常见形式为

H_Q(\mathbf{x}_Q)=\sum_{u,v\in Q,u\neq v}\alpha_{uv}x_ux_v+\sum_{v\in Q}\beta_vx_v 

3. 条件随机场

条件随机场:一种判别式无向图模型

条件随机场试图对多个变量在给定观测值后的条件概率进行建模.

一个观测序列,一个与之相应的标记序列(结构变量,即其分量之间具有某种相关性),则条件随机场的目标是构建条件概率模型P(y |x).如下图所示:

图3.1 词性标注、语法分析

满足马尔可夫性:

P(y_v\mid\mathbf{x},\mathbf{y}_{V\setminus\{v\}})=P(y_v\mid\mathbf{x},\mathbf{y}_{n(v)})

则(y,x)构成一个条件随机场

理论上来说,图G可具有任意结构,只要能表示标记变量之间的条件独立性关系即可.

但在现实应用中,最常用的是“链式条件随机场”,如下图所示:

图3.2 链式条件随机场的图结构

条件概率:

P(\mathbf{y}\mid\mathbf{x})=\frac{1}{Z}\exp\left(\sum_j\sum_{i=1}^{n-1}\lambda_jt_j(y_{i+1},y_i,\mathbf{x},i)+\sum_k\sum_{i=1}^n\mu_ks_k(y_i,\mathbf{x},i)\right)

以图3.1的任务为例,采用转移特征函数:

s_k(y_{i+1},y_i\mathbf{x},i)=\left\{\begin{matrix} 1 & if,y_{i+1}=[P],y_i=[V],and ,x_i="knock"\\ 0 & otherwise \end{matrix}\right.

状态特征函数:

s_k(y_i,\mathbf{x},i)=\left\{\begin{matrix} 1 & if,y_i=[V]and x_i="knock"\\ 0 & otherwise \end{matrix}\right.

条件随机场和马尔可夫随机场均使用团上的势函数定义概率,两者在形式上没有显著区别;但条件随机场处理的是条件概率,而马尔可夫随机场处理的是联合概率.

4. 学习与推断

基于概率图模型定义的联合概率分布,我们能对目标变量的边际分布或以某些可观测变量为条件的条件分布进行推断.

边际分布:对无关变量求和或积分后得到结果,给定参数求解某个变量x的分布,就变成对联合分布中其他无关变量进行积分的过程,这称为“边际化”

参数估计或参数学习:对概率图模型,还需确定具体分布的参数,通常使用极大似然估计或最大后验概率估计求解.

但若将参数视为待推测的变量,则参数估计过程和推断十分相似,可以“吸收”到推断问题中.

将数据集分为2个不相交的集合,条件概率:

P(\mathbf{x}_{F}\mid\mathbf{x}_{E})=\frac{P(\mathbf{x}_{E},\mathbf{x}_{F})}{P(\mathbf{x}_{E})}=\frac{P(\mathbf{x}_{E},\mathbf{x}_{F})}{\sum_{\mathbf{x}_{F}}P(\mathbf{x}_{E},\mathbf{x}_{F})}

边际分布,即

P(\mathbf{x}_E)=\sum_{\mathbf{x}_F}P(\mathbf{x}_E,\mathbf{x}_F) 

推断方法分为两类:

  • 精确推断方法,希望能计算出目标变量的边际分布或条件分布的精确值;遗憾的是,一般情形下,此类算法的计算复杂度随着极大团规模的增长呈指数增长,适用范围有限.
  • 近似推断方法,希望在较低的时间复杂度下获得原问题的近似解;此类方法在现实任务中更常用.

4.1 变量消去

以下图为例:

 计算边际概率P(x5),消去变量{x_1,x_2,x_3,x_4}

\begin{aligned} P(x_{5})& =\sum_{x_{4}}\sum_{x_{3}}\sum_{x_{2}}\sum_{x_{1}}P(x_{1},x_{2},x_{3},x_{4},x_{5}) \\ &=\sum_{x_4}\sum_{x_3}\sum_{x_2}\sum_{x_1}P(x_1)P(x_2\mid x_1)P(x_3\mid x_2)P(x_4\mid x_3)P(x_5\mid x_3) \end{aligned}

采用顺序计算加法

\begin{gathered} P(x_{5}) =\sum_{x_{3}}P(x_{5}\mid x_{3})\sum_{x_{4}}P(x_{4}\mid x_{3})\sum_{x_{2}}P(x_{3}\mid x_{2})\sum_{x_{1}}P(x_{1})P(x_{2}\mid x_{1}) \\ =\sum_{x_3}P(x_5\mid x_3)\sum_{x_4}P(x_4\mid x_3)\sum_{x_2}P(x_3\mid x_2)m_{12}(x_2) ,\quad \end{gathered}

 不断执行此过程,可得:

\begin{aligned} P(x_{5})& =\sum_{x_{3}}P(x_{5}\mid x_{3})\sum_{x_{4}}P(x_{4}\mid x_{3})m_{23}(x_{3}) \\ &=\sum_{x_{3}}P(x_{5}\mid x_{3})m_{23}(x_{3})\sum_{x_{4}}P(x_{4}\mid x_{3}) \\ &=\sum_{x_{3}}P(x_{5}\mid x_{3})m_{23}(x_{3})m_{43}(x_{3}) \\ &=m_{35}(x_{5}) . \end{aligned}

最后的m35只与变量x5相关

上述方法对无向图模型也适用,

P(x_1,x_2,x_3,x_4,x_5)=\frac{1}{Z}\psi_{12}(x_1,x_2)\psi_{23}(x_2,x_3)\psi_{34}(x_3,x_4)\psi_{35}(x_3,x_5)

边际分布:

\begin{aligned} P(x_{5})& =\frac1Z\sum_{x_3}\psi_{35}(x_3,x_5)\sum_{x_4}\psi_{34}(x_3,x_4)\sum_{x_2}\psi_{23}(x_2,x_3)\sum_{x_1}\psi_{12}(x_1,x_2) \\ &=\frac1Z\sum_{x_3}\psi_{35}(x_3,x_5)\sum_{x_4}\psi_{34}(x_3,x_4)\sum_{x_2}\psi_{23}(x_2,x_3)m_{12}(x_2) \\ &\begin{array}{cc}=&\cdots\end{array} \\ &=\frac1Z m_{35}(x_{5}) .& \end{aligned}

通过利用乘法对加法的分配律,变量消去法把多个变量的积的求和问题,转化为对部分变量交替进行求积与求和的问题.简化了计算.

缺点:若需计算多个边际分布,重复使用变量消去法将会造成大量的冗余计算.

4.2 信念传播

信念传播算法:将变量消去法中的求和操作看作一个消息传递过程,较好地解决了求解多个边际分布时的重复计算问题.具体来说,变量消去法通过求和操作

m_{ij}(x_j)=\sum_{x_i}\psi(x_i,x_j)\prod_{k\in n(i)\setminus j}m_{ki}(x_i)

在信念传播算法中,一个结点仅在接收到来自其他所有结点的消息后才能向另一个结点发送消息,且结点的边际分布正比于它所接收的消息的乘积,即

P(x_i)\propto\prod_{k\in n(i)}m_{ki}(x_i)

若图结构中没有环,则信念传播算法经过两个步骤即可完成所有消息传递,进而能计算所有变量上的边际分布:

  • 指定一个根结点,从所有叶结点开始向根结点传递消息,直到根结点收到所有邻接结点的消息;
  • 从根结点开始向叶结点传递消息,直到所有叶结点均收到消息.

信念传播如下图所示:

5. 近似推断

近似推断方法相比精确推断方法,所需要的计算开销大大减少

近似推断方法大致可分为两大类:

  • 采样:通过使用随机化方法完成近似;
  • 使用确定性近似完成近似推断,典型代表为变分推断

5.1 MCMC采样

基于概率分布计算某些期望,并且还可能进一步基于这些期望做出决策.

采样法正是基于这个思路.假定我们的目标是计算函数f(x)在概率密度函数p(x)下的期望

\mathbb{E}_p[f]=\int f(x)p(x)dx

根据p(x)抽取一组样本,然后计算f(x)在这些样本上的均值:

\hat{f}=\frac{1}{N}\sum_{i=1}^Nf(x_i) 

以此来近似目标期望E[f].若样本独立,基于大数定律,这种通过大量采样的办法就能获得较高的近似精度.

采样技术:马尔可夫链蒙特卡罗方法

给定连续变量x属于X的概率密度函数,x在区间A的概率:

P(A)=\int_Ap(x)dx

计算f(x)的期望:

p(f)=\mathbb{E}_p\left[f(X)\right]=\int_xf(x)p(x)dx

上式的无偏估计:

\tilde{p}(f)=\frac{1}{N}\sum_{i=1}^Nf(\mathbf{x}_i)

 若在某个时刻马尔可夫链满足平稳条件

p(\mathbf{x}^t)T(\mathbf{x}^{t-1}\mid\mathbf{x}^t)=p(\mathbf{x}^{t-1})T(\mathbf{x}^t\mid\mathbf{x}^{t-1})

MCMC方法:

  • 先设法构造一条马尔可夫链,使其收敛至平稳分布恰为待估计参数的后验分布,
  • 然后通过这条马尔可夫链来产生符合后验分布的样本,并基于这些样本来进行估计.
  • 这里马尔可夫链转移概率的构造至关重要,不同的构造方法将产生不同的MCMC算法.

MCMC的重要代表:Metropolis-Hastings (简称MH)算法,它基于“拒绝采样”(reject sampling)来逼近平稳分布p.

若x*最终收敛到平稳状态,则有

p(\mathbf{x}^{t-1})Q(\mathbf{x}^*\mid\mathbf{x}^{t-1})A(\mathbf{x}^*\mid\mathbf{x}^{t-1})=p(\mathbf{x}^*)Q(\mathbf{x}^{t-1}\mid\mathbf{x}^*)A(\mathbf{x}^{t-1}\mid\mathbf{x}^*)

于是,为了达到平稳状态,只需将接受率设置为

A(\mathbf{x}^*\mid\mathbf{x}^{t-1})=\min\left(1,\frac{p(\mathbf{x}^*)Q(\mathbf{x}^{t-1}\mid\mathbf{x}^*)}{p(\mathbf{x}^{t-1})Q(\mathbf{x}^*\mid\mathbf{x}^{t-1})}\right)

吉布斯采样有时被视为MH算法的特例,它也使用马尔可夫链获取样本,而该马尔可夫链的平稳分布也是采样的目标分布p(x).

通过循环执行以下步骤来完成采样:

  1. 随机或以某个次序选取某变量xi;
  2. 根据x中除α外的变量的现有取值,计算条件概率p(xi|xi),其中Xi= {x_1,x_2,...,x_{i-1},x_{i+1},...,x_N} ;
  3. 根据p(xi│xi)对变量xi采样,用采样值代替原值. 

5.2 变分推断

分推断:通过使用已知简单分布来逼近需推断的复杂分布,并通过限制近似分布的类型,从而得到一种局部最优、但具有确定解的近似后验分布.

一种简洁的表示方法—盘式记法:相互独立的、由相同机制生成的多个变量被放在一个方框(盘)内,并在方框中标出类似变量重复出现的个数N;方框可以嵌套.通常用阴影标注出已知的、能观察到的变量,如图5.2.1所示:

图5.2.1 盘式记法

联合分布的概率密度函数:

p(\mathbf{x}\mid\Theta)=\prod_{i=1}^N\sum_\mathbf{z}p(x_i,\mathbf{z}\mid\Theta)

对数似然函数:

\ln p(\mathbf{x}\mid\Theta)=\sum_{i=1}^N\ln\left\{\sum_\mathbf{z}p(x_i,\mathbf{z}\mid\Theta)\right\}

进行最大化寻优:

\begin{aligned}\Theta^{t+1}&=\arg\max_{\Theta}\mathcal{Q}(\Theta;\Theta^{t})\\&=\arg\max_{\Theta}\sum_{\mathbf{z}}p(\mathbf{z}\mid\mathbf{x},\Theta^{t})\ln p(\mathbf{x},\mathbf{z}\mid\Theta)\end{aligned}

变量子集所服从的最优分布应满足:

\ln q_{j}^{*}(\mathbf{z}_{j})=\mathbb{E}_{i\neq j}\left[\ln p(\mathbf{x},\mathbf{z})\right]+\mathrm{const} ,\\q_{j}^{*}(\mathbf{z}_{j})=\frac{\exp\left(\mathbb{E}_{i\neq j}\left[\ln p\left(\mathbf{x},\mathbf{z}\right)\right]\right)}{\int\exp\left(\mathbb{E}_{i\neq j}\left[\ln p\left(\mathbf{x},\mathbf{z}\right)\right]\right)\mathrm{d}\mathbf{z}_{j}}

 在实践中使用变分法时,最重要的是考虑如何对隐变量进行拆解,以及假设各变量子集服从何种分布,

在此基础上套用结论再结合EM 算法即可进行概率图模型的推断和参数估计.

显然,若隐变量的拆解或变量子集的分布假设不当,将会导致变分法效率低、效果差.

6. 话题模型

话题模型:一族生成式有向图模型,主要用于处理离散型的数据(如文本集合),在信息检索、自然语言处理等领域有广泛应用.

典型代表:隐狄利克雷分配模型

“词”:待处理数据的基本离散单元,例如在文本处理任务中,一个词就是一个英文单词或有独立意义的中文词.

“文档”:待处理的数据对象,它由一组词组成,这些词在文档中是不计顺序的,例如一篇论文、一个网页都可看作一个文档;

“词袋”:数据对象只要能用词袋描述,就可使用话题模型.

“话题”:一个概念,具体表示为一系列相关的词,以及它们在该概念下出现的概率.

一个话题就像是一个箱子,里面装着在这个概念下出现概率较高的那些词. 如下图所示:


生成文档步骤:

  1. 根据参数为α的狄利克雷分布随机采样一个话题分布\Theta _t;
  2. 根据\Theta _t,进行话题指派,得到文档t中词n的话题zt,n;
  3. 根据指派的话题所对应的词频分布\beta _k随机采样生成词.

如下图所示:

这样生成的文档自然地以不同比例包含多个话题(步骤1),文档中的每个词来自一个话题(步骤2),而这个话题是依据话题比例产生的(步骤3).

下图描述了LDA的变量关系:

LDA模型对应的概率分布为

p(\mathbf{W},\mathbf{z},\boldsymbol{\beta},\Theta\mid\boldsymbol{\alpha},\boldsymbol{\eta})=\\\prod_{t=1}^Tp(\Theta_t\mid\boldsymbol{\alpha})\prod_{i=1}^Kp(\boldsymbol{\beta}_k\mid\boldsymbol{\eta})\left(\prod_{n=1}^NP(w_{t,n}\mid z_{t,n},\boldsymbol{\beta}_k)P(z_{t,n}\mid\Theta_t)\right)

参数的K维和N维狄利克雷分布,例如

p(\Theta_t\mid\alpha)=\frac{\Gamma(\sum_k\alpha_k)}{\prod_k\Gamma(\alpha_k)}\prod_k\Theta_{t,k}^{\alpha_k-1}

最大化对数似然:

LL(\boldsymbol{\alpha},\boldsymbol{\eta})=\sum_{t=1}^T\ln p(\boldsymbol{w}_t\mid\boldsymbol{\alpha},\boldsymbol{\eta})

文档集所对应的话题结构可以通过求解:

p(\mathbf{z},\boldsymbol{\beta},\Theta\mid\mathbf{W},\boldsymbol{\alpha},\boldsymbol{\eta})=\frac{p(\mathbf{W},\mathbf{z},\boldsymbol{\beta},\Theta\mid\boldsymbol{\alpha},\boldsymbol{\eta})}{p(\mathbf{W}\mid\boldsymbol{\alpha},\boldsymbol{\eta})}

但这个式子难以求解,因此在现实中通常采用吉布斯采样或变分法进行近似推断

二、实验

Metropolies-Hastings算法 

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# 目标分布:一维高斯分布
def target_distribution(x):
    return stats.norm.pdf(x, loc=5, scale=1)

# 转移核函数:对称随机游走
def transition_kernel(x):
    return stats.norm.rvs(loc=x, scale=1)

# Metropolis-Hastings算法
def metropolis_hastings(target_dist, trans_kernel, n_samples):
    samples = []
    current_state = 0  # 初始状态
    for _ in range(n_samples):
        candidate_state = trans_kernel(current_state)  # 从转移核函数中抽取候选状态
        acceptance_prob = min(1, target_dist(candidate_state) / target_dist(current_state))  # 计算接受概率
        if np.random.rand() < acceptance_prob:  # 接受候选状态
            current_state = candidate_state
        samples.append(current_state)
    return samples

# 抽样
samples = metropolis_hastings(target_distribution, transition_kernel, n_samples=10000)

# 绘制样本分布图像
plt.figure(figsize=(10, 6))
x = np.linspace(0, 10, 1000)
plt.plot(x, target_distribution(x), label='Target Distribution', color='blue')
plt.hist(samples, bins=50, density=True, label='Sample Distribution', color='skyblue', alpha=0.7)
plt.title('Metropolis-Hastings Sampling: Gaussian Distribution')
plt.xlabel('x')
plt.ylabel('Density')
plt.legend()
plt.show()

运行结果: 

上述代码实现了一个简单的Metropolis-Hastings算法,并绘制了样本分布图像。我们定义了目标分布为一维高斯分布,转移核函数为对称随机游走。然后,通过Metropolis-Hastings算法进行抽样,并绘制出样本分布图像。 

Statistical learning refers to a set of tools for modeling and understanding complex datasets. It is a recently developed area in statistics and blends with parallel developments in computer science and, in particular, machine learning. The field encompasses many methods such as the lasso and sparse regression, classification and regression trees, and boosting and support vector machines. With the explosion of “Big Data” problems, statistical learning has be- come a very hot field in many scientific areas as well as marketing, finance, and other business disciplines. People with statistical learning skills are in high demand. One of the first books in this area—The Elements of Statistical Learning (ESL) (Hastie, Tibshirani, and Friedman)—was published in 2001, with a second edition in 2009. ESL has become a popular text not only in statis- tics but also in related fields. One of the reasons for ESL’s popularity is its relatively accessible style. But ESL is intended for individuals with ad- vanced training in the mathematical sciences. An Introduction to Statistical Learning (ISL) arose from the perceived need for a broader and less tech- nical treatment of these topics. In this new book, we cover many of the same topics as ESL, but we concentrate more on the applications of the methods and less on the mathematical details. We have created labs illus- trating how to implement each of the statistical learning methods using the popular statistical software package R . These labs provide the reader with valuable hands-on experience.
本章主要介绍了概率图模型的基本概念和常见类型,以及如何利用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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值