我遇到了与此链接(Networkx PageRank - Equal Ranks with Different Weights)中表达的相同的问题。
基本上,我使用networkx来计算图表上的pagerank。因为,pagerank计算首先将图形转换为右边的随机矩阵(所有外出边缘被归一化为一个)。
我需要的是一种不标准化边缘权重的方法。因此,如果一个节点只有一个输出边,权重为0.1而另一个只有一个输出边,权重为0.05,我希望这个信息用于计算pagerank(而不是标准化为1)。
有谁知道修改pagerank以实现此目的的正确方法。
提前谢谢, 阿米特答案 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,体重=体重)