题目:贝叶斯网络结构学习方法简介
贝叶斯网络(Bayesiannetwork, BN)结构学习就是从给定的数据集中学出贝叶斯网络结构,即各节点之间的依赖关系;只有确定了结构才能继续学得网络参数,即表示各节点之间依赖强弱的条件概率。对于普通人来说(非贝叶斯网络的专业研究人员,仅一般使用者),希望的是能够有那么一个函数,函数的输入是数据集,输出即为贝叶斯网络结构。目前确实有很多贝叶斯网络工具箱,但新人上手还是有不小的门坎,原因有二:一是工具箱文件众多,很多时候就根本找不到你想要的函数;二是即使找到了还要输入一堆参数,而这些参数该如何设置又感觉无从下手,这是因为基础理论懂的太少,还有就是只要函数出错就会一脸茫然,为啥啊?
贝叶斯网络结构学习方法简介贝叶斯网络结构学习方法简介综上所述,尽管我们普通人并不需要从头编写贝叶斯网络的结构学习函数,但是了解一些有关贝叶斯网络结构学习的基础理论也还是需要的,哪怕仅仅是为了更好地使用工具箱现成的函数。以下主要综合了多篇学位论文的有关内容,若要了解更多可以拜读参考文献原文。
那么如何根据已有的数据集学得贝叶斯网络结构呢?一种最简单的想法就是遍历所有可能的结构,然后用某个标准去衡量各个结构,进而找出最好的结构。
是的,这就是评分搜索的基本思想。你可以把所有可能的结构看为定义域,将衡量特定结构好坏的标准看为函数,寻找最好的结构的过程相当于在定义域上求函数的最优值,即这是一个最优化问题。但这里面有两个关键点:一是定义域一般几乎无穷大,不可能遍历,即确定合适的搜索策略;二是用什么样的衡量标准,即确定所谓的评分函数。
【朱明敏. 贝叶斯网络结构学习与推理研究[D]. 西安电子科技大学, 2013.】
评分函数主要分为两类,一类是贝叶斯评分函数,另一类是基于信息论的评分函数。
【胡春玲. 贝叶斯网络结构学习及其应用研究[D]. 合肥工业大学, 2011.】
上图中,所谓的拓扑结构G即为朝思暮想的贝叶斯网络结构,样本集D即为已有的数据集。贝叶斯评分函数主要包括K2评分、BD评分、BDe评分。几种评分函数的关系如下:
【刘峰. 贝叶斯网络结构学习算法研究[D].北京邮电大学, 2007.】
【胡春玲. 贝叶斯网络结构学习及其应用研究[D]. 合肥工业大学, 2011.】
【朱明敏. 贝叶斯网络结构学习与推理研究[D]. 西安电子科技大学, 2013.】
以上仅简单列出了三篇学位论文中有关几种贝叶斯评分函数的描述,若需了解某具体评分函数,请根据原始文献仔细研究学习。
【朱明敏. 贝叶斯网络结构学习与推理研究[D]. 西安电子科技大学, 2013.】
更多有关MDL准则、BIC评分函数、AIC评分函数的内容参见【周志华.机器学习[M]. 清华大学出版社,2016.】的7.5.2节(学习)。
【胡春玲. 贝叶斯网络结构学习及其应用研究[D]. 合肥工业大学, 2011.】
有关K2算法实际采样的就是爬山法搜索,后面会单独谈;爬山法(Hill-Climbing, HC)、模拟退火(Simulated Annealing, SA)、演化算法(Evolutionary Algorithm,EA)均为一些通用的方法,尤其是EA是一大类算法,包括遗传算法(Genetic Algorithm, GA)、蚁群算法(Ant Colony Optimization,ACO)等等,抽样算法是一种特殊的搜索策略详见本文第4节,后面也会单独谈。
下表列出了一些基于评分搜索的贝叶斯网络结构学习算法:
【朱明敏. 贝叶斯网络结构学习与推理研究[D]. 西安电子科技大学, 2013.】
【李玮玮. 贝叶斯网络结构学习方法的研究[D]. 南京航空航天大学, 2008.】
【李玮玮. 贝叶斯网络结构学习方法的研究[D]. 南京航空航天大学, 2008.】
MMHC是Max-Min Hill-Climbing首字母的简写。
随机抽样的代表是马尔可夫蒙特卡罗(Markov Chain Monte Carlo, MCMC)方法,MCMC的重要代表是Metropolis-Hastings(简称MH)。更多有关MCMC和MH的内容可以参见【周志华. 机器学习[M]. 清华大学出版社,2016.】的14.5.1节(MCMC采样),以及【BishopC M. Pattern Recognition and Machine Learning (Information Science andStatistics)[M]. Springer-Verlag New York, Inc. 2006.】的11.2节(MarkovChain Monte Carlo)。
【胡春玲. 贝叶斯网络结构学习及其应用研究[D]. 合肥工业大学, 2011.】
.
本篇主要是罗列一些贝叶斯网络结构学习策略,每种策略均包括了多种具体的方法(或算法),若需要深入了解某个算法时可以查找原文献,再根据原文献的参考文献找到原始资料,因此本篇相当于一个速查表或者是备忘录,不要期望能从本篇当中得到太具体的信息。接下来会结合一些贝叶斯网络的工具箱函数具体讨论几种算法的实现以供不同需求使用。.
最近基于贝叶斯网络做一些事情,需要基于数据集学习贝叶斯网络的结构,然而搜索下载了一些贝叶斯网络工具箱后发现很难上手,而且网络上并没有多少入门的资料,因此就把自己学习的过程或者说是入门经验分享出来,希望能够降低贝叶斯网络结构学习的门坎。本系列文章仅为个人入门阶段所写,若有理解不当之处敬请谅解,也希望大家协手丰富这方面的入门技术资料^_^。