Python问题决策影响图结构化概率模型

54 篇文章 0 订阅
54 篇文章 0 订阅

📜结构化概率模型-用例

📜贝叶斯网络计算库尔贝克-莱布勒散度(概率分布标准误差度量) | 📜问题决策影响图模型 | 📜量子运算和噪声模型 | 📜概率图神经 | 📜Python汽车油耗活塞循环原木纱强度及电阻覆盖率现实统计模型计算

✒️Python贝叶斯网络

下面给出了贝叶斯网络的条件概率表。 A 和 C 是基节点,因此对于它们我们有绝对概率。节点 B、D、E、G、H、I 具有单亲,因此第一列表示父节点采用的值,第二列表示节点本身采用的值,最后一列是该情况发生的概率。节点 F 有两个父节点 B 和 D。因此,第一列代表 B 所取的值,第二列代表 D 所取的值,第三列代表 F 本身所取的值,最后一列代表该情况的概率正在发生。

A/0.1
B/0.4/0.9
C/0.5
D/0.3/0.6
F/0.7/0.4/0.2/0
G/0.9/0.1
E/0.1/0.2
H/0.5/0.7
I/0.8/0.7

💦构建模型

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]) 

将这些分布与节点名称一起传递到状态对象中。

# 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")

将状态添加到网络

model = BayesianNetwork("DS251_A2_Q5-2")
model.add_states(A, B, C, D, E, F, G, H, I)

然后我们需要向模型添加边缘。边代表哪些状态是哪些其他状态的父状态。

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)

最后,必须烘烤模型以完成内部结构。

model.bake()

💦计算概率

为了计算条件概率,提供已知节点的值,它将预测所有其他节点的概率。例如,考虑 P(I|C) 的计算。 在此我们知道 C 的值为 1。因此我们将其提供给我们的函数。 基于此,它将返回一个数组,其中包含所有节点的所有不同值的概率。 在我们的例子中,我们只关心我取值 1 的概率,考虑到从 0 开始索引,该值的索引为 8。因此,我们选择数组的第 8 个索引和参数为 1,以获得特定的概率,结果为 0.7115。

同样,也可以求出其他情况的概率。所有值均与使用笔和纸计算的值相符。

#a P(I|C)
round(model.predict_proba([{'C': '1'}])[0][8].parameters[0]['1'],4)
#b P (E|~D)
round(model.predict_proba([{'D': '0'}])[0][4].parameters[0]['1'],4)
#c P(G|B,~D)
round(model.predict_proba([{'B': '1', 'D': '0'}])[0][6].parameters[0]['1'],4)

👉参阅一:计算思维

👉参阅二:亚图跨际

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值