您的位置:首页 > 理论基础 > 计算机网络

贝叶斯网络的训练和推算

2014-05-21 20:10 246 查看
近期接到一个任务,帮老师训练一个贝叶斯网络,进而使用接到的网络进行新的推算(经管方面的),毕竟是第一次实际使用机器学习做课题,难免有些鸡冻。下面咱的干货是具体的过程:

1、(总体网络)首先,给出的是22个特征,这22个特征里面中9个输入,另外3个输出,10个中间变量,贝叶斯网络如下:

2、(资料)开始不知道有现成的BNT包能解决先验概率的问题,所以开始在写matlab计算9个输入的先验概率,即是挨个统计,出现的概率(事实证明,这是走的弯路),关于BNT包http://blog.sina.com.cn/s/blog_6c7b434d01013ufz.html有详细的例子,初学者可以完整的看下,BNT包网上较多,基本都是类似的。

3、(训练过程)我使用matlab仿真时,首先也是先构造贝叶斯网络(即是定义那些线是存在的,哪些是不存在的);接着初始化条件概率,使用tabular_CPD函数,该函数的参数较多,使用的时候请注意;接着使用learn_params函数,根据构造的贝叶斯网络和训练的数据,对网络进行训练,得到各种条件概率(此处注意训练的数据需要转置,即每一列是使用的一个记录,训练的数据多些)

4、(推算)将要推算的输入(术语叫证据)添加到引擎中,函数是enter_evidence,然后使用某种引擎进行推算,对应的函数是marginal_nodes。从工具箱的使用手册可以看到,贝叶斯网络有较多的推理引擎供选择,找个自己需要的即可。这个过程有点小问题,即是推算函数我每次必须有9个输入,要是我不想指定某个输入的状态,应该怎么来处理呢?我的处理方式是,约定不输入某个状态指定为0,在证据添加到引擎过程中进行判断,如果不等于0才添加到引擎,从而实现不指定某个输入。

仔细看看其实过程还是挺简单的,但也是从没接触过过,所以花了不少时间,下次碰到应该挺快就能解决吧,仅在此记录下整个的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: