내가 본 대부분의 클러스터링 알고리즘은 모든 지점 사이에 거리를 좁히는 것으로 시작하여 더 큰 데이터 세트에서 문제가됩니다. 하지 않는 것이 있습니까? 아니면 일종의 부분적 / 대략적 / 스 태거 방식입니까?
어떤 클러스터링 알고리즘 / 구현이 O (n ^ 2)보다 적은 공간을 차지합니까?
알고리즘 목록과 시간 및 공간 요구 사항이 있습니까?
내가 본 대부분의 클러스터링 알고리즘은 모든 지점 사이에 거리를 좁히는 것으로 시작하여 더 큰 데이터 세트에서 문제가됩니다. 하지 않는 것이 있습니까? 아니면 일종의 부분적 / 대략적 / 스 태거 방식입니까?
어떤 클러스터링 알고리즘 / 구현이 O (n ^ 2)보다 적은 공간을 차지합니까?
알고리즘 목록과 시간 및 공간 요구 사항이 있습니까?
답변:
일부 클러스터링 알고리즘은 공간 인덱스 구조를 사용할 수 있습니다. 예를 들어 , 인덱스가 조회를 허용하는 한 DBSCAN 및 OPTICS가 시간 에 실행될 수 있습니다 .
분명히이 복잡성에서 실행되는 알고리즘은 거리 행렬을 만들지 않습니다 .
단일 연결 및 전체 연결을 사용한 계층 적 클러스터링과 같은 일부 알고리즘의 경우 사용 가능한 최적화 알고리즘 (SLINK, CLINK)이 있습니다. 대부분의 사람들은 얻을 수있는 것과 구현하기 쉬운 것을 사용합니다. 그리고 계층 적 군집화는 거리 행렬에 걸쳐 반복을 사용하여 순진하게 구현하기 쉽습니다 ( 알고리즘 결과).
클러스터링 알고리즘을 비교하는 완전한 목록을 알지 못합니다. 결국 100 개 이상의 클러스터링 알고리즘이있을 것입니다. 예를 들어, 12 개 이상의 k- 평균 변형이 있습니다. 또한 메모리 복잡성과 런타임 복잡성이 있습니다. 평균적인 경우와 최악의 경우가 있습니다. 구현 차이가 매우 큽니다 (예 : 위에서 언급 한 단일 링크; 인덱스를 사용하지 않으므로 이고 전체 거리 행렬 을 저장할 필요가없는 DBSCAN 구현 그런 다음 여전히 모든 쌍별 거리를 계산해야합니다. 또한 수많은 매개 변수가 있습니다. k- 평균의 경우중요합니다. 거의 모든 알고리즘에서 거리 함수는 큰 차이를 만듭니다 (많은 구현은 유클리드 거리 만 허용합니다 ...). 그리고 유클리드와 같은 사소한 것 이외의 값 비싼 거리 함수에 도달하면 거리 계산의 수가 빠르게 주요 부분이 될 수 있습니다. 따라서 총 작업 수와 필요한 거리 계산 수를 구분해야합니다. 따라서 연산에 있지만 거리 계산 에만 있는 알고리즘 은 거리 함수가 실제로 비싼 경우 (예 : 거리 인 알고리즘을 쉽게 능가 할 수 있습니다. 함수 자체는 )입니다.
좋은 질문. 3 개의 가장 가까운 이웃에 대한 짚맨 방법은 각 데이터 포인트의 Nsample 이웃을 샘플링하여 가장 가까운 3을 유지하는 것입니다. 데이터에 쉽게 표시 됩니다. 추가 트릭은 이웃의 이웃을 점검하여 직접 이웃보다 가까운 것이 있는지 확인하는 것입니다. 또한 입력 데이터가 이미 잘 섞여 있으면 블록 단위로 샘플링하십시오. 그렇지 않으면 캐시가 작동합니다.
(추가) :
R의 fastcluster 를 참조 하고 SciPy v0.11을 믿습니다.
텍스트는 google-all-pairs-similarity-search를 참조하십시오
.
"클러스터링 알고리즘을 선택하는 것보다 클러스터링으로 성공하기 위해서는 적절한 비 유사성 측정이 훨씬 더 중요합니다."- selection-clustering-method .