효율적인 그래프 클러스터링 알고리즘


20

큰 그래프에서 클러스터를 찾는 효율적인 알고리즘을 찾고 있습니다 (약 5000 개의 정점과 10000 개의 모서리가 있음).

지금까지 JUNG Java 라이브러리에 구현 된 Girvan–Newman 알고리즘을 사용하고 있지만 많은 에지를 제거하려고 할 때 속도가 느립니다.

큰 그래프에 대한 더 나은 대안을 제안 해 주시겠습니까?


k- 평균을 보았습니까?
Oded

그래프에서 사용하는 방법에 대해 배울 수있는 참고 자료를 제공해 주시겠습니까?
mariosangiorgio


VoltageClusterer의 JUNG 구현으로 전환했으며 확실히 빠릅니다. jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/…
mariosangiorgio

1
< cs.stackexchange.com >은 소프트웨어 엔지니어보다 컴퓨터 과학에 관한 것이기 때문에 더 적합하지 않습니까?
Oeufcoque Penteano

답변:


13

개인적으로 Markov 클러스터링을 제안 합니다 . 나는 과거에 좋은 결과를 여러 번 사용했습니다.

선호도 전파 는 또 다른 가능한 옵션이지만 Markov 클러스터링보다 일관성이 떨어지는 것 같습니다.

다양한 다른 옵션이 있지만이 두 가지 옵션은 기본적으로 적합하며 군집화 그래프의 특정 문제 (희소 행렬로 볼 수 있음)에 적합합니다. 사용중인 거리 측정도 고려해야합니다. 적절한 지표를 사용하면 인생이 더 쉬워 질 것입니다.

성능 벤치 마크를 찾는 동안 이 문서 를 찾았습니다. 주제에 대한 좋은 조사입니다.


감사합니다. 제안한 모든 알고리즘을 살펴 보겠습니다.
mariosangiorgio

수정 :이 알고리즘은 거리가 아니라 유사성을 반영하는 입력 가중치로 필요합니다. 메트릭 속성 (삼각형 부등식)이 들어오지 않습니다. 가중치를 변환하는 것이 유용 할 수 있습니다 (예 : 여기에 설명 된 (Pearson) 상관 관계 ( micans.org/mcl/man/clmprotocols.html#array ) 및 여기에 설명 된 BLAST E- 값) ( micans.org/mcl/man/clmprotocols.html#blast ).
micans

10

계층 적 클러스터링

이것은 친구에 의해 나에게 추천되었습니다. Wikipedia 에 따르면 :

이 방법에서 노드 쌍들 사이의 유사성 유형을 정량화하는 유사성 측정법을 정의합니다. 일반적으로 사용되는 측정에는 코사인 유사성, Jaccard 인덱스 및 인접 행렬의 행 사이의 해밍 거리가 포함됩니다. 그런 다음이 측정에 따라 유사한 노드를 커뮤니티로 그룹화합니다. 그룹화를 수행하는 몇 가지 일반적인 체계가 있으며, 가장 간단한 두 가지 단일 연결 클러스터링입니다. 다른 그룹의 모든 노드 쌍이 주어진 임계 값보다 낮은 유사성과 완전한 연결 클러스터링 인 경우에만 두 그룹이 별도의 커뮤니티로 간주됩니다. 모든 그룹의 모든 노드가 임계 값보다 큰 유사성을 갖습니다.

마르코프 클러스터

이것이 내가 당신의 상황에서 사용하는 것입니다. 매우 유용한 알고리즘입니다. 알고리즘에 대한 멋진 PDF연결 되는 링크를 찾았습니다 . 그것은 훌륭한 알고리즘이며, 더 좋은 용어가 없으면 극도로 "강력한"것이다. 사용 해보고 참조하십시오.


5

여기서 문제를 해결하기 위해 정점 모서리를 각 정점의 좌표 세트에 매핑하는 방법을 고려해야한다고 생각합니다. 더 좋은 방법이 있는지 확실하지 않습니다. 그러나 각 정점을 차원으로 표시하여 시작하면 특정 정점의 가장자리 값이 해당 특정 차원에 대해 작업 해야하는 값이됩니다. 그 후 당신은 간단한 유클리드 거리를 가지고 그 일을 할 수 있습니다.


1
조금 읽은 후에, 나는 이것을 발견 했다. 그리고 나는 당신이 봐야한다고 생각한다.
viki.omega9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.