复杂网络谱熵的拟合包

networkqit的Python项目详细描述


网络:复杂网络的谱熵

最近,量子统计力学提出了一种信息论方法,用来优化网络模型,并评估它们相对于合成网络和现实网络的可能性。 重要的是,该方法不依赖于特定的拓扑特征或网络描述符,而是利用基于熵的网络距离度量。 通过与热力学的类比,网络为谱熵的估计和模型参数的拟合提供了一种计算工具。 这些结果使这一新颖而强大的框架在网络模型推理中得到了实际应用。

文档

此软件包的完整文档正在开发中,目前正在编写中,其当前版本位于:

< div >https://networkqit.github.io/

安装

要使用networkqit包,我们建议使用virtualenv。 networkqit包是纯python,因此它应该在linux、mac osx和windows上工作。 这里我们报告在标准ubuntu linux安装中的使用说明。

如何在Linux上安装

  1. 打开终端,安装pipvirtualenv并克隆此存储库
sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
  1. 您克隆了存储库。现在开始virtualenv会话。
source bin/activate
  1. 如果您在virtualenv会话中,请检查您使用的python版本是否是由virtualenv提供的版本。
which python3
  1. 现在,在virtualenv环境中安装networkqit包。
cd networkqit
python3 setup.py sdist

现在安装创建的python包,该包应该包含所有依赖项matplotlibnumpynetworkxpandasnumdifftoolsbctpy

cd ..
pip3 install networkqit/dist/networkqit-0.1.tar.gz 

入门

在这里,我们将讨论如何使用网络

计算网络的谱熵

首先研究著名空手道俱乐部图密度矩阵的谱熵。 这个例子展示了如何生成本文中所示的谱熵图。

importnetworkxasnxG=nx.karate_club_graph()A=nx.to_numpy_array(G)importnetworkqitasnqimportnumpyasnpimportmatplotlib.pyplotaspltplt.style.use('ggplot')beta_range=np.logspace(-3,3,200)Sbeta=nq.batch_compute_vonneumann_entropy(L=nq.graph_Laplacian(A),beta_range=beta_range)plt.semilogx(beta_range,Sbeta)plt.xlabel('$\\beta$')plt.ylabel('$S$')plt.title('Unnormalized spectral entropy')plt.show()

光谱熵总是在[0,log(n)]范围内,所以如果我们简单地除以logn其中$n$是数字 对于节点,我们在[0,1]范围内重新规范化它。

生成网络模型

网络qit具有大量的网络模型,主要是在最大熵范围内获得的模型 框架。您可以创建许多模型,并使用一致的命名法对其调用方法: 在这里,我们创建一个无向二进制配置模型(ubcm)的实例,并从中抽取10个随机网络 集成,基于在[0,1]域中随机创建的适应度参数

importnetworkqitasnqN=10model=nq.UBCM(N=10)xi=np.random.random([N,])adj_graphs=model.sample_adjacency(xi,batch_size=5)print(adj_graphs.shape)

调用返回一个numpy数组,其中最后两个维度嵌入了5个随机图的邻接矩阵。 该方法适用于networkqit中实现的每个生成模型,并基于用于优化谱熵的最大化和样本方法。

谱熵的经典优化

networkqit还可以使用网络模型拟合。定义模型优化的实用程序在算法包中定义,这里我们将描述如何在非稀疏限制下运行模型优化(在前面的文章中讨论过的限制)。

以下几行描述了期望拉普拉斯模型的优化示例。 我们首先创建一个对象erdosrenyi来描述预期的拉普拉斯(laplacian)邻接。拉普拉斯梯度 关于唯一的连续参数$p$。

importnetworkxasnximportnetworkqitasnqimportnumpyasnpG=nx.karate_club_graph()A=nx.to_numpy_array(G)L=nq.graph_Laplacian(A)beta_range=np.logspace(-3,3,20)ermodel=nq.ErdosRenyi(N=len(A))

我们可以调用ermodel就好像它是一个简单的函数一样:

print(ermodel([0.5]))

这将返回预期的邻接矩阵a34x34矩阵,其中0.5不在对角线上,0在对角线上。 ermodel还允许调用诸如预期拉普拉斯梯度或预期拉普拉斯梯度之类的方法:

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
0

否则,我们可以从鄂尔多斯-仁义模型中抽取10个独立的网络,用样本邻接的方法

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
1

一旦定义了ermodel对象,我们就可以借助于类continuousoptimizer在谱熵框架中优化它的参数。 我们将观测到的邻接矩阵初始化为a和初始解x0=np.array([0.2])。将x0定义为numpy数组很重要。 最后,beta_range是一个numpy数组,其范围为beta以优化模型。

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
2

谱熵的随机优化

大多数模型不允许对其谱似然性进行分析处理。 这需要知道拉普拉斯特征值谱密度的精确解析公式,对于大多数有用的网络模型来说,这仍然是一个尚未解决的问题。 为了进行谱似然优化,我们可以进行随机优化,并找到经验图的参数,以便在模型集合上平均期望的相对熵 最小化。 在networkqit中执行此操作很简单,因为库依赖于autograd包来自动计算随机函数的复杂梯度。

利用机器学习中的优化方法ADAM,我们可以对模型空手道俱乐部网络的鄂尔多斯仁义模型的期望相对熵进行优化,用A表示,并考察了温度逆参数的变化对优化结果的影响。CESS. < /P>

在每次迭代中,从模型中抽取一个批处理大小个数的随机网络,并利用它们的平均谱特性来计算期望相对熵的近似值。 在本例中,我们将看到如何使用n(n-1)自由bernoulli随机变量来优化模型,这些随机变量描述图中的链接。 在for循环的每个阶段,我们都会将结果与原始网络进行比较。我们在ADAM的每次迭代中抽取32个独立网络的样本,以形成计算拉普拉斯谱的良好统计。

这是优化循环的结果。看看模型的谱熵如何近似于经验网络的谱熵。

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
3

 src=

经典极大似然估计

networkqit还具有许多最大熵随机图模型,从软配置模型到鄂尔多斯仁义模型、加权随机图模型和增强配置模型。 你只需打几个电话,就可以把这些模型简单地拟合到经验数据上。 例如,我们将无向配置模型的lagrange乘子拟合到经验网络a上,然后从该模型的最优值中抽取100个网络:

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
4

 src=

在这种情况下,我们不绘制期望的权重,因为这个模型支持只有二进制网络,但如果您愿意,我们可以适合无向增强配置模型:

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
5

 src=

如您所见,使用增强配置模型时,即使网络未加权,权重和链路概率也会正确地安装在模型中。

引用

要引用networkqit,请包括以下bibtex格式的出版物:

sudo apt-get install python3-pip
sudo pip3 install virtualenv
virtualenv workspace
cd workspace
git clone https://github.com/carlonicolini/networkqit
6

在这个链接上也可以使用

待办事项

我想找个人来帮助实现xla,而不是autograd作为自动区分的基本包。实际上,XLA有可能毫不费力地扩展对GPU和(将来)多GPU或TPU系统的计算。可以扩展到更大的问题。

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

推荐PyPI第三方库


热门话题
java OnResizeListener或OnDrawListener或类似的东西   java Orika映射嵌套子列表   保存时java Heroku请求超时代码H12   数据库在Java中出现socket读取超时异常的原因是什么?   java如何更改来自Sqlite数据库的特定数据在Listview中的行颜色   java JAXB解组器无法正确处理XML中的列表   java Android日期时区让我抓狂   java不透明属性在Swing中如何工作?   eclipse从JavaEE代码生成流程图   java如何在Hibernate中从相关表中获取计数   java Glassfish部署了项目的依赖项库   java使内容适合JavaFx中的WebView   java不满意的链接错误libcrypto。所以1.0.0   循环中java数组的使用   java找出哪个包调用服务