使用绝对权重在加权图上计算pagerank

时间:2014-10-19 00:49:45

标签: graph networkx pagerank stochastic

我遇到了与此链接(Networkx PageRank - Equal Ranks with Different Weights)中表达的相同的问题。

基本上,我使用networkx来计算图表上的pagerank。因为,pagerank计算首先将图形转换为右边的随机矩阵(所有外出边缘被归一化为一个)。

我需要的是一种不标准化边缘权重的方法。因此,如果一个节点只有一个输出边,权重为0.1而另一个只有一个输出边,权重为0.05,我希望这个信息用于计算pagerank(而不是标准化为1)。

有谁知道修改pagerank以实现此目的的正确方法。

提前谢谢, 阿米特

2 个答案:

答案 0 :(得分:2)

也许你正在考虑拉里和谢尔盖所谓的“个性化PageRank”?您可以在算法的随机跳转部分中调整节点的权重以创建偏差。 E.g。

In [1]: import networkx as nx

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

In [3]: G.add_path([1,2,3,4])

In [4]: nx.pagerank_numpy(G)
Out[4]: 
{1: 0.11615582303660349,
 2: 0.2148882726177166,
 3: 0.29881085476166286,
 4: 0.370145049584017}

In [5]: nx.pagerank_numpy(G,personalization={1:1,2:10,3:1,4:1})
Out[5]: 
{1: 0.031484535189871404,
 2: 0.341607206810105,
 3: 0.3218506609784609,
 4: 0.3050575970215628}

例如,请参阅此处的讨论http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf

答案 1 :(得分:-1)

我有一个不正确的图形(即边缘权重在节点之间是绝对且一致的)。我改变了networkx的pagerank实现,以避免将初始矩阵转换为右边的随机矩阵,从而给出了正确的答案。然而,这意味着Pagerank不会收敛,因为有时边的总和> 1,但通常在30-40次迭代后排名相当一致。

本质上,从networkx代码中删除此行(algorithms / link_analysis / pagerank_alg.py)完成了这项工作: -

W = x.stochastic_graph(D,体重=体重)