我想知道如何以某种方式比较随机和无标度网络。我现在区分这两种类型的网络(例如聚类)和哪些参数表征它们(在无标度网络和节点n-nb的情况下为伽马,k-随机网络的边缘数)。但是,如果说,我想比较信息在这两个网络中的传播方式,那么我如何选择gamma和k来获得可比的“设置”呢?我不想得到相同的网络(我知道他们有不同的属性),只是为了能够有效地比较它们。
我正在考虑使用从10,000个无标度网络获得的平均链接数,其中gamma = 2,并相应地为随机网络选择k。是否有意义 ?
ps:我正在使用Networkx来生成我的网络。
答案 0 :(得分:0)
我想比较信息在这两个网络中的传播方式
为此,您可以使用efficiency("网络的效率衡量它交换信息的效率")。 您可以在networkx中将其计算为1 / L,其中L是average shortest path length。
在下面的代码中,G是无标度图(使用scale_free_graph
生成),H是随机图(使用gnp_random_graph
生成)。注意,两个图都具有相同数量的节点(200);这样他们就更具有可比性。
import networkx as nx
G = nx.scale_free_graph(200)
H = nx.gnp_random_graph(200, 0.5)
print("Efficiency for G:", 1.0/nx.average_shortest_path_length(G))
print("Efficiency for H:", 1.0/nx.average_shortest_path_length(H))
每次运行代码时,下面的输出都会有所不同(图表是随机生成的)。您可以创建多个无标度/随机图,获得它们的平均效率,然后比较这些值。
Efficiency for G: 3.67192545437771
Efficiency for H: 0.6666890013065765
比较图表时,您当然也可以使用其他网络措施,例如: average clustering等。
现在,标题中的问题。
如何比较无标度和随机网络?
我认为展示无标度网络和随机网络之间差异的最直观方式是绘制(排名/排序)节点度数。
从下图中您可以立即猜出哪个是无标度的,哪个是随机网络。
我使用以下代码获得了图像(G和H是之前的图形)。
import matplotlib.pyplot as plt
degree_sequence = sorted(nx.degree(G).values(), reverse=True)
plt.plot(degree_sequence, 'b-')
degree_sequence = sorted(nx.degree(H).values(), reverse=True)
plt.plot(degree_sequence, 'r-')
plt.ylabel("degree")
plt.xlabel("rank")
plt.show()
由于节点度(degree_sequence
)取决于随机生成的图形,您当然会得到略有不同的图像。
最后一个提示:如果您要绘制多个无标度图,请考虑使用对数 - 对数图。