标签: pgmpy

绘制 PGMPy Networkx 图时出现 StopIteration 错误

我有一个 python 脚本,它使用 pandas 加载 csv 文件,然后使用 pgmpy 通过数据学习贝叶斯网络。

学习结构后,我使用以下函数绘制图表:

nx.draw(graph_model, node_color='#00b4d9', with_labels=True)
Run Code Online (Sandbox Code Playgroud)

这在 Ubuntu 中完美运行,但是,它在运行 Mac 的虚拟机中引发 StopIteration 错误,我用它来编译 Mac 版本。

它抛出的错误如下(我已删除路径,因为它包含项目的名称,这是未发布的工作):

StopIteration: 
At:
  <path>/site-packages/matplotlib/bezier.py(352): split_path_inout
  <path>/site-packages/matplotlib/patches.py(2754): _shrink
  <path>/site-packages/matplotlib/patches.py(2771): _call_
  <path>/site-packages/networkx/drawing/nx_pylab.py(794): _connectionstyle
  <path>/site-packages/matplotlib/patches.py(4453): _get_path_in_displaycoord
  <path>/site-packages/matplotlib/patches.py(4440): get_path
  <path>/site-packages/matplotlib/axes/_base.py(2376): _update_patch_limits
  <path>/site-packages/matplotlib/axes/_base.py(2358): add_patch
  <path>/site-packages/networkx/drawing/nx_pylab.py(867): _draw_networkx_edges_fancy_arrow_patch
  <path>/site-packages/networkx/drawing/nx_pylab.py(889): draw_networkx_edges
  <path>/site-packages/networkx/drawing/nx_pylab.py(334): draw_networkx
  <path>/site-packages/networkx/drawing/nx_pylab.py(120): draw
  <path>/bayesian_network/draw_model.py(7): <module>
Run Code Online (Sandbox Code Playgroud)

我已经检查过学习的图有节点和边。如果我尝试绘制一张只有一个节点的图,它就会起作用。

我已经升级了所有软件包,包括 pgmpy、matplotlib 和 networkx。

此问题是否与在运行 Mac 的虚拟机中执行的代码有关?我目前无法访问真正的 Mac 机器来测试它。

python macos matplotlib networkx pgmpy

5
推荐指数
1
解决办法
1062
查看次数

如何从 pgmpy 打印打印完整的 cpd?

我试图让贝叶斯网络的保险数据表示中的示例发挥作用。请参阅最大似然估计部分。我从 R 中的 bnlearn 包中获取数据,然后将其上传到我的谷歌驱动器。数据

下图显示...我相信这显示了缺失的列。如何修复代码以显示正确的信息?

在此输入图像描述

from pgmpy.models import BayesianModel

model = BayesianModel([('Antilock', 'Accident'), ('DrivingSkill', 'DrivQuality'), ('DrivQuality', 'Accident')])

# Maximum Likelihood Estimation
from pgmpy.estimators import MaximumLikelihoodEstimator 
mle = MaximumLikelihoodEstimator(model, df)

# Pour toutes les variables :
model.fit(df, estimator=MaximumLikelihoodEstimator)
for cpd in model.get_cpds():
  print(cpd)

Run Code Online (Sandbox Code Playgroud)

注1:从R获取数据的代码

data(insurance)

write.csv(insurance,"C:/Users/Administrator/OneDrive/University of London/AI/Assignment 1/insurance.csv")

Run Code Online (Sandbox Code Playgroud)

注意2:如果您在 colab 中运行它,您将需要安装该软件包

!pip install pgmpy
Run Code Online (Sandbox Code Playgroud)

python pgmpy google-colaboratory

4
推荐指数
1
解决办法
1724
查看次数

类型错误:“DiscreteFactor”对象不可下标

我有一个要执行的贝叶斯算法程序,我使用的是 python 3

import numpy as np
import csv
import pandas as pd
from pgmpy.models import BayesianModel
from pgmpy.estimators import MaximumLikelihoodEstimator
from pgmpy.inference import VariableElimination


heartDisease = pd.read_csv('heart.csv')
heartDisease = heartDisease.replace('?',np.nan)

print('Few examples from the dataset are given below')
print(heartDisease.head())

model = BayesianModel([('age','trestbps'),('age','fbs'),('sex','trestbps'),('exang','trestbps'),('trestbps','heartdisease'),('fbs','heartdisease'),('heartdisease','restecg'),('heartdisease','thalach'),('heartdisease','chol')])

print('\nLearning CPD using Maximum likelihood estimators')
model.fit(heartDisease,estimator=MaximumLikelihoodEstimator)

print('\n Inferencing with Bayesian Network:')
HeartDisease_infer = VariableElimination(model)

print('\n 1. Probability of HeartDisease given Age=28')
q=HeartDisease_infer.query(variables=['heartdisease'],evidence={'age':28})
print(q['heartdisease'])

print('\n 2. Probability of HeartDisease given cholesterol=100')
q=HeartDisease_infer.query(variables=['heartdisease'],evidence={'chol':100})
print(q['heartdisease'])
Run Code Online (Sandbox Code Playgroud)

当我运行贝叶斯网络程序时收到的错误是:

TypeError                                 Traceback (most …
Run Code Online (Sandbox Code Playgroud)

python bayesian-networks pandas pytorch pgmpy

1
推荐指数
1
解决办法
2504
查看次数