第二周扩展:贝叶斯网络

一、半朴素贝叶斯分类器

1.去掉了朴素贝叶斯属性条件独立性的假设
2.适当考虑一部分属性间的相互依赖信息,从而既不需进行完全联合概率计算,又不至于彻底忽略属性间的强依赖关系。--------独依赖估计

二、贝叶斯网介绍

贝叶斯网络(Bayesian network),又称信念网络(Belief Network),或有向无环图模型(directedacyclic graphical model),是一种概率图模型是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓朴结构是一个有向无环图(DAG)。

“有环的话,谎言传到最后自己都相信了”

贝叶斯网络的有向无环图中的节点表示随机变量,它们可以是可观察到的变量,或隐变量、未知参数等。认为有因果关系(或非条件独立)的变量或命题则用箭头来连接。若两个节点间以一个单箭头连接在一起,表示其中一个节点是“因(parents)”,另一个是“果(children)”,两节点就会产生一个条件概率值。
连接两个节点的箭头代表此两个随机变量是具有因果关系,或非条件独立。
假设节点E直接影响到节点H,即E→H,则用从E指向H的箭头建立结点E到结点H的有向弧(E,H),权值(即连接强度)用条件概率P(H|E)来表示:
在这里插入图片描述

把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向图中,就形成了贝叶斯网络。
下图是一个简单的贝叶斯网络:
在这里插入图片描述
因为a导致b,a和b导致c,所以有联合概率为:在这里插入图片描述

三、贝叶斯网络的三种结构形式

D-分离:用来判断变量是否条件独立的图形化方法。

形式一:head-to-head在这里插入图片描述
c未知的条件下,a、b被阻断(blocked),是独立的,称之为head-to-head条件独立。
形式二:tail-to-tail
在这里插入图片描述
c给定的条件下,a,b被阻断(blocked),是独立的,称之为tail-to-tail条件独立
形式三:head-to-head
在这里插入图片描述
形式四:马尔科夫链
当前状态只跟上一状态有关,跟上上或上上之前的状态无关。这种顺次演变的过程,叫做马尔科夫链(Markov chain)。在这里插入图片描述
接着,将上述结点推广到结点集,则是:对于任意的结点集A,B,C,考察所有通过A中任意结点到B中任意结点的路径,若要求A,B条件独立,则需要所有的路径都被阻断(blocked),即满足下列两个前提之一:

A和B的“head-to-tail型”和“tail-to-tail型”路径都通过C;
A和B的“head-to-head型”路径不通过C以及C的子孙;

四、贝叶斯网络实例

在这里插入图片描述
在这里插入图片描述
通俗来讲,所谓因子图就是对函数进行因子分解得到的一种概率图。一般内含两种节点,变量节点和函数节点。我们知道,一个全局函数通过因式分解能够分解为多个局部函数的乘积,这些局部函数和对应的变量关系就体现在因子图上。举个例子,现在有一个全局函数,其因式分解方程为:
在这里插入图片描述
其中fA,fB,fC,fD,fE为各函数,表示变量之间的关系,可以是条件概率也可以是其他关系(如马尔可夫随机场Markov Random Fields中的势函数)。

由上述例子总结出由贝叶斯网络构造因子图的方法:

  • 贝叶斯网络中的一个因子对应因子图中的一个结点
  • 贝叶斯网络中的每一个变量在因子图上对应边或者半边
  • 结点g和边x相连当且仅当变量x出现在因子g中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贝叶斯网络(Bayesian Network)是一种用于建模和推断概率关系的图模型。在Matlab中,可以使用Bayesian Network Toolbox来构建和分析贝叶斯网络。 首先,确保你已经安装了Bayesian Network Toolbox。然后,你可以按照以下步骤在Matlab中创建和操作贝叶斯网络: 1. 创建贝叶斯网络对象: ```matlab dag = zeros(n); % n是网络节点的数量 names = {'Node1', 'Node2', 'Node3', ...}; % 节点的名称 bnet = mk_bnet(dag, [2 2 2 ...], 'names', names); % 创建贝叶斯网络对象 ``` 2. 定义节点之间的条件概率表: ```matlab bnet.CPD{1} = tabular_CPD(bnet, 1, [0.6 0.4]); % 第一个节点的条件概率表 bnet.CPD{2} = tabular_CPD(bnet, 2, [0.2 0.8]); % 第二个节点的条件概率表 ... ``` 3. 绘制贝叶斯网络结构: ```matlab draw_layout(bnet.dag); % 绘制节点之间的连接关系 draw_graph(bnet.dag); % 绘制完整的贝叶斯网络结构 ``` 4. 进行推断和分析: ```matlab engine = jtree_inf_engine(bnet); % 创建推断引擎 evidence = cell(1, n); % 设置证据变量 evidence{3} = 1; % 第三个节点的取值为1 [engine, loglik] = enter_evidence(engine, evidence); % 运行推断并计算对数似然 marg = marginal_nodes(engine, 4); % 计算第四个节点的边缘概率 ``` 这只是Matlab中使用贝叶斯网络的基本步骤,你可以根据具体的问题和需求进行进一步的扩展和应用。更多详细的用法和示例可以参考Matlab官方文档和Bayesian Network Toolbox的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值