我正在学习使用Matlab进行Bayes网络分类,我卡在了一个简单的(我认为)步骤上:
对于像iris数据集这样的朴素贝叶斯分类器,类别位于顶部节点,像这样:
class
/ \ feature1 feature2
我理解为什么类别是特征的原因,这没问题,我明白为什么类别本身有一个先验概率。
但在非朴素贝叶斯网络的情况下,像这样:
cause1 cause2 | \ / | consequence | / class
在这种非朴素的情况下,先验概率如何设置?我该如何设置它?我如何从中获得分类?谢谢 (:
附注:我正在查看BNT来构建网络。
回答:
假设你提到的所有变量都是分类变量,并且边的方向是从上到下:
先验概率:
在第一个朴素贝叶斯示例中,’class’的条件概率表(CPT)仅由其先验分布组成,因为它是一个根节点,即没有父节点。如果’class’可以有2个状态(例如黑色和白色),其CPT将包含2个值。
在第二个贝叶斯网络(BN)示例中,’class’的CPT依赖于’cause1’和’consequence’。假设’consequence’有3个状态,’cause1’有4个状态,而’class’如前所述有2个状态。在这种情况下,’class’的CPT将包含3*4*2个值。在学习这个CPT时,你可以将你的先验信念作为一个Dirichlet分布(如果所有变量都是分类变量)纳入其中。要了解如何将你的先验信念纳入最大似然估计过程,可以参考这些优秀的讲义。
推断:(或者你所说的’分类’)
关于进行分类,在示例1中,你可以使用贝叶斯规则来计算P(‘class’ = 白色)和P(‘class’ = 黑色)。在第二个(BN)示例中,你需要使用信念传播、变量消除或连接树算法来根据你观察到的节点更新’class’节点的后验概率。
关于如何实现这一点,有一个简单的BNT示例在这里。此外,BNT工具箱还包含使用连接树函数的简短’推断’示例,你可以在.../examples
文件夹下找到这些示例。
最后,虽然有些人可能不同意,但就贝叶斯网络而言,我建议不要严格地将A -> B解释为“A导致B”,因为在结构学习领域,贝叶斯网络的因果关系方面仍有许多争议。
希望这对你有帮助。