2013-07-01 3 views
1

Python에서 iGraph의 커뮤니티 감지 함수 community_fastgreedy()를 사용하여 VertexDendrogram 객체를 얻었습니다. V.를 호출합니다. 그런 다음 V.as_clustering()을 사용하여 VertexClustering 객체를 가져 왔습니다. 덴도 그램. 모듈러가 최대화 될 수 있도록 커뮤니티가 클러스터되어 있다는 것을 알고 있지만 덴 드 그램 객체가 계속 병합되는 것으로 생각합니다. 따라서 덴도 그램에서 커뮤니티를 보는 것은 어렵습니다.iGraph in Python : VertexDendrogram 객체와 VertexClustering 객체 간의 관계

제 질문은 : V.as_clustering()의 결과는 맹장지에있는 커뮤니티 간의 거리에 어떻게 일치합니까?

다른 말로하면, 커뮤니티에는 대표 번호 (예 : Community [0], Community [2])가 있습니다. 따라서 그 번호는 맹장지의 위치와 어떻게 일치합니까? dendrogram이 모듈화를 최대화하는 수준까지 병합 될 때 커뮤니티 0과 커뮤니티 1이 서로 인접 해 있으며 3보다 커뮤니티 0에서 더 멀리있는 커뮤니티 12입니까?

그렇지 않은 경우 as_clustering 기능에 의해 결정되는 출력의 순서 (각 커뮤니티의 번호)는 어떻게됩니까?

미리 감사드립니다. igraph의 알고리즘은 VertexDendrogram를 생성하면

답변

3

, 그것을 임의로 어떤 의미에서 최적이다 VertexClustering를 구하는 (즉, 얼마나 많은 병합 후) 여기서 Dendrogram이 잘라 말해 준다 그뿐만 아니라 "힌트"를 생성 할 수있다. 예를 들어, community_fastgreedy()에 의해 생성 된 VertexDendrogram은 모듈화가 최대화되는 지점에서 end 드로 그램을 잘라야한다고 제안합니다. VertexDendrogram에서 as_clustering()을 실행하면 클러스터링 알고리즘에 의해 생성 된 힌트를 사용하여 덤 드로 그램을 클러스터링으로 단순화하지만 원하는 클러스터 수를 as_clustering()의 인수로 지정하여이를 대체 할 수 있습니다.

두 커뮤니티 간의 "거리"는 대부분의 커뮤니티 검색 방법이 정보를 제공하지 않기 때문에 복잡한 일입니다. 그들은 단순히 각 정점에서부터 모든 사람들을 캡슐화하는 메가 - 커뮤니티까지 일련의 병합을 생성하며, 멍멍 그루터기에 인코딩 된 "거리"정보는 없습니다. 즉, 멍멍의 분지는 길이가 없다. 당신이 할 수있는 최선의 방법은 아마 당신의 그래프로 되돌아 가서 커뮤니티 간의 경계 밀도를 확인하는 것입니다. 이것은 친밀감을 나타내는 좋은 지표가 될 수 있습니다. 예를 들면 다음과 같습니다.

cl = g.community_fastgreedy().as_clustering() 
comm1 = cl[0] 
comm2 = cl[1] 
edges_between = g.es.select(_between=(comm1, comm2)) 
print 2.0 * len(edges_between)/len(comm1) * len(comm2) 

그래프가 지시되면 마지막 행에서 2.0 대신 1.0 배수를 사용하십시오.

+0

좋아, 지금 당장 알 수 있듯이 힌트를 사용하여 dendrogram을 as_clustering()로 잘라 내면 결과 커뮤니티 번호는 힌트를 사용하여 덴 드로그램 컷에서의 위치를 ​​나타냅니다. 커뮤니티 [0]과 커뮤니티 [1]은 멍크 라인의 한쪽 끝에서 서로 가장 가깝습니다. 반면에 12와 13은 서로 가깝지만 0과 1에서 멀다고 가정합시다. – Joe

+0

아니요, 커뮤니티 번호는 아무 것도 대표하지 않습니다. 커뮤니티 번호가 동일한 경우에만 두 개의 꼭지점이 같은 커뮤니티에 있다는 것만 다릅니다. –

+0

내 대답은 업데이트를 참조하십시오. –