无论权重如何,加权PageRank值都可以收敛到相同的值吗?

时间:2013-07-31 20:06:12

标签: graph-algorithm networkx pagerank

我最近做了一个项目,我为一个拥有大约500k节点和120万边缘的网络计算了PageRank(以及HITS和各种中心性分数)。我使用Networkx python包计算了PageRank分数,然后使用线性回归对相对可靠的外部数据源进行了测试。未加权的分数与外部数据密切相关,但我很困惑地发现加权的PageRank分数都出现了相同的值(具有高精度浮点数),无论我如何对图中的边加权,它们都没有关联根本没有外部数据。我试图弄清楚我的代码中是否有一些错误添加了我没注意到的边缘或者PageRank是否可能实际收敛到相同的值,而不管在经过足够多次迭代后的边缘权重,我收集它无论启动PageRank值如何。

我的边缘是否有可能每次运行时的加权不同,但PageRank产生的值相同?或者是我的网络边缘搞砸了什么?

谢谢。

编辑:其他PageRank问题似乎解释了所有外出的权重都必须规范化,我绝对不会这样做。我的权重我们都是整数,比如4,10,15等。这可能是问题吗?

1 个答案:

答案 0 :(得分:2)

也许这就是它?

networkx.pagerank()函数的默认调用参数指定算法应使用'weight'属性。 如果边缘上有'weight'属性但想忽略它,则选择weight = None。 e.g。

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_edge(1,2,weight=7.0)

In [4]: G.add_edge(1,3,weight=70.0)

In [5]: nx.pagerank(G)
Out[5]: {1: 0.259740259292235, 2: 0.27981109766708, 3: 0.460448643040685}

In [6]: nx.pagerank(G,weight=None)
Out[6]: {1: 0.259740259292235, 2: 0.3701298703538825, 3: 0.3701298703538825}

In [7]: nx.pagerank(G,weight='weight')
Out[7]: {1: 0.259740259292235, 2: 0.27981109766708, 3: 0.460448643040685}