贝叶斯信念网络的学习与推理

pybbn的Python项目详细描述


PyBBN

pybbn是用于贝叶斯信念网络(bbns)精确推理的python库,使用 junction tree algorithm或概率 在成簇的树上繁殖。该实现直接从C. Huang and A. Darwiche, “Inference in Belief Networks: A Procedural Guide,” in International Journal of Approximate Reasoning, vol. 15, pp. 225–263, 1999获取。Pybn也近似 使用Gibbs sampling的推理算法 线性高斯bbn模型。精确的推理算法适用于具有所有变量的bbns 这是离散的,而近似推理算法是具有所有变量的BBNs。 是连续的(假设是多元高斯分布)。此外,还有 生成单连通图和多连通图的能力,取自JS Ide and FG Cozman, “Random Generation of Bayesian Network,” in Advances in Artificial Intelligence, Lecture Notes in Computer Science, vol 2507

精确推理用法

下面是一个创建贝叶斯信念网络,将其转换为连接树的示例代码, 然后设置观察证据。最后一行打印每个节点的边际概率。

frompybbn.graph.dagimportBbnfrompybbn.graph.edgeimportEdge,EdgeTypefrompybbn.graph.jointreeimportEvidenceBuilderfrompybbn.graph.nodeimportBbnNodefrompybbn.graph.variableimportVariablefrompybbn.pptc.inferencecontrollerimportInferenceController# create the nodesa=BbnNode(Variable(0,'a',['on','off']),[0.5,0.5])b=BbnNode(Variable(1,'b',['on','off']),[0.5,0.5,0.4,0.6])c=BbnNode(Variable(2,'c',['on','off']),[0.7,0.3,0.2,0.8])d=BbnNode(Variable(3,'d',['on','off']),[0.9,0.1,0.5,0.5])e=BbnNode(Variable(4,'e',['on','off']),[0.3,0.7,0.6,0.4])f=BbnNode(Variable(5,'f',['on','off']),[0.01,0.99,0.01,0.99,0.01,0.99,0.99,0.01])g=BbnNode(Variable(6,'g',['on','off']),[0.8,0.2,0.1,0.9])h=BbnNode(Variable(7,'h',['on','off']),[0.05,0.95,0.95,0.05,0.95,0.05,0.95,0.05])# create the network structurebbn=Bbn() \
    .add_node(a) \
    .add_node(b) \
    .add_node(c) \
    .add_node(d) \
    .add_node(e) \
    .add_node(f) \
    .add_node(g) \
    .add_node(h) \
    .add_edge(Edge(a,b,EdgeType.DIRECTED)) \
    .add_edge(Edge(a,c,EdgeType.DIRECTED)) \
    .add_edge(Edge(b,d,EdgeType.DIRECTED)) \
    .add_edge(Edge(c,e,EdgeType.DIRECTED)) \
    .add_edge(Edge(d,f,EdgeType.DIRECTED)) \
    .add_edge(Edge(e,f,EdgeType.DIRECTED)) \
    .add_edge(Edge(c,g,EdgeType.DIRECTED)) \
    .add_edge(Edge(e,h,EdgeType.DIRECTED)) \
    .add_edge(Edge(g,h,EdgeType.DIRECTED))# convert the BBN to a join treejoin_tree=InferenceController.apply(bbn)# insert an observation evidenceev=EvidenceBuilder() \
    .with_node(join_tree.get_bbn_node_by_name('a')) \
    .with_evidence('on',1.0) \
    .build()join_tree.set_observation(ev)# print the marginal probabilitiesfornodeinjoin_tree.get_bbn_nodes():potential=join_tree.get_bbn_potential(node)print(node)print(potential)
< H2>近似推理用法

下面是创建线性高斯bbn并执行推理的示例。

importnumpyasnpfrompybbn.lg.graphimportDag,Parameters,Bbn# create the directed acylic graphdag=Dag()dag.add_node(0)dag.add_node(1)dag.add_edge(0,1)# create parametersmeans=np.array([0,25])cov=np.array([[1.09,1.95],[1.95,4.52]])params=Parameters(means,cov)# create the bayesian belief networkbbn=Bbn(dag,params)# do the inferenceM,C=bbn.do_inference()print(M)# set the evidence on node 0 to a value of 1bbn.set_evidence(0,1)M,C=bbn.do_inference()print(M)bbn.clear_evidences()# set the evidence on node 1 to a value of 20bbn.set_evidence(1,20)M,C=bbn.do_inference()print(M)bbn.clear_evidences()

建筑

要构建,您需要Python2.7或3.7。通过Anaconda管理环境 强烈建议您能够构建此项目(但如果您知道 你在做什么)。假设您已经安装了anaconda,您可以创建一个环境 接下来(请确保您cd进入此项目位置的根目录)。

对于Python2.7。

conda env create -f environment-py27.yml
conda activate pybbn27
python -m ipykernel install --user --name pybbn27 --display-name "pybbn27"

对于Python3.7。

conda env create -f environment-py37.yml
conda activate pybbn37
python -m ipykernel install --user --name pybbn37 --display-name "pybbn37"

然后您可以按如下方式构建项目。(注意,在Python3.6中,您将得到一些警告)。

make build

要生成文档,请转到docs子目录并键入以下内容。

make html

安装

使用pip安装已发布到PyPi的包。

pip install pybbn

其他python贝叶斯信念网络推理库

下面是贝叶斯信念网络中用于推理的其他python库的列表。

我在pypi中也发现了其他的packages

引文

@misc{vang_2017,
title={PyBBN},
url={https://github.com/vangj/py-bbn/},
journal={GitHub},
author={Vang, Jee},
year={2017},
month={Jan}}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java制造球经常出现在不同的位置   如何使用Java泛型来避免强制转换?   数学3D相机在java中缩放和跟踪物理?   如何重新启动java应用程序,记住其命令行参数   java JDI线程评估遇到了一个问题   java Yfiles图表从flash迁移到html5?   java如何获取所调用的AWS lambda任务的性能统计信息?   将对象编组为枚举类型时不调用java JAXB XmlJavaTypeAdapter   java是从servlet创建的线程的生命吗?   java卡夫卡启用。汽车commit false与commitSync()结合使用   使用ArrayList查找句子平均长度的java函数   java如何减少VisualVM对堆使用的影响?   java无法通过jconn4更新Sybase数据库中的多条记录。jar/Sybase驱动程序版本7和Mybatis框架   java在计算SHA 256时出错   java使用转换器处理反序列化,并将xml标记下的不同标记映射到单个列表   jsp表单中文本字段的java值为空   java URL输入和格式   java限制Nginx将任何字符编码设置为响应   满足条件的元素上的Java迭代器   java如果将负值传递给返回传递给它的值的阶乘的方法,该怎么办?