贝叶斯网络.docx

上传人:b****7 文档编号:23440152 上传时间:2023-05-17 格式:DOCX 页数:15 大小:139.35KB
下载 相关 举报
贝叶斯网络.docx_第1页
第1页 / 共15页
贝叶斯网络.docx_第2页
第2页 / 共15页
贝叶斯网络.docx_第3页
第3页 / 共15页
贝叶斯网络.docx_第4页
第4页 / 共15页
贝叶斯网络.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

贝叶斯网络.docx

《贝叶斯网络.docx》由会员分享,可在线阅读,更多相关《贝叶斯网络.docx(15页珍藏版)》请在冰豆网上搜索。

贝叶斯网络.docx

贝叶斯网络

--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--

 

贝叶斯网络Matlab(总12页)

Matlab贝叶斯网络建模

1FullBNT简介

基于Matlab的贝叶斯网络工具箱BNT是kevin基于matlab语言开发的关于贝叶斯网络学习的开源软件包,提供了许多贝叶斯网络学习的底层基础函数库,支持多种类型的节点(概率分布)、精确推理和近似推理、参数学习及结构学习、静态模型和动态模型。

贝叶斯网络表示

BNT中使用矩阵方式表示贝叶斯网络,即若节点i到j有一条弧,则对应矩阵中

值为1,否则为0。

结构学习算法函数

BNT中提供了较为丰富的结构学习函数,都有:

1.学习树扩展贝叶斯网络结构的

算法

.

2.数据完整条件下学习一般贝叶斯网络结构学习算法

表1-1数据完整条件下贝叶斯结构算法

算法名称

调用函数

K2算法

learn_struct_k2()

贪婪搜索GS(greedysearch)算法

earn_struct_gs()

爬山HC(hillclimbing)算法

learn_struct_hc()

……

……

3.缺失数据条件下学习一般贝叶斯网络结构学习算法

表1-2缺失数据条件下贝叶斯结构算法

算法名称

调用函数

最大期望EM(expectationmaximization)算法

learn_struct_EM()

MCMC(MarkovChainMonteCarlo)

learn_struct_mcmc()

……

……

参数学习算法函数

1.BNT中也提供了丰富的参数学习函数,都有:

2.完整数据时,学习参数的方法主要有两种:

最大似然估计learn_params()和贝叶斯方法bayes_update_params();

3.数据缺失时,如果已知网络拓扑结构,用EM算法来计算参数,learn_params_em()。

推理机制及推理引擎

为了提高运算速度,使各种推理算法能够有效应用,BNT工具箱采用了引擎机制,不同的引擎根据不同的算法来完成模型转换、细化和求解。

这个推理过程如下:

BNT中提供了多种推理引擎,都有:

表1-3BNT推理引擎

算法名称

调用函数

联合树推理引擎

jtree_inf_engine()

全局联合树推理引擎

global_joint_inf_engine()

信念传播推理引擎

belprop_inf_engine()

变量消元推理引擎

var_elim_inf_engine()

采样传播引擎

gibbs_sampling_inf_engine

2参数学习

在BNT中,参数评估程序可以分为4类。

分类依据是否目标是通过参数或仅仅一个点的估计来计算贝叶斯全部的后验概率,是否全部的节点是可观察的或者存在数据/隐含变量(局部可观察)。

Fullobs

Partialobs

Point

learn_params

learn_params_em

Bayes

Bayes_update_params

notyetsupported

节点类型

Noisy-or节点

一个Noisy-or节点就像通常的“或”门一样,但有时父节点的效果将被抑制。

受抑制的父节点i的概率用

来表示。

一个节点C,有两个父节点A和B,有如下CPD,使用F和T来表达关和开,(在BNT中是1和2)。

A

B

P(C=off)

P(C=on)

F

F

T

F

qA)

1-q(A)

F

T

q(B)

1-q(B)

T

T

q(A)q(B)

1-q(A)q(B)

Softmax节点

神经网络节点使用一个多层感知器实现了从连续父节点向离散子节点的映射。

高斯节点将连续值的节点处理成一个离散的情况

广义线性模型节点

分类/回归树节点

最大似然参数估计

bnet3=learn_params(bnet2,samples);

先验参数分布

tabular_CPD(bnet,i,'prior_type','dirichlet','dirichlet_type','unif');

B=1

B=2

B=3

A=1

1

1

1

A=2

1

1

1

tabular_CPD(bnet,i,'prior_type','dirichlet','dirichlet_type','BDeu');

B=1

B=2

B=3

A=1

1/6

1/6

1/6

A=2

1/6

1/6

1/6

我们将N/(q*r)放入每个格;N是等效的样本大小,r=|A|,q=|B|.这可以按如上面方式创建:

tabular_CPD(bnet,i,'prior_type','dirichlet','dirichlet_type',...

'BDeu','dirichlet_weight',10);

这里1是等效样本大小,也是先验概率的强度。

你可以使用上面面方式更改它,

3结构学习

问题:

以下两模型结构评分是否相等?

表3-1算法概要

贝叶斯模型选择算法

1.建立模型A->B,生成样本数据

2.建立所有可能的结构:

(1)AB,

(2)B<-A,(3)A->B并计算先验概率

3.模型2和模型3为Markovequivalent

节点使用noisyNotgate

5.正确的模型在12次后收敛

代码示例

%贝叶斯选择模型示例.

%建立模型A->B,生成样本数据

%建立所有可能的结构:

(1)AB,

(2)B<-A,(3)A->B并计算先验概率

%模型2和模型3为Markovequivalent

%B节点使用noisyNotgate

%正确的模型在12次后收敛

%groundtruth

N=2;

dag=zeros(N);

A=1;B=2;

dag(A,B)=1;

ntrials=25;

ns=2*ones(1,N);

true_bnet=mk_bnet(dag,ns);

{1}=tabular_CPD(true_bnet,1,[]);

pfail=;

psucc=1-pfail;

{2}=tabular_CPD(true_bnet,2,[pfailpsucc;psuccpfail]);

%NOTgate

G=mk_all_dags(N);

nhyp=length(G);

hyp_bnet=cell(1,nhyp);

forh=1:

nhyp

hyp_bnet{h}=mk_bnet(G{h},ns);

fori=1:

N

fam=family(G{h},i);

hyp_bnet{h}.CPD{i}=tabular_CPD(hyp_bnet{h},i,'prior_type','dirichlet',...

'CPT','unif');

end

end

%结构先验,假设为均匀分布

prior=normalise(ones(1,nhyp));

%保存结果并初始化训练结构

init_hyp_bnet=hyp_bnet;

init_prior=prior;

rand('state',0);

hyp_w=zeros(ntrials+1,nhyp);

hyp_w(1,:

)=prior(:

)';

data=zeros(N,ntrials);

%逐步计算后验概率

LL=zeros(1,nhyp);

ll=zeros(1,nhyp);

fort=1:

ntrials

ev=cell2num(sample_bnet(true_bnet));

data(:

t)=ev;

fori=1:

nhyp

ll(i)=log_marg_lik_complete(hyp_bnet{i},ev);

hyp_bnet{i}=bayes_update_params(hyp_bnet{i},ev);

end

prior=normalise(prior.*exp(ll));

LL=LL+ll;

hyp_w(t+1,:

)=prior;

end

%Plot,模型后验概率

%Red=model1(noarcs),blue/green=models2/3(1arc)

%Blue=model2(2->1)

%Green=model3(1->2,"groundtruth")

if1

figure;

m=size(hyp_w,1);

h=plot(1:

m,hyp_w(:

1),'r-',1:

m,hyp_w(:

2),'b-.',1:

m,hyp_w(:

3),'g:

');

axis([0m01])

title('modelposteriorvs.time')

drawnow

end

%检验结果

hyp_bnet2=init_hyp_bnet;

prior2=init_prior;

图3-1贝叶斯模型选择后验概率对比

BNT中的结构学习程序可以按类似参数学习的情况分成四类:

Fullobs

Partialobs

Point

learn_struct_K2

notyetsupported

Bayes

learn_struct_mcmc

notyetsupported

Markov等效

如果两个DAGs编码同样的条件独立,它们被叫做Markov等效。

所有DAGs的集合可以被分割成Markov等效类。

同一类内的线图可以有方向,它们弧的颠倒不会改变任何CI关系。

每一类都可以用一个PDAG(partiallydirectedacyclicgraph,局部有向非循环图)这种图被称为本质图或方向图。

这个详细说明哪个边必须在某一个方位上被定向,哪个可能被颠倒。

3.2穷举搜索

结构学习的强有力手段是列举DAGs的所有可能性,并对它们一一打分。

这为其它算法的比较提供了一个“黄金标准”。

我们按如下做:

dags=mk_all_dags(N);

score=score_dags(data,ns,dags);

默认的情况下,我们使用贝叶斯打分规则,并假定CPDs是用带有BDeu的先验表表示的。

如果想是用一致的先验值,我们可以通过如下方法覆盖这些默认值。

params=cell(1,N);

fori=1:

N

params{i}={'prior','unif'};

end

score=score_dags(data,ns,dags,'params',params,'scoring_fn','bic');

实际上不能列举N>5的所有可能的DAGs。

K2算法

K2算法(CooperandHerskovits,1992)是一种按如下方式工作的贪婪搜索算法。

每一个起始点没有父节点。

然后增加结果结构打分最高时的父节点。

当单独添加父节点再不能提高分数时,停止添加父节点。

当我们使用固定的顺序时,我们不需要做循环检查,也不需要为每个节点单独选择父节点。

BNT推广了这点允许使用任何种类的CPD,无论贝叶斯打分规则还是BIC,另外,你可以对每一个节点指定一个任意的父节点数量的上限。

order=[CSRW];

max_fan_in=2;

dag2=learn_struct_K2(data,ns,order,'max_fan_in',max_fan_in);

3.3爬山法

爬山算法从状态空间中的一个指定点开始,考虑所有最接近的邻节点,然后移向得分最高的相邻节点。

当相邻节点得分没有高于当前节点时(例如到达了局部最大值。

),算法停止。

然后从空间的其它部分重新开始。

“相邻”通常定义为所有的图可以通过从当前的图添加、删除或翻转一个单独的弧得出,并服从无环的约束。

其它相邻的可能详。

learn_struct_hc()

3.4MCMC

使用Metropolis-Hastings(MH)的马尔可夫链蒙特卡尔算法来搜索所有的图空间。

标准的分配提案是考虑移动所有最近的按上面定义的邻节点。

这个函数可以按如下方法调用:

[sampled_graphs,accept_ratio]=learn_struct_mcmc(data,ns,'nsamples',500,'burnin',10);

图3-2精确后验概率和MCMC后验概率对比

图3-3MCMC接受率

3.5SEM算法

计算贝叶斯打分时,有部分是计算具有挑战性的观测,因为参数学习的后验概率变成了多峰的状态(这是由于隐含节点导致了一个混合的分布)。

因此需要使用逼近算法,如BIC。

不幸的是搜索算法仍然是代价高昂的,因为我们需要在每一步运行EM算法来计算MLE

值,它需要对每一个模型进行计算打分。

一个变换的方法是在每步进行局域搜索来替代第M步的EM,当数据是“添满”状态时这种方法非常有效。

——以上被称为结构上的EM算法(Friedman1997)它可以通过BIC打分收敛的局部最大值来证明。

4推断引擎

创立好一个贝叶斯网络,我们现在可以用它来进行推断。

贝叶斯网络中有许多不同的算法来作为推断的的工具,在速度、复杂性、普遍性和精确性上有不同的表现。

BNT因此提供了多种多样的不同的推断引擎。

推理引擎是一个包含了bnet(Bayesiannet)支持enter_evidence和marginal_nodes方法的对象。

引擎设计者把bnet作为一个自变量,并且可以执行一些特殊处理的模型。

当调用enter_evidence,引擎可以处理一些经过特殊处理的证据。

最后,当调用,marginal_nodes引擎可以执行一些特殊处理的查询。

联合树推断引擎(所有精确推断引擎的根本)

engine=jtree_inf_engine(bnet);

全局推理算法

最简单的推理方法是直接构建所有结点的联合分布,然后得到边缘概率。

这已在global_joint_inf_engine中实现,但它仅适用于教学和调试。

近似传播引擎

likelihood_weighting_inf_engine,可以完成重要采样,并能够处理任意种类的结点。

gibbs_sampling_inf_engine,由BhaskaraMarthi写的.目前它仅能处理表格条件概率分布(tabularCPDs)。

5上市公司贝叶斯网络模型

数据

研究上市公司财务指标间的关系,本文共选取了17个财务指标的240条样本数据。

17个财务指标如下表所示。

表5-1财务指标对应编号

编号

名称

编号

名称

X1

每股收益

X10

总资产增长率

X2

每股净资产

X11

股东权益增长率

X3

调整后净资产

X12

每股收益增长率

X4

净资产收益率

X13

流动比率

X5

股东权益比率

X14

速动比率

X6

每股未分利润

X15

应收帐款周转率

X7

主营收入增长率

X16

存货周转率

X8

主营利润增长率

X17

资产负债比

X9

主营业务利润率

实验结果

样本数据分为训练样本跟测试样本。

图5-1K2算法学习结构

准确率对比:

表5-2K2学习跟朴素贝叶斯学习分类准确率对比

结构

K2

Native

准确率

%%

50%

 

6参考文献

[1]HowtousetheBayesNetToolbox.贝叶斯网络引论.张连文,郭海鹏.科学出版社.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1