2013-07-31 2 views
2

최근에 나는 약 500k 개의 노드와 120 만 개의 가장자리를 가진 네트워크의 PageRank (및 HITS 및 다양한 중심성 점수)를 계산 한 프로젝트를 수행했습니다. Networkx Python 패키지를 사용하여 PageRank 점수를 계산 한 다음 합리적으로 신뢰할 수있는 외부 데이터 소스에 대한 선형 회귀 분석을 통해이를 테스트했습니다. 가중치가 적용되지 않은 점수는 외부 데이터와 밀접한 상관 관계가 있었지만 그래프의 가장자리를 어떻게 가중 시키 든 상관없이 가중치가있는 PageRank 점수가 모두 동일한 값 (고정밀도 부동 소수점을 가짐)을 나타내며 혼동을 일으켰습니다. 외부 데이터를 전혀 사용하지 않습니다. 나는 내가 알지 못했던 가장자리를 추가하는 코드에 몇 가지 오류가 있었는지 또는 충분한 수의 반복 후에 가장자리 가중치와 상관없이 실제로 PageRank가 동일한 값으로 수렴 할 수 있는지 여부를 파악하려고합니다. PageRank 값 시작에 관계없이 수행됩니다.가중치와 상관없이 가중치가있는 PageRank 값이 동일한 값으로 수렴 될 수 있습니까?

실제로 각 가장자리의 가중치가 다르게 적용될 수 있지만 PageRank가 동일한 값을 생성합니까? 아니면 뭔가 내 네트워크 가장자리와 망친거야?

감사합니다.

편집 : PageRank 기타 질문은 나가는 모든 가중치를 정규화해야한다는 것을 설명하는 것처럼 보이지만 분명히하지 않았습니다. 내 가중치는 모두 4, 10, 15 등 정수입니다. 문제가 될 수 있습니까?

+1

가중치를 정규화하지 않아도됩니다. – Aric

+0

답변이 잘못되었다고 생각하는 작은 예를 게시 할 수 있습니까? 그렇지 않으면 아마 더 이상 당신을 도울 수 없습니다. – Aric

답변

2

아마도 이가?

networkx.pagerank() 함수의 기본 호출 인수는 알고리즘이 'weight'속성을 사용해야 함을 지정합니다. 가장자리에 'weight'속성이 있지만 무시하고 싶다면 weight = None을 선택하십시오. 예 :

In [1]: import networkx as nx 

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

In [3]: G.add_edge(1,2,weight=7.0) 

In [4]: G.add_edge(1,3,weight=70.0) 

In [5]: nx.pagerank(G) 
Out[5]: {1: 0.259740259292235, 2: 0.27981109766708, 3: 0.460448643040685} 

In [6]: nx.pagerank(G,weight=None) 
Out[6]: {1: 0.259740259292235, 2: 0.3701298703538825, 3: 0.3701298703538825} 

In [7]: nx.pagerank(G,weight='weight') 
Out[7]: {1: 0.259740259292235, 2: 0.27981109766708, 3: 0.460448643040685} 
+0

흠, 분명히 weight = None으로 pagerank를 호출하지 않았기 때문에 이것은 아마도 그렇지 않았습니다. 그래도 감사합니다! – twneale