对于一个项目,我需要创建包含属性之间特定依赖关系的合成分类数据。这可以通过预先定义的贝叶斯网络的抽样来实现。在互联网上进行了一些探索之后,我发现Pomegranate是贝叶斯网络的一个很好的包--就我而言--从这样一个预先定义的贝叶斯网络中取样似乎是不可能的。例如,model.sample()引发了一个NotImplementedError (尽管这解决方案这么说)。
有没有人知道是否存在一个库,它为贝叶斯网络的构建和抽样提供了一个良好的接口?
发布于 2019-12-02 14:47:49
我发现PyAgrum (https://agrum.gitlab.io/pages/pyagrum.html)完成了这项工作。它既可用于通过BayesNet()类创建贝叶斯网络,也可用于使用来自BNDatabaseGenerator() 班级的.drawSamples()方法从这样的网络中进行示例。
发布于 2020-01-03 16:07:08
使用pyAgrum,您只需:
#import pyAgrum
import pyAgrum as gum
# create a BN
bn=gum.fastBN("A->B[3]<-C{yes|No}->D")
# specify some CPTs (randomly filled by fastBN)
bn.cpt("A").fillWith([0.3,0.7])
# and then generate a database
gum.generateCSV(bn,"sample.csv",1000,with_labels=True,random_order=False)
# which returns the LL(database)有关使用http://webia.lip6.fr/~phw/aGrUM/docs/last/notebooks/的更多笔记本,请参见pyAgrum
免责声明:我是pyAgrum:-的作者之一
发布于 2020-07-20 11:50:02
另一个选择是帕格米,它是一个用于贝叶斯网络中学习(结构和参数)和推理(统计和因果)的Python库。
您可以生成前向和拒绝样本作为Pandas数据帧或numpy recarray。
下面的代码作为recarray从贝叶斯网络"diff ->品位<- intel“生成20个前向样本。
from pgmpy.models.BayesianModel import BayesianModel
from pgmpy.factors.discrete import TabularCPD
from pgmpy.sampling import BayesianModelSampling
student = BayesianModel([('diff', 'grade'), ('intel', 'grade')])
cpd_d = TabularCPD('diff', 2, [[0.6], [0.4]])
cpd_i = TabularCPD('intel', 2, [[0.7], [0.3]])
cpd_g = TabularCPD('grade', 3, [[0.3, 0.05, 0.9, 0.5], [0.4, 0.25, 0.08, 0.3], [0.3, 0.7, 0.02, 0.2]], ['intel', 'diff'], [2, 2])
student.add_cpds(cpd_d, cpd_i, cpd_g)
inference = BayesianModelSampling(student)
df_samples = inference.forward_sample(size=20, return_type='recarray')
print(df_samples)https://stackoverflow.com/questions/59107319
复制相似问题