2017-02-10 8 views
3

. 파이썬 응용 프로그램을 .Net/Windows로 이식하려고합니다. 원래 응용 프로그램은 NetworkX 구현의 pagerank를 사용합니다.pagerank Networkx와 iGraph의 결과가 일치하지 않습니다.

아래의 데이터 세트에 대한 원래 코드를 실행하면 한 세트의 결과가 나타납니다. iGraph 페이지 랭크를 사용하여 동일한 데이터 세트라고 판단되는 데이터를 실행할 때 다른 결과 세트가 생성됩니다.

누구든지 아래 데이터를 검토하고 연결 해제의 원인을 파악할 수 있습니까? 그래프

시작

iGraph

h = Graph() 
h.add_vertices([0,1,2,3,4,5,6,7]) 
h.add_edge(1, 2, weight = 1.237635735532509) 
h.add_edge(1, 3, weight = 1.3176784432060453) 
h.add_edge(2, 5, weight = 0.1) 
h.add_edge(2, 7, weight = 1.6545276334003642) 
h.add_edge(3, 0, weight = 0.4013877113318902) 
h.add_edge(3, 5, weight = 0.9056698458264134) 
h.add_edge(3, 7, weight = 3.4462871026284194) 
h.add_edge(4, 5, weight = 0.9693717489378296) 
h.add_edge(4, 7, weight = 1.3176784432060453) 
h.add_edge(5, 7, weight = 1.6053605156578263) 
h.add_edge(7, 2, weight = 0.8068528194400547) 
h.add_edge(7, 3, weight = 0.9771288098085582) 
h.add_edge(7, 4, weight = 4.317678443206045)     
h.add_edge(7, 5, weight = 2.0108256237659905) 

z = h.pagerank() 

수익률을 사용하여 NetworkX 페이지 랭크 (PageRank)를 실행

0: 0.030658861877660655 
1: 0.025151437717922904 
2: 0.06899335192504014 
3: 0.0767301059609998 
4: 0.20435115331218195 
5: 0.19799952556413375 
7: 0.39611556364206074 

사용하여 페이지 랭크 (PageRank)를 실행

From , To, Weight 
------------------------------------------ 
[1, 2, 1.237635735532509] 
[1, 3, 1.3176784432060453] 
[2, 5, 0.1] 
[2, 7, 1.6545276334003642] 
[3, 0, 0.4013877113318902] 
[3, 5, 0.9056698458264134] 
[3, 7, 3.4462871026284194] 
[4, 5, 0.9693717489378296] 
[4, 7, 1.3176784432060453] 
[5, 7, 1.6053605156578263] 
[7, 2, 0.8068528194400547] 
[7, 3, 0.9771288098085582] 
[7, 4, 4.317678443206045] 
[7, 5, 2.0108256237659905] 

결과 ....

0.08263947646845539 
0.11209944263156851 
0.13863513488523824 
0.2088786898834253 
0.0909928717668216 
0.15533634946784883 
0.04713009918827309 
0.16428793570836897 
당신이 제공 할 수있는 모든 지침을 크게 감상 할 수

0.05046861007484653 
0.08032641955693953 
0.1387381559084609 
0.18249744338552665 
0.10389267832310527 
0.16623355776440546 
0.019058750577540366 
0.2587843844091753 

17,451,515,

pagerank(None,True,.85,'weight',None,'prpack',1000,.001) 반환

0.06306529189761995 
0.1213272777521786 
0.12419698504275958 
0.21601479253860403 
0.0845752983652644 
0.10892203451714054 
0.05260867410276095 
0.22928964578367186 

pagerank(None,True,.85,'weight',None,'power',1000,.001) 돌아갑니다.

답변

2

페이지 순위의 차이로 이어지는 몇 가지 사항이 있습니다. 첫째, networkx 그래프에는 노드 6 (분리)이 없지만 igraph 그래프가 있습니다. 둘째, igraph 그래프가 지시되었는지 확인하십시오. 이렇게하면 페이지 순위 점수는 거의 동일합니다 (적어도 소수점 첫째 자리까지).

import igraph as ig 
import networkx as nx 
G=nx.DiGraph() 
G.add_nodes_from([0,1,2,3,4,5,6,7]) #Add node 6 
G.add_edge(1, 2,weight= 1.237635735532509) 
G.add_edge(1, 3,weight= 1.3176784432060453) 
G.add_edge(2, 5,weight= 0.1) 
G.add_edge(2, 7,weight= 1.6545276334003642) 
G.add_edge(3, 0,weight= 0.4013877113318902) 
G.add_edge(3, 5,weight= 0.9056698458264134) 
G.add_edge(3, 7,weight= 3.4462871026284194) 
G.add_edge(4, 5,weight= 0.9693717489378296) 
G.add_edge(4, 7,weight= 1.3176784432060453) 
G.add_edge(5, 7,weight= 1.6053605156578263) 
G.add_edge(7, 2,weight= 0.8068528194400547) 
G.add_edge(7, 3,weight= 0.9771288098085582) 
G.add_edge(7, 4,weight= 4.317678443206045) 
G.add_edge(7, 5,weight= 2.0108256237659905) 

h = ig.Graph(directed = True) #Ensure the graph is directed 
h.add_vertices([0,1,2,3,4,5,6,7]) 
h.add_edge(1, 2, weight = 1.237635735532509) 
h.add_edge(1, 3, weight = 1.3176784432060453) 
h.add_edge(2, 5, weight = 0.1) 
h.add_edge(2, 7, weight = 1.6545276334003642) 
h.add_edge(3, 0, weight = 0.4013877113318902) 
h.add_edge(3, 5, weight = 0.9056698458264134) 
h.add_edge(3, 7, weight = 3.4462871026284194) 
h.add_edge(4, 5, weight = 0.9693717489378296) 
h.add_edge(4, 7, weight = 1.3176784432060453) 
h.add_edge(5, 7, weight = 1.6053605156578263) 
h.add_edge(7, 2, weight = 0.8068528194400547) 
h.add_edge(7, 3, weight = 0.9771288098085582) 
h.add_edge(7, 4, weight = 4.317678443206045)     
h.add_edge(7, 5, weight = 2.0108256237659905) 

이제, 페이지 순위를 확인 : 나에게

>>> h.pagerank(None,True,.85,'weight',None,'arpack') 
[0.02990667328959136, 
0.02453435976169968, 
0.06730062757414129, 
0.07484756185358077, 
0.199337429914656, 
0.19314195829041825, 
0.02453435976169968, 
0.38639702955421296] 
>>> nx.pagerank(G,alpha=0.85,weight = 'weight') 
{0: 0.029906698992551148, 
1: 0.02453435614919296, 
2: 0.06730055444151634, 
3: 0.07484747242070261, 
4: 0.19933699472630276, 
5: 0.19314246522466136, 
6: 0.02453435614919296, #Here is node 6, missing from your example 
7: 0.3863971018958797} 

한 신비 networkx에 대한 문서가 전원 방식을 사용하여 말한다는 것이다. 그러나 igraph에 대한 전원 방법을 사용하면 다른 결과가 나타납니다. arpack 또는 prpack을 사용하면 거의 동일한 결과가 생성됩니다.