贝叶斯网络预测

贝叶斯网络预测

用于贝叶斯分类器的数据集

image-20221011232309597

image-20221011233201208

• 类标记c:playtennis=yes,playtennis=no,

• 需计算P(yes),P(no)

• 还需计算P(strong|yes),P(strong|no),P(high|yes),P(high|no),P(cool|yes),P(cool|no),P(sunny|yes),P(sunny|no)

求c(x)

P(yes)* P(strong|yes)*P(high|yes)P(cool|yes) P(sunny|yes)=?

P(no)* P(strong|no)*P(high|no)P(cool|no) P(sunny|no)=?

选择较大值对应的类标记赋给c(x)

image-20221011235958634

• P(yes)=9/14=0.64 P(no)=5/14=0.36

• P(strong|yes)=3/9 P(strong|no)=3/5

• P(high|yes)=3/9, P(high|no)=4/5

• P(cool|yes)=3/9, P(cool|no)=1/5

• P(sunny|yes)=2/9, P(sunny|no)=3/5

• P(yes)* P(strong|yes)*P(high|yes)*P(cool|yes)* P(sunny|yes)=0.0159

• P(no)* P(strong|no)*P(high|no)*P(cool|no)* P(sunny|no)=0.0206

image-20221012000016343

所以预测结果为 no

归一化处理

  • 即用待测样本属于yes的概率和待测样本属于no的概率分别处以他们的和
  • 待测样本属于yes的概率 0.0053/(0.0053+0.0206)=0.2046
    待测样本属于yes的概率 0.0053/(0.0053+0.0206)=0.2046
  • 待测样本属于no的概率0.0206/(0.0053+0.0206)=0.7954
### Python 中实现贝叶斯网络预测 Python 提供了多种工具和库用于构建和操作贝叶斯网络。其中最常用的库之一是 `pgmpy`,这是一个专门针对概率图模型的库,支持创建、推理以及参数估计等功能。 #### 安装所需库 为了使用这些功能,首先需要安装必要的包: ```bash pip install pgmpy numpy pandas matplotlib scikit-learn ``` #### 创建简单的贝叶斯网络 下面是一个基于 `pgmpy` 的例子,展示如何定义一个简单的贝叶斯网络,并对其进行基本的概率推断。 ```python from pgmpy.models import BayesianNetwork from pgmpy.factors.discrete import TabularCPD from pgmpy.inference import VariableElimination # 构建贝叶斯网络结构 model = BayesianNetwork([('Difficulty', 'Grade'), ('Intelligence', 'Grade')]) # 添加条件概率分布 (CPDs) cpd_difficulty = TabularCPD(variable='Difficulty', variable_card=2, values=[[0.6], [0.4]]) cpd_intelligence = TabularCPD(variable='Intelligence', variable_card=2, values=[[0.7], [0.3]]) cpd_grade = TabularCPD(variable='Grade', variable_card=3, values=[[0.3, 0.05, 0.9, 0.5], [0.4, 0.25, 0.08, 0.3], [0.3, 0.7, 0.02, 0.2]], evidence=['Difficulty', 'Intelligence'], evidence_card=[2, 2]) # 将 CPDs 加入到模型中 model.add_cpds(cpd_difficulty, cpd_intelligence, cpd_grade) # 检查模型的有效性 assert model.check_model() # 推理过程 infer = VariableElimination(model) prob_Diff_GradeA = infer.query(['Difficulty'], evidence={'Grade': 0}) print(prob_Diff_GradeA) ``` 这段代码展示了如何建立一个包含两个父节点 (`Difficulty`, `Intelligence`) 和一个子节点 (`Grade`) 的简单贝叶斯网络,并进行了查询以获取给定成绩等级下难度的可能性[^1]。 对于更复杂的场景或实际应用中的数据处理,还可以结合其他常用的数据分析库如 NumPy、Pandas 来预处理输入数据;利用 Matplotlib 或 Seaborn 进行可视化;借助 Scikit-Learn 实现特征工程或其他机器学习任务前后的辅助工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_chuanqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值