机器学习 --- 概率图 - 表示 - 无向图

马尔可夫网络/马尔可夫随机场

  • 概述
    • 我们已经知道,有向图模型,又称作贝叶斯网络,但在有些情况下,强制对某些结点之间的边增加方向是不合适的。使用没有方向的无向边,形成了无向图模型(Undirected Graphical Model,UGM), 又被称为马尔可夫随机场或者马尔可夫网络(Markov Random Field, MRF or Markov network)。
    • 马尔可夫随机场:马尔科夫随机场是具有马尔科夫特性的随机拿种地打比方,如果任何一块地里种的庄稼的种类仅仅与它邻近的地里种的庄稼的种类有关,与其它地方的庄稼的种类无关,那么这些地里种的庄稼的集合,就是一个马尔可夫随机场。
  • 特点
    • 一方面它可以表示贝叶斯网络无法表示的一些依赖关系(依赖相邻的关系),如循环依赖;
    • 另一方面,它不能表示贝叶斯网络能够表示的某些关系,如推导关系。
  • 条件独立性质
    • 概述
      • 为了判定由图定义的概率分布是否满足这个性质,我们考虑连接集合 A 的结点和集合 B 的结点的所有可能路径。如果所有这些路径都通过了集合 C 中的一个或多个结点,那么所有这样的路径都被“阻隔”,因此条件独立性质成立。
    • 分类
      • 成对马尔可夫性(最大团的由来)
        • 设u和v是无向图G中任意两个没有边连接的节点,节点u和v分别对应随机变量Yu和Yv。其他所有节点为O,对应的随机变量是Yo。成对马尔可夫性是指给定随机变量组Yo的条件下随机变量Yu和Yv是条件独立的。
      • 局部马尔可夫性(马尔科夫毯)
        • 设v∈V是无向图G中任意一个节点,W是与v有边连接的所有节点,O是v、W以外的其他所有节点。v表示随机变量是Yv,W表示的随机变量组是YW,O表示的随机变量组是Yo。局部马尔可夫性是指在给定随机变量组YW的条件下随机变量Yv与随机变量组Yo是独立的
        • 马尔科夫毯
          • 对于一个无向图,结点 x i 的马尔科夫毯由相邻结点的集合组成。它的性质为:以图中所有剩余变量为条件, x i 的条件概率分布只依赖于马尔科夫毯中的变量。即结点只条件依赖于相邻结点,而条件独立于任何其他的结点。
      • 全局马尔可夫性
        • 设节点集合A,B是在无向图G中被节点集合C分开的任意节点集合。节点集合A,B和C所对应的随机变量组分别是YA,YB,YC。全局马尔可夫性是指给定随机变量组YC条件下随机变量组YA和YB是条件独立的
  • 应用
    • 图像去噪
      • 节点势函数
        • 物理含义:去噪前和去噪后,两个值接近相等
      • 边势函数
        • 物理含义:去噪后相邻两个点尽可能相等
    • 物体识别(图像分割)
    • 去模糊
    • 三维重建

条件随机场

  • 概述
    • 设X=(X1,X2…Xn)和Y=(Y1,Y2…Ym)都是联合随机变量,若随机变量Y构成一个无向图 G=(V,E)表示的马尔可夫随机场(MRF),则条件概率分布P(Y|X)称为条件随机场(Conditional Random Field, 简称CRF
  • 定义
    • 条件随机场
      • 设X与Y是随机变量,P(Y∣X) 是在给定X的条件下Y的条件概率分布。
  • 形式
    • 条件随机场的简化形式
    • 条件随机场的矩阵形式
  • 算法
    • 条件随机场的概率计算问题
      • 前向-后向算法
        • 递推公式
    • 条件随机场的预测算法
      • 拟牛顿法的BFGS算法
    • 条件随机场的学习算法
      • 维特比算法
  • CRF与HMM的比较
    • 每一个HMM模型都等价于某个CRF
    • 但是,CRF要比HMM更加强大
      • CRF可以定义数量更多,种类更丰富的特征函数。
      • CRF可以使用任意的权重将对数HMM模型看做CRF时,特征函数的权重由于是log形式的概率,所以都是小于等于0的,而且概率还要满足相应的限制。
      • 不仅考虑了当前时刻观测状态的信息,也考虑了上一时刻的隐藏状态信息,因此,在一些带有时序关系的场合,条件随机场的效果要更好一点

线性链条件随机场

  • 概述
    • 线性链条件随机场:设X = ( X 1 , X 2 , ⋯ , X n ),Y = ( Y 1 , Y 2 , ⋯ , Y n ) 均为线性链表示的随机变量序列,若在给定随机变量序列X的条件下,随机变量序列Y 的条件概率分布P ( Y ∣ X ) 构成条件随机场。则称P ( Y ∣ X ) 为线性链条件随机场,在标注问题中,X表示输入观测序列,Y表示对应的输出标记序列或状态序列。
  • 词性标注问题
    • 问题
      • 非常简单的,就是给一个句子中的每个单词注明词性。
    • 特征函数
      • 输入
        • 句子s(就是我们要标注词性的句子)
        • i,用来表示句子s中第i个单词
        • l_i,表示要评分的标注序列给第i个单词标注的词性
        • l_i-1,表示要评分的标注序列给第i-1个单词标注的词性
      • 输出
        • 0表示要评分的标注序列不符合这个特征
        • 1表示要评分的标注序列符合这个特征
    • 从特征函数到概率(Softmax?)
      • 定义好一组特征函数后,我们要给每个特征函数f_j赋予一个权重λ_j。现在,只要有一个句子s,有一个标注序列l,我们就可以利用前面定义的特征函数集来对l评分。
  • CRF与逻辑回归的比较
    • 事实上,条件随机场是逻辑回归的序列化版本。
    • 逻辑回归是用于分类的对数线性模型
    • 条件随机场是用于序列化标注的对数线性模型

因子图

  • 概述
    • wikipedia上是这样定义因子图的:将一个具有多变量的全局函数因子分解,得到几个局部函数的乘积,以此为基础得到的一个双向图叫做因子图(Factor Graph)。
  • 概念
    • 因子图包含因子节点和变量节点,因子节点和变量节点之间有无向边相连。
    • 定义在因子图上的联合概率密度可以表示为各因子的联乘积。
  • 特点
    • 既可表示贝叶斯网络,也可表示马尔可夫随机场
  • 算法
    • sum-product:利用消息传递的观念计算概率
      • 特点
        • 如果因子图是无环的,则一定可以准确的求出任意一个变量的边缘分布,如果是有环的,则无法用sum-product算法准确求出来边缘分布。
      • 优化
        • 删除贝叶斯网络中的若干条边,使得它不含有无向环
          • 具体变换的过程为最大权生成树算法MSWT,通过此算法,这课树的近似联合概率P’(x)和原贝叶斯网络的联合概率P(x)的相对熵最小。
        • 重新构造没有环的贝叶斯网络
        • 选择loopy belief propagation算法(你可以简单理解为sum-product 算法的递归版本),此算法一般选择环中的某个消息,随机赋个初值,然后用sum-product算法,迭代下去,因为有环,一定会到达刚才赋初值的那个消息,然后更新那个消息,继续迭代,直到没有消息再改变为止。唯一的缺点是不确保收敛,当然,此算法在绝大多数情况下是收敛的。
    • max-product 算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值