1.结构学习的定义
即寻找对数据拟合最好的贝叶斯网络结构。
例如:独立抛掷两枚硬币 X 与 Y,共20次。观察到:3次正面/正面,6次正面/反面,5次反面/正面,6次反面/反面。用贝叶斯公式计算,可得到:
P ( X = 正面 ) = 0.45;
P ( Y = 正面 | X = 正面 ) = 1/3;
P ( Y = 正面 | X = 反面 ) = 5/11
由 Y 的条件概率可以计算得到它的边缘概率为
P ( Y = 正面 ) = P ( Y = 正面 | X = 正面 )
+ P ( Y = 正面 | X = 反面 )
= 1/3 + 5/11 = 26/33 (约等于0.79)
而如果按照 Y 是独立变量来计算的话,
P ( Y = 正面 ) = 8/20 = 0.4
为了拟合20次实验的数据,算法会在 X 和 Y 之间添加一个边,使得学习得到的贝叶斯网结构中 X 和 Y 存在依赖关系。但是,硬币抛掷是独立事件,X 和 Y 之间不应该相关。因此,学习目标为包含尽量少的边,又能较好拟合数据的结构模型。
2.三种无验知识的结构学习方法
a) 基于约束的结构学习。
通过对数据中的条件依赖或独立关系进行检验,找到解释最好的网络结构,具有规则简单、易于实现且学习效果相对较好,其时间复杂度不会随着网络结构中节点数目的增加而上升。通过条件独立检验来确定边的存在与否,从而确定贝叶斯网路的框架。然后根据独立检验中产生的分割集确定边的方向,从而得到贝叶斯网络结构模型。
基于约束的学习方法之一就是通过卡方统计量做假设检验,通过样本落入的区域来确定是否拒绝独立性假设,若样本统计量掉落在拒绝域内,则拒绝独立性,否则不拒绝。实施步骤如下:
1.建立假设;
2.构造的卡方统计值,给出拒绝域;
3.选择显著性水平;
4.计算统计量,并通过比较确定是否接受原假设。
通常,显著性水平 α 的值域一般取作[0.0001,0.05],其意义是衡量了拒绝原假设的正确性为 1 - α。
下图是一个利用卡方检验分析事件A:生男生女和事件B:白天晚上之间是否存在关系的例子。

b) 基于得分的结构学习。
基于得分的方法把结构学习问题作为一个优化问题来解决。定义贝叶斯网的统计得分,然后借助启发式搜索技术找到最高分的结构。
定义一个得分函数,根据训练数据对每个候选结构打分,然后搜索得到一个得分高的结构。常用的得分函数有:贝叶斯得分、CH评分标准、BIC评分标准、MDL评分标准、AIC评分标准、HVL评分标准和CVL评分标准等。
常用的搜索算法是启发式局部搜索算法,这种方法从给定的初始网络结构 ( 可以是空网络结构、随机指定的网络结构、先验网络结构等 ) 开始,通过增加、删除和转向操作使得局部最大化,再逐渐扩展到整个网络。
- K2算法:通过逐渐加边寻找评分高的模型;
- 爬山法:利用搜索算子逐步对模型做局部修改;
- 结构EM算法:当数据有缺失值时对结构和参数同时优化。
K2算法为简化模型评分的计算,K2假设所有参数先验分布都是均匀分布。
爬山法:首先,从无边模型出发,利用搜索算子 ( 加边、减边、转边 ) 对当前模型进行局部修改 ( 不能形成有向圈 ) ,得到一系列候选模型;接着,计算每个候选模型的评分,将其中分数最高的模型的评分与修改前的模型比较,选择评分高的作为当前模型。
c) 贝叶斯模型平均方法。
构建一个可能结构的集合,然后求取它们的平均。
2.贝叶斯网络工具箱的安装
下载解压,并将bnt工具箱复制到Matlab安装位置的toolbox文件夹内部。
工具箱的下载地址:MATLAB贝叶斯网络工具箱FullBNT-1.0.7
接着,将bnt工具箱添加到Matlab工作路径中。
安装完成。
需要注意的是,该工具箱某些函数和Matlab自己原有的工作环境中的某些函数命名相同,因此会发生冲突,导致Legend无法显示等。可以在使用btn后,将其从工作变量中删除,目前能想到的唯一较好的解决方案。