2013-11-04 21 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

相關問題