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

LGNp的Python项目详细描述


线性高斯贝叶斯网络.表示,学习和推理

Build StatusPyPI - LicensePyPI - Python VersionDocumentation StatuscodecovDownloads

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

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

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

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

    在_

安装

$ pip install lgnpy

或者克隆存储库。在

^{pr2}$

入门

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

1。创建网络

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

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

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

np.random.seed(42)n=100data=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)

示例

笔记本:Linear Gaussian Networks

已知问题

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

参考文献:

线性高斯网络
  1. Probabilistic Graphical Models - Principles and Techniques ,达芙妮·科勒,第7.2章

    在_
  2. Gaussian Bayesian Networks,萨尔古尔斯里哈里

    在_
高斯置信传播
  1. Probabilistic Graphical Models - Principles and Techniques ,达芙妮·科勒,第14.2.3章
  2. Gaussian Belief Propagation: Theory and Aplication,丹尼·比克森

许可证

麻省理工学院许可证版权所有(c)2020,Prasad Ostwal

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

推荐PyPI第三方库


热门话题
java如何在没有代码气味的情况下编写遵循Liskov替代和其他可靠原则的不可变映射?   java最新jre上的压缩字符串对旧编译代码有好处吗?   java是否可以在javascript中取消PrimeFaces menuitem onclick函数   mysql从SQL数据库中访问java中xml名称空间标记的值   从java程序打开excel文件   java在方法中使用“var”是否会使执行(并发)线程不安全?   java使搜索视图以一种关于AndroidManifest的通用方式可用。xml   java对如何准确使用正则表达式感到困惑?   mule如何访问java文件中的记录变量   java在从2D数组引发异常后继续   枚举当前设置为的java值   java当listview只有几个项目时,如何使alert对话框显示listview的所有项目?   java getTableRow()返回大于项大小的索引   c用java传输二进制文件(数据)   java更改多选列表项复选框颜色