我想知道如何比较随机网络和无标度网络。我现在给出了这两种网络(例如聚类)之间的区别,以及它们的特征参数(无标度网络中的γ和节点的n- nb,随机网络的边数k)。但是如果说,我想比较一下信息在这两个网络中是如何传播的,那么我如何选择gamma和k来获得类似的“设置”呢?我不想得到相同的网络(我知道它们有不同的属性),只是为了能够有效地比较它们。
我在考虑用10,000个无标度网络的平均连接数,伽马= 2,并相应地为随机网络选择k。说得通吗?
ps:我正在使用Networkx来生成我的网络。
发布于 2017-01-14 10:21:41
我想比较一下信息在这两个网络中的传播方式
为此,您可以使用效率 (“网络的效率是衡量它交换信息的效率的一种度量”)。您可以在networkx中将其计算为1/L,其中L是平均最短路径长度。
在下面的代码中,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
当然,在比较图表时,您也可以使用其他网络度量,例如平均聚类等。
现在,你标题中的问题。
如何比较无标度网络和随机网络?
我认为显示无标度网络和随机网络之间区别的最直观的方法是绘制(排序/排序)节点度。
从下面的图片中,你可以立即猜出哪一个是无标度的,哪个是随机网络。
我用下面的代码得到了图像(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
)取决于随机生成的图形。
最后一个提示:如果要绘制多个无标度图,请考虑使用日志图。
https://stackoverflow.com/questions/41613077
复制相似问题