学****贝叶斯信念网 贝叶斯网的梯度上升训练
学****贝叶斯网
是否可以设计出有效的算法以从训练数据中学****到贝叶斯信念网?对于这一问题有多种可以考虑的框架:
—首先网络结构可以预先给出,或可由训练数据中推得。
—其次,所有的网络变量可以直接从每个训练样例中观察到,或某些变量不能观察到。
当网络结构预先已知且变量可以从训练样例中完全获得时,通过学****得到条件概率表就比较简单,只需要像在朴素贝叶斯分类器中那样估计表中的条件概率项。
网络结构已知,但只有一部分变量值能在数据中观察到,学****就困难得多了。这一问题在某种程度上类似于在人工神经网络中学****隐藏单元的权值,其中输入输出的节点值由训练样例给出,但隐藏单元的值未指定。针对这一问题,采用简单的梯度上升过程以学****条件概率表中的项。这一梯度上升过程搜索一个假设空间,它对应于条件概率表中所有可能的项。在梯度上升中被最大化的指标函数是给定假设h下观察到训练数据D的概率P(D|h)。就相当于极大似然假设
贝叶斯网的梯度上升训练
梯度上升的规则:通过lnP(D|h)的梯度来使P(D|h)最大化。其中代表条件概率表中的一个表项。为在给定父节点取值时,网络变量值为的概率。
例如: 图6-3中条件概率表中最右上方的表项,那么为变量Campfire, 是其父节点的元组<Storm,BusTourGroup>,
=true,并且= <False,False>。
具体的算法:对于每个,lnP(D|h)的梯度是对每个求导数得到。
()
例如:为计算对应图6-3中表左上方的表项的导数,需要对D中的每个训练样例d计算P(Camfire=True,Storm=False,BusTourGroup=False|d)。
当训练样例d中无法观察到这些变量时, 这些概率可用标准的贝叶斯网络推理的过程中计算得到。
用梯度上升来更新每一个
+
其中是一个小常量,称为学****率。
将权值归一化,保持有效的概率在区间[0,1]之间,还要求对所有的i,k保持1
像其他基于梯度算法中的那样,该算法只能保证寻找到局部最优解
当网络的结构是未知的,数据是可完全观察,学****贝叶斯因此网络也是很困难的。此时常采用K2的启发式搜索算法来学****网络结构。
K2算法用于贪婪搜索(总是做出在当前看来是做好的选择,而不是从整体出发)处理模型选择问题:先定义一种评价网络结构的优劣的评分函数,再从一个网络的开始,根据事先确定的最大父节点数目和节点的次序,选择分值最高的节点作为该节点的父节点。
K2算法使用后验概率作为评分函数:
算法的伪代码:
机器学习-贝叶斯网络 来自淘豆网www.taodocs.com转载请标明出处.