课程笔记地址 : https://cs50.harvard.edu/ai/2020/notes/2/#joint-probability
官网:https://cs50.harvard.edu/ai/2020/weeks/2/
上课源码: http://cdn.cs50.net/ai/2020/spring/lectures/2/src2.zip
本人概率论学不好, 所以只讲贝叶斯网络的部分 (
from model import model
# Calculate probability for a given observation
# none rain, no maintenance, train on time, appointment attend 的 概率
probability = model.probability([["heavy", "yes", "delayed", "miss"]])
print(probability)
from pomegranate import *
# Rain node has no parents: root Node
# rain's probability
rain = Node(DiscreteDistribution({
"none": 0.7,
"light": 0.2,
"heavy": 0.1
}), name="rain")
# Track maintenance node is conditional on rain
# rain -> maintenance
maintenance = Node(ConditionalProbabilityTable([
["none", "yes", 0.4],
["none", "no", 0.6],
["light", "yes", 0.2],
["light", "no", 0.8],
["heavy", "yes", 0.1],
["heavy", "no", 0.9]
], [rain.distribution]), name="maintenance")
# Train node is conditional on rain and maintenance
# rain -> Train, maintenance -> Train
train = Node(ConditionalProbabilityTable([
["none", "yes", "on time", 0.8],
["none", "yes", "delayed", 0.2],
["none", "no", "on time", 0.9],
["none", "no", "delayed", 0.1],
["light", "yes", "on time", 0.6],
["light", "yes", "delayed", 0.4],
["light", "no", "on time", 0.7],
["light", "no", "delayed", 0.3],
["heavy", "yes", "on time", 0.4],
["heavy", "yes", "delayed", 0.6],
["heavy", "no", "on time", 0.5],
["heavy", "no", "delayed", 0.5],
], [rain.distribution, maintenance.distribution]), name="train")
# Appointment node is conditional on train
# train -> appointment
appointment = Node(ConditionalProbabilityTable([
["on time", "attend", 0.9],
["on time", "miss", 0.1],
["delayed", "attend", 0.6],
["delayed", "miss", 0.4]
], [train.distribution]), name="appointment")
# Create a Bayesian Network and add states
model = BayesianNetwork()
model.add_states(rain, maintenance, train, appointment) # Bayesian's Node
# Add edges connecting nodes
model.add_edge(rain, maintenance)
model.add_edge(rain, train)
model.add_edge(maintenance, train)
model.add_edge(train, appointment)
# Finalize model
model.bake()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CrdEPg9-1668324150628)(https://cdn.acwing.com/media/article/image/2022/11/13/157227_0034576763-QQ图片20221113151541.png)]
就是一棵树, 其中父节点的情况影响子节点的情况, 然后根据给出的各个条件的情况, 来计算最后约会准时的概率