Skip to main content

线性高斯网络 - 推理、参数学习和表示

项目描述

线性高斯贝叶斯网络 - 表示、学习和推理

构建状态 PyPI - 许可证 PyPI - Python 版本 文件状态 编解码器 下载

贝叶斯网络 (BN) 是一种概率图形模型,它通过图形表示一组变量及其条件依赖关系。高斯 BN 是一种特殊情况,其中连续变量集由高斯分布表示。高斯对于许多现实世界的连续分布来说是非常好的近似。

该软件包有助于对网络进行建模、通过数据学习参数以及使用证据进行推理。实现了两种类型的高斯 BN:

  1. 线性高斯网络: CPD 为线性高斯的有向 BN。

  2. Gaussian Belief Propagation:一个无向 BN,它运行消息传递算法以迭代求解精度矩阵并找出有或没有条件的变量的边际。

安装

$ pip install lgnpy

或克隆存储库。

$ git clone https://github.com/ostwalprasad/lgnpy

入门

以下是线性高斯网络的步骤。高斯信念传播模型也类似。

1.创建网络

import pandas as pd
import numpy as np
from lgnpy import LinearGaussian

lg = LinearGaussian()
lg.set_edges_from([('A', 'D'), ('B', 'D'), ('D', 'E'), ('C', 'E')])

2 创建数据并将其分配给网络。

​ 使用 pandas 为网络创建合成数据并将网络与数据绑定。无需分别计算均值和协方差矩阵。

np.random.seed(42)
n=100
data = pd.DataFrame(columns=['A','B','C','D','E'])
data['A'] = np.random.normal(5,2,n)
data['B'] = np.random.normal(10,2,n)
data['D'] = 2*data['A'] + 3*data['B'] + np.random.normal(0,2,n)
data['C'] = np.random.normal(-5,2,n)
data['E'] = 3*data['C'] + 3*data['D'] + np.random.normal(0,2,n)

lg.set_data(data)

3. 设置证据

证据是可选的,可以在运行推理之前设置。

 lg.set_evidences({'A':5,'B':10})

4. 运行推理

对于每个节点,CPT(条件概率分布)定义为:


其中,其参数是使用父节点和节点的条件分布计算的:


run_inference()返回每个节点的推断均值和方差。

lg.run_inference(debug=False)

附加功能:

lg.plot_distributions(save=False)


lg.network_summary()


lg.draw_network(filename='sample_network',open=True)



例子

笔记本:线性高斯网络

已知的问题

GaussianBP 算法对于某些特定的精度矩阵(逆协方差)不收敛。解决方案是使用Graphcial Lasso或类似的估计器方法来找到精度矩阵。欢迎请求请求。

参考:

线性高斯网络
  1. 概率图形模型 - 原理和技术,Daphne Koller,第 7.2 章

  2. 高斯贝叶斯网络

高斯信念传播
  1. 概率图形模型 - 原理和技术,Daphne Koller,第 14.2.3 章
  2. 高斯信念传播:理论与应用,丹尼·比克森

执照

MIT 许可证 版权所有 (c) 2020,Prasad Ostwal

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

LGNpy-1.0.0.tar.gz (11.8 kB 查看哈希

已上传 source

内置分布

LGNpy-1.0.0-py3-none-any.whl (15.7 kB 查看哈希

已上传 py3