下面给出了贝叶斯网络的条件概率表。 A 和 C 是基节点,因此对于它们我们有绝对概率。节点 B、D、E、G、H、I 具有单亲,因此第一列表示父节点采用的值,第二列表示节点本身采用的值,最后一列是该情况发生的概率。节点 F 有两个父节点 B 和 D。因此,第一列代表 B 所取的值,第二列代表 D 所取的值,第三列代表 F 本身所取的值,最后一列代表该情况的概率正在发生。
Copy
a = Disbution ({ '1' : 1 . / 10 , '0' : 9 . / 10 })
c = Disbution ({ '1' : 1 . / 2 , '0' : 1 . / 2 })
b = ConditionalProbabilityTable (
[[ '0' , '0' , 0.1 ],
[ '0' , '1' , 0.9 ],
[ '1' , '0' , 0.6 ],
[ '1' , '1' , 0.4 ]],[a])
d = ConditionalProbabilityTable (
[[ '0' , '0' , 0.4 ],
[ '0' , '1' , 0.6 ],
[ '1' , '0' , 0.7 ],
[ '1' , '1' , 0.3 ]],[c])
e = ConditionalProbabilityTable (
[[ '0' , '0' , 0.8 ],
[ '0' , '1' , 0.2 ],
[ '1' , '0' , 0.9 ],
[ '1' , '1' , 0.1 ]],[b])
h = ConditionalProbabilityTable (
[[ '0' , '0' , 0.3 ],
[ '0' , '1' , 0.7 ],
[ '1' , '0' , 0.5 ],
[ '1' , '1' , 0.5 ]],[e])
i = ConditionalProbabilityTable (
[[ '0' , '0' , 0.3 ],
[ '0' , '1' , 0.7 ],
[ '1' , '0' , 0.2 ],
[ '1' , '1' , 0.8 ]],[e])
f = ConditionalProbabilityTable (
[[ '0' , '0' , '1' , 0.0 ],
[ '0' , '1' , '1' , 0.2 ],
[ '1' , '0' , '1' , 0.4 ],
[ '1' , '1' , '1' , 0.7 ],
[ '0' , '0' , '0' , 1.0 ],
[ '0' , '1' , '0' , 0.8 ],
[ '1' , '0' , '0' , 0.6 ],
[ '1' , '1' , '0' , 0.3 ]],[b,d])
g = ConditionalProbabilityTable (
[[ '0' , '0' , 0.9 ],
[ '0' , '1' , 0.1 ],
[ '1' , '0' , 0.1 ],
[ '1' , '1' , 0.9 ]],[f])
Copy # State objects hold both the distribution, and a high level name.
A = State (a, name = "A" )
B = State (b, name = "B" )
C = State (c, name = "C" )
D = State (d, name = "D" )
E = State (e, name = "E" )
F = State (f, name = "F" )
G = State (g, name = "G" )
H = State (h, name = "H" )
I = State (i, name = "I" )
Copy model = BayesianNetwork ( "DS251_A2_Q5-2" )
model . add_states (A, B, C, D, E, F, G, H, I)
Copy model . add_edge (A, B)
model . add_edge (B, E)
model . add_edge (B, F)
model . add_edge (C, D)
model . add_edge (D, F)
model . add_edge (E, H)
model . add_edge (E, I)
model . add_edge (F, G)
为了计算条件概率,提供已知节点的值,它将预测所有其他节点的概率。例如,考虑 P(I|C) 的计算。 在此我们知道 C 的值为 1。因此我们将其提供给我们的函数。 基于此,它将返回一个数组,其中包含所有节点的所有不同值的概率。 在我们的例子中,我们只关心我取值 1 的概率,考虑到从 0 开始索引,该值的索引为 8。因此,我们选择数组的第 8 个索引和参数为 1,以获得特定的概率,结果为 0.7115。
Copy #a P(I|C)
round (model. predict_proba ([{ 'C' : '1' }])[ 0 ][ 8 ].parameters[ 0 ][ '1' ], 4 )
Copy #b P (E|~D)
round (model. predict_proba ([{ 'D' : '0' }])[ 0 ][ 4 ].parameters[ 0 ][ '1' ], 4 )
Copy #c P(G|B,~D)
round (model. predict_proba ([{ 'B' : '1' , 'D' : '0' }])[ 0 ][ 6 ].parameters[ 0 ][ '1' ], 4 )