2013-11-04 20 views
2

我正在一个加权的DiGraph其中节点= 61634,边缘= 28,378运行PageRank。NetworkX的python:pagerank_numpy,pagerank失败,但pagerank_scipy的作品

  • pagerank(G)抛出我ZeroDivsionError

  • pagerank_numpy(G)抛出我ValueError异常:数组大

  • pagerank_scipy(G)给我的网页排名虽然

我能理解pagerank_numpy错误会由于内存限制,但为什么pagerank失败?我尝试添加一个无限小的值到零权重的边,但同样的问题依然存在。有些指针会很好。不像pagerank_numpypagerank_scipy -

链接到我的GraphML文件 - https://mega.co.nz/#!xlYzEDAI!Lyh5pD-NJL61JPfkrNyJrEm0NnFc586A0MUD8OMYAO0

NetworkX版本 - 1.8.1 Python的 - 因为它执行使用stochastic_graph其计算2.7

回答

2

pagerank失败。从文档,stochastic_graph要求:

一个NetworkX图形,必须拥有有效的边权

这种“有效边权重”点(这是不是在所有的解释,我认为这是一个错误)是你的问题的根源。

对于有向图,stochastic_graph使用每个节点的out_degree来标准化边。再次来自文档:

[输出]度是与节点相邻的边权重的总和。

所以,当你有零重量或负重量,正常化进程中断与ZeroDivisionError边缘。负面权重是一个问题的原因是他们可以抵消正面权重,从而使节点度数为零。例如,在你的图,节点'2123271'有两个边谁的权重总和0

>>> G.edges('2123271', data=True) 
[('2123271', '1712899', {'weight': -1L}), 
('2123271', '890839', {'weight': 1L})] 

在图形中具有体积小,正沿体重更换负或零边权作出如此pagerank可以运行:

In [1]: import networkx as nx 
In [2]: G = nx.read_graphml("your_graph.graphml") 
In [3]: defaultEdgeWeight = 0.01 
In [4]: for u, v, d in G.edges(data=True): 
      if d['weight'] <= 0: 
       G[u][v]['weight'] = defaultEdgeWeight 
In [5]: P = nx.pagerank(G) 

当然,pagerank在102次迭代后没有收敛,但这是另一个问题。

+0

谢谢你的回应。是否使用'pagerank_scipy'够好,或者听起来像是垃圾进出垃圾?具体而言,我可以使用负权重来保留图表,并使用'pagerank_scipy'获得有意义的结果吗? – Dexter

+0

'pagerank_scipy'应该很好,如果你运行足够长的时间。但是,我不确定您希望使用负权重学习什么。 Pagerank基本上是一个在图形上重新启动的随机游走,其中边缘权重用于衡量访问某些邻居的概率。由于概率是[0,1],我不确定你会如何解释负重。它应该运行,但。 – mdml

+0

如果我加入一个小的默认权重,如权重为负值时所说的那样,会更有意义吗?我更担心结果的解释。 PageRank本质上是达到目的的一种手段。 – Dexter

3

@ mtitan8的回答很好,但故事还有一点点。

由于NetworkX代码进行了修改,这样的PageRank(),pagerank_numpy(),和pagerank_scipy()都给出相同的答案时,有零个或负权重(https://github.com/networkx/networkx/pull/1001

在你原来的问题的时候当你负重时,这些函数产生的结果可能不是你想要的(如果它工作的话)。算法现在处理从输入矩阵(图的加权邻接矩阵)中创建'Google矩阵'的方式是行除以行和,除非它为零(然后整行被设置为零) 。这一数字可能是负面的。

所产生的矩阵仍然负项结束,则 门阶 - 弗罗贝纽斯定理不适 http://en.wikipedia.org/wiki/Perron%E2%80%93Frobenius_theorem,你 不保证具有积极的价值 特征向量唯一的最大特征值。

+0

谢谢@Aric我只看维基百科文章,显然对非负矩阵有一个Perron-Frobenius定理的扩展。我想知道是否有更多的东西比满足眼睛。 https://en.wikipedia.org/wiki/Perron%E2%80%93Frobenius_theorem#Non-negative_matrices – Dexter

+1

如果您在“Google矩阵”中有否定条目,则该定理不适用。 – Aric

相关问题