2015-02-05 3 views
1

저는 python-igraph와 특히 community_walktrap 함수를 이해하려고합니다. 나는 3로 지역 사회의 최적의 수를 가정 한 것이다optimal_count가 올바른 결과를 제공하지 않는 이유는 무엇입니까?

import numpy as np 
import igraph 

mat = np.zeros((200,200)) + 50 
mat[20:30,20:30] = 2 
mat[80:90,80:90] = 2 

g = igraph.Graph.Weighted_Adjacency(mat.tolist(), 
            mode=igraph.ADJ_DIRECTED) 
wl = g.community_walktrap(weights=g.es['weight']) 

,하지만 난 3 wl.as_clustering(3) 절단 할 dendrogram은 강제 경우 나에게 1을 제공

print wl.optimal_count 

실행 : 나는 다음과 같은 예를 생성 나는 올바른 회원 목록을 얻습니다. optimal_count에서 내가 뭘 잘못하고 있니?

답변

0

왜 최적 클러스터 수는 3이라고 생각하십니까? 모든 노드는 연결이 약한 두 개의 작은 그룹을 제외하고는 서로에 대해 상당히 강한 연결을 가지고있는 것으로 보입니다 (그들은 50의 가중치를가집니다). igraph의 클러스터링 방법은 가중치가 거리가 아닌 인 유사점을 나타낼 것으로 예상합니다. 또한, igraph에서 대부분의 클러스터링 알고리즘은 유향 네트워크에 대해 잘 정의되어 있지 않습니다 (일부는 유 향 네트워크를 거부하기도합니다). 그것은 가치가 무엇인지에 대한

, wl.optimal_count 단순히 소위 모듈화 측정을합니다 (Graph 클래스의 modularity() 방법 참조) 계산하고 모듈화가 가장 높은 클러스터의 수를 선택합니다. 단 하나의 클러스터를 가진 모듈성은 0입니다 (이것은 정의에 의해 측정이 작동하는 방식입니다). 세 개의 클러스터와 모듈성은 약 -0.0083, 그래서 igraph는 하나 개의 클러스터에만 대신 세 가지를 선택하는 권리 :

>>> wl.as_clustering(3).modularity 
-0.00829996846600007 
>>> wl.as_clustering(1).modularity 
0.0 
+0

그래, 내가 입력 행렬은 어디 높은 숫자 연결성 매트릭스로 설정했다 가정 오른쪽입니다 장거리를 나타냅니다. 모눈을 mat = np.zeros ((200,200)) + 1.50으로 정규화하고 매트 [20 : 30,20 : 30] = 1; 매트 [80 : 90,80 : 90] = 1 정답을주세요. – brorfred

관련 문제