0

我面临与此链接(Networkx PageRank - Equal Ranks with different Weights)中表达的相同的问题。

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

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

有谁知道修改pagerank以实现这一目标的正确方法是什么。

在此先感谢,阿米特

4

2 回答 2

2

也许你在想什么 Larry 和 Sergey 所谓的“个性化 PageRank”?您可以在算法的随机跳跃部分调整节点的权重以创建偏差。例如

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

于 2014-10-20T02:45:15.333 回答
-1

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

从本质上讲,从 networkx 代码(algorithms/link_analysis/pagerank_alg.py)中删除这一行就可以了:-

W = x.stochastic_graph(D, weight=weight)

于 2014-10-21T15:21:13.783 回答