贝叶斯网络MatlabWord文档下载推荐.docx
- 文档编号:7967922
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:12
- 大小:67.60KB
贝叶斯网络MatlabWord文档下载推荐.docx
《贝叶斯网络MatlabWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《贝叶斯网络MatlabWord文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。
为了提高运算速度,使各种推理算法能够有效应用,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
2.1节点类型
Noisy-or节点
一个Noisy-or节点就像通常的“或”门一样,但有时父节点的效果将被抑制。
受抑制的父节点i的概率用
来表示。
一个节点C,有两个父节点A和B,有如下CPD,使用F和T来表达关和开,(在BNT中是1和2)。
A
B
P(C=off)
P(C=on)
F
1.0
0.0
T
qA)
1-q(A)
q(B)
1-q(B)
q(A)q(B)
1-q(A)q(B)
Softmax节点
神经网络节点使用一个多层感知器实现了从连续父节点向离散子节点的映射。
高斯节点将连续值的节点处理成一个离散的情况
广义线性模型节点
分类/回归树节点
2.2最大似然参数估计
bnet3=learn_params(bnet2,samples);
2.3先验参数分布
tabular_CPD(bnet,i,'
prior_type'
'
dirichlet'
dirichlet_type'
unif'
);
B=1
B=2
B=3
A=1
1
A=2
BDeu'
1/6
我们将N/(q*r)放入每个格;
N是等效的样本大小,r=|A|,q=|B|.这可以按如上面方式创建:
...
'
dirichlet_weight'
10);
这里1是等效样本大小,也是先验概率的强度。
你可以使用上面面方式更改它,
3结构学习
问题:
以下两模型结构评分是否相等?
表3-1算法概要
贝叶斯模型选择算法
1.建立模型A->
B,生成样本数据
2.建立所有可能的结构:
(1)AB,
(2)B<
-A,(3)A->
B并计算先验概率
3.模型2和模型3为Markovequivalent
4.B节点使用noisyNotgate
5.正确的模型在12次后收敛
代码示例
%贝叶斯选择模型示例.
%建立模型A->
%建立所有可能的结构:
%模型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);
true_bnet.CPD{1}=tabular_CPD(true_bnet,1,[0.50.5]);
pfail=0.1;
psucc=1-pfail;
true_bnet.CPD{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,'
'
CPT'
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;
ll(i)=log_marg_lik_complete(hyp_bnet{i},ev);
hyp_bnet{i}=bayes_update_params(hyp_bnet{i},ev);
prior=normalise(prior.*exp(ll));
LL=LL+ll;
hyp_w(t+1,:
)=prior;
%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:
2),'
b-.'
3),'
g:
axis([0m01])
title('
modelposteriorvs.time'
drawnow
%检验结果
hyp_bnet2=init_hyp_bnet;
prior2=init_prior;
图3-1贝叶斯模型选择后验概率对比
BNT中的结构学习程序可以按类似参数学习的情况分成四类:
learn_struct_K2
learn_struct_mcmc
3.1Markov等效
如果两个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'
};
end
score=score_dags(data,ns,dags,'
params'
params,'
scoring_fn'
bic'
实际上不能列举N>
5的所有可能的DAGs。
3.3K2算法
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爬山法
爬山算法从状态空间中的一个指定点开始,考虑所有最接近的邻节点,然后移向得分最高的相邻节点。
当相邻节点得分没有高于当前节点时(例如到达了局部最大值。
),算法停止。
然后从空间的其它部分重新开始。
“相邻”通常定义为所有的图可以通过从当前的图添加、删除或翻转一个单独的弧得出,并服从无环的约束。
其它相邻的可能详。
3.4MCMC
使用Metropolis-Hastings(MH)的马尔可夫链蒙特卡尔算法来搜索所有的图空间。
标准的分配提案是考虑移动所有最近的按上面定义的邻节点。
这个函数可以按如下方法调用:
[sampled_graphs,accept_ratio]=learn_struct_mcmc(data,ns,'
nsamples'
500,'
burnin'
图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引擎可以执行一些特殊处理的查询。
4.1联合树推断引擎(所有精确推断引擎的根本)
engine=jtree_inf_engine(bnet);
4.2全局推理算法
最简单的推理方法是直接构建所有结点的联合分布,然后得到边缘概率。
这已在global_joint_inf_engine中实现,但它仅适用于教学和调试。
4.3近似传播引擎
likelihood_weighting_inf_engine,可以完成重要采样,并能够处理任意种类的结点。
gibbs_sampling_inf_engine,由BhaskaraMarthi写的.目前它仅能处理表格条件概率分布(tabularCPDs)。
5上市公司贝叶斯网络模型
5.1数据
研究上市公司财务指标间的关系,本文共选取了17个财务指标的240条样本数据。
17个财务指标如下表所示。
表5-1财务指标对应编号
编号
名称
X1
每股收益
X10
总资产增长率
X2
每股净资产
X11
股东权益增长率
X3
调整后净资产
X12
每股收益增长率
X4
净资产收益率
X13
流动比率
X5
股东权益比率
X14
速动比率
X6
每股未分利润
X15
应收帐款周转率
X7
主营收入增长率
X16
存货周转率
X8
主营利润增长率
X17
资产负债比
X9
主营业务利润率
5.2实验结果
样本数据分为训练样本跟测试样本。
图5-1K2算法学习结构
准确率对比:
表5-2K2学习跟朴素贝叶斯学习分类准确率对比
结构
K2
Native
准确率
54.1667%%
50%
6参考文献
[1]HowtousetheBayesNetToolbox.
[2]贝叶斯网络引论.张连文,郭海鹏.科学出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贝叶斯 网络 Matlab