큰 그래프에서 클러스터를 찾는 효율적인 알고리즘을 찾고 있습니다 (약 5000 개의 정점과 10000 개의 모서리가 있음).
지금까지 JUNG Java 라이브러리에 구현 된 Girvan–Newman 알고리즘을 사용하고 있지만 많은 에지를 제거하려고 할 때 속도가 느립니다.
큰 그래프에 대한 더 나은 대안을 제안 해 주시겠습니까?
큰 그래프에서 클러스터를 찾는 효율적인 알고리즘을 찾고 있습니다 (약 5000 개의 정점과 10000 개의 모서리가 있음).
지금까지 JUNG Java 라이브러리에 구현 된 Girvan–Newman 알고리즘을 사용하고 있지만 많은 에지를 제거하려고 할 때 속도가 느립니다.
큰 그래프에 대한 더 나은 대안을 제안 해 주시겠습니까?
답변:
개인적으로 Markov 클러스터링을 제안 합니다 . 나는 과거에 좋은 결과를 여러 번 사용했습니다.
선호도 전파 는 또 다른 가능한 옵션이지만 Markov 클러스터링보다 일관성이 떨어지는 것 같습니다.
다양한 다른 옵션이 있지만이 두 가지 옵션은 기본적으로 적합하며 군집화 그래프의 특정 문제 (희소 행렬로 볼 수 있음)에 적합합니다. 사용중인 거리 측정도 고려해야합니다. 적절한 지표를 사용하면 인생이 더 쉬워 질 것입니다.
이것은 친구에 의해 나에게 추천되었습니다. Wikipedia 에 따르면 :
이 방법에서 노드 쌍들 사이의 유사성 유형을 정량화하는 유사성 측정법을 정의합니다. 일반적으로 사용되는 측정에는 코사인 유사성, Jaccard 인덱스 및 인접 행렬의 행 사이의 해밍 거리가 포함됩니다. 그런 다음이 측정에 따라 유사한 노드를 커뮤니티로 그룹화합니다. 그룹화를 수행하는 몇 가지 일반적인 체계가 있으며, 가장 간단한 두 가지 단일 연결 클러스터링입니다. 다른 그룹의 모든 노드 쌍이 주어진 임계 값보다 낮은 유사성과 완전한 연결 클러스터링 인 경우에만 두 그룹이 별도의 커뮤니티로 간주됩니다. 모든 그룹의 모든 노드가 임계 값보다 큰 유사성을 갖습니다.
이것이 내가 당신의 상황에서 사용하는 것입니다. 매우 유용한 알고리즘입니다. 알고리즘에 대한 멋진 PDF 로 연결 되는 링크를 찾았습니다 . 그것은 훌륭한 알고리즘이며, 더 좋은 용어가 없으면 극도로 "강력한"것이다. 사용 해보고 참조하십시오.
여기서 문제를 해결하기 위해 정점 모서리를 각 정점의 좌표 세트에 매핑하는 방법을 고려해야한다고 생각합니다. 더 좋은 방법이 있는지 확실하지 않습니다. 그러나 각 정점을 차원으로 표시하여 시작하면 특정 정점의 가장자리 값이 해당 특정 차원에 대해 작업 해야하는 값이됩니다. 그 후 당신은 간단한 유클리드 거리를 가지고 그 일을 할 수 있습니다.