【问题标题】:How to compare a scale free and random network?如何比较无标度网络和随机网络?
【发布时间】:2017-01-14 21:33:22
【问题描述】:

我想知道如何以某种方式比较随机网络和无标度网络。我现在区分这两种类型的网络(例如聚类)和表征它们的参数(在无标度网络和 n-nb 个节点的情况下的伽玛,k - 随机网络的边数)之间的区别。但是,如果说,我想比较信息在这两个网络中的传播方式,那么我如何选择 gamma 和 k 来获得可比较的“设置”?我不想获得相同的网络(我知道它们具有不同的属性),只是为了能够有效地比较它们。

我正在考虑使用从 10,000 个 gamma = 2 的无标度网络中获得的平均链接数,并相应地为随机网络选择 k。是否有意义 ?

ps:我正在使用 Networkx 来生成我的网络。

【问题讨论】:

    标签: networking networkx


    【解决方案1】:

    我想比较一下信息在这两个网络中的传播方式

    为此,您可以使用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) 取决于随机生成的图形。

    最后一个提示:如果您要绘制多个无标度图,请考虑使用对数图。

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 2017-02-15
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多