如何使用贝叶斯网络工具箱
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何使用贝叶斯网络工具箱
2004-1-7版
翻译:By 斑斑(QQ:23920620)
联系方式:banban23920620@
安装
安装Matlab源码
安装C源码
有用的Matlab提示
创建你的第一个贝叶斯网络
手工创建一个模型
从一个文件加载一个模型
使用GUI创建一个模型
推断
处理边缘分布
处理联合分布
虚拟证据
最或然率解释
条件概率分布
列表(多项式)节点
Noisy-or节点
其它(噪音)确定性节点
Softmax(多项式 分对数)节点
神经网络节点
根节点
高斯节点
广义线性模型节点
分类 / 回归树节点
其它连续分布
CPD类型摘要
模型举例
高斯混合模型
PCA、ICA等
专家系统的混合
专家系统的分等级混合
QMR
条件高斯模型
其它混合模型
参数学习
从一个文件里加载数据
从完整的数据中进行最大似然参数估计
先验参数
从完整的数据中(连续)更新贝叶斯参数
数据缺失情况下的最大似然参数估计(EM算法) 参数类型
结构学习
穷举搜索
K2算法
爬山算法
MCMC
主动学习
结构上的EM算法
肉眼观察学习好的图形结构
基于约束的方法
推断函数
联合树
消元法
全局推断方法
快速打分
置信传播
采样(蒙特卡洛法)
推断函数摘要
影响图 / 制定决策
DBNs、HMMs、Kalman滤波器等等
安装
安装Matlab代码
1.下载FullBNT.zip文件。
2.解压文件。
3.编辑"FullBNT/BNT/add_BNT_to_path.m"让它包含正确的工作路径。
4.BNT_HOME = 'FullBNT的工作路径';
5.打开Matlab。
6.运行BNT需要Matlab版本在V5.2以上。
7.转到BNT的文件夹例如在windows下,键入
8.>> cd C:\kpmurphy\matlab\FullBNT\BNT
9.键入"add_BNT_to_path",执行这个命令。添加路径。添加所有的文件夹在Matlab的路
径下。
10.键入"test_BNT",看看运行是否正常,这时可能产生一些数字和一些警告信息。(你可
以忽视它)但是没有错误信息。
11.仍有问题?你是否编辑了文件?仔细检查上面的步骤。
创建你的第一个贝叶斯网络
为了定义一个贝叶斯网络,你必须指定它的图形结构和参数。我们用一个简单的例子依次看一下它们。(根据Russell and Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall, 1995, p454改编)
图形结构
设想如下网络
我们创建一个相邻矩阵来指定这个有向无环图
N = 4;
dag = zeros(N,N);
C = 1; S = 2; R = 3; W = 4;
dag(C,[R S]) = 1;
dag(R,W) = 1;
dag(S,W)=1;
我们给节点按照如下编号:Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.在拓扑次序中,节点是必须被编号的,也就是说:父节点要在子节点前。对于一个更复杂的图来说,这有点麻烦:我们将在下面(以后)看一看如何避免这个。*注:在原文中“下面”是使用
的超链接,因此,这里的下面并不一定等同目前的上下文关系。后面的文中也是如此,为方便区别,我将把非上下文关系的“下面”翻译为“以后”或“后面”。
在Matlab6中,你可以使用逻辑数组来代替双重数组,这样可以缩小四倍。
dag = false(N,N);
dag(C,[R S]) = true;
..
然而,一些图的功能(比如 无环的)不支持逻辑数组
你可以使用后面讨论的方法来观察结果图形结构。
关于GUIs的详细内容,点击这里。
创建贝叶斯网络的框架
除了指定图形结构,我们必须指定每个节点的大小和类型。如果一个节点是离散的,它的大小就是该节点可能采取的数值;如果一个节点是连续的,它就是一个矢量,它的大小就是矢量的长度。在这个例子中,我们假定所有的节点是离散的和二进制的。
discrete_nodes = 1:N;
node_sizes = 2*ones(1,N);
如果节点不是二进制的,我们可以这样键入。
node_sizes = [4 2 3 5];
这意味Cloudy有四种可能的值,Sprinkler有两种可能的值等等。
注意,这些都是基数而不是序数。他们不能用任何方式排序,如“低”“中”“高”
现在,我们准备建立贝叶斯网络:
bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
默认情况下,所有的节点都被假定为离散的,因此我们可以只写成
bnet = mk_bnet(dag, node_sizes);
你也可以指定那些节点是可以被观察的。如果你不知道或者预先没有确定,那么就使用空的列表。
onodes = [];
bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);