pgmpy--Bayesian Model初步学习

本文介绍使用pgmpy库构建贝叶斯网络的过程,包括已知结构和参数、已知结构未知参数两种情况下的网络构建,并提供代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一。编写本文的此刻,作者刚刚入门贝叶斯网络,希望通过以下例子对贝叶斯网进行初步入门,与大家共同进步。代码及范例来源为:

PGM—pgmpy学习
pgmpy官网

案例

案例概述

下面展示两种应用情形,由浅入深,逐步了解并应用贝叶斯网络。

案例1–已知结构、已知参数

在这里插入图片描述
针对已知结构及参数,先采用BayesianModel构造贝叶斯网结构,然后通过TabularCPD构造条件概率分布CPD(condition probability distribution)表格,最后将CPD数据添加到贝叶斯网络结构中,完成贝叶斯网络的构造。这里主要用到两个函数:BayesianModel及TabularCPD,通过一下代码可以查询其详细的输入及用法,这里就不详述了。

BayesianModel?
TabularCPD?

具体代码如下:

#coding: utf-8

from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD

cancer_model = BayesianModel([
    ('pollution', 'cancer'),
    ('smoker', 'cancer'),
    ('cancer', 'x-ray'),
    ('cancer', 'dyspnoea')])
cpd_pollution = TabularCPD(variable='pollution', 
                           variable_card=2, 
                           values=[[0.9],[0.1]])
cpd_smoker = TabularCPD(variable='smoker', 
                        variable_card=2, 
                        values=[[0.3],[0.7]])
cpd_cancer = TabularCPD(variable='cancer', 
                        variable_card=2, 
                        values=[[0.03, 0.05, 0.001, 0.02], [0.97, 0.95, 0.999, 0.98]], 
                        evidence=['smoker', 'pollution'],
                        evidence_card=[2, 2])
cpd_x_ray = TabularCPD(variable='x-ray', 
                       variable_card=2,
                       values=[[0.9, 0.2], [0.1, 0.8]],
                       evidence=['cancer'],
                       evidence_card=[2])
cpd_dyspnoea = TabularCPD(variable='dyspnoea',
                         variable_card=2,
                         values = [[0.65, 0.3],[0.35, 0.7]],
                         evidence=['cancer'],
                         evidence_card=[2])
cancer_model.add_cpds(cpd_pollution, cpd_smoker, cpd_cancer, cpd_x_ray, cpd_dyspnoea)

构造完成贝叶斯网络后,如何进行预测呢?有以下两种方式:
1.直接获取结果–predict

import pandas 
A = pd.DataFrame(data=[[1, 1, 1, 1]], columns=['pollution', 'smoker', 'x-ray', 'dyspnoea'])
result = cancer_model.predict(A)

2.获取概率值–predict_probability
经过多次调试,在这种CPD构造贝叶斯网络中,采用predict_probability方式会报错,具体错误原因未知,往路过的大神指点。

案例2–已知结构、未知参数

针对已知结构,未知参数,可以先建立Beyasian网结构,然后将样本导入训练。

import numpy as np
import pandas as pd
from pgmpy.models import BayesianModel
values = pd.DataFrame(np.random.randint(low=0, high=2, size=(100, 5)), columns=['A', 'B', 'C', 'D', 'E'])
 train_data = values[:80]
predict_data = values[80:]
model = BayesianModel([('A', 'B'), ('C', 'B'), ('C', 'D'), ('B', 'E')])
model.fit(values)

构造训练完成贝叶斯网络后,可以直接采用例子1中两种方式进行预测。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白银时代_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值