该项目基于csci3202,讨论了两种使用python手写静态贝叶斯网络的办法,一种是迭代法,一种是递归法,迭代法基于多条件多结果的条件概率的枚举求法,迭代法基于边缘概率进行分类求取,其中,迭代法存在bug(bug的本质是浮点数计算的精度问题),递归法由于分情况讨论,精度其实更高
边缘概率
如果是无父节点的节点,直接得边缘概率,如果是有父节点的节点,递归得到父亲节点
条件概率
- 看条件有无自己,如果有自己,根据正反的情况返回结果1或者0
- 除去无关的相互独立节点,因为如果A,B无关,P(A|B) = P(A),兄弟节点会保留
- 此时如果无条件(条件被剔除完全),进入求取边缘概率
- 如果有条件,则此时为P(A|子节点,兄弟节点,父节点)的情况,搜索到无关节点会直接返回1进行剪枝
从上而下进行迭代求值,带入上面的算法,基于迭代的枚举算法。
使用基于枚举的迭代方法,就非常简单,首先把两种结果加入条件的已知集合K中,而后从父节点到子节点,不断枚举,如果在K中,直接相乘,不在K中,并加入K中并将概率相加。