2014-10-28 6 views
0

scikit-learn에서 AgglomerativeClustering을 사용하여 장소의 클러스터 지점을 사용하려고합니다. 점은 _XY에 저장된 좌표 (X, Y)로 정의됩니다.scikit-learn 집계 클러스터링 및 연결

클러스터는 C = kneighbors_graph(_XY, n_neighbors = 20)에 의해 정의 된 연결 매트릭스를 통해 몇 개의 이웃으로 제한됩니다.

일부 클러스터는 이웃 클러스터라고해도 클러스터의 일부가 아니기 때문에 연결 매트릭스를 수정하여이 지점 사이에 0을 넣습니다.

알고리즘은 끝에서 원활하게 실행 만이 일부 클러스터, 즉 함께하지 않아야 포인트, 나는 아이들에서 _C = 0

을 부과하는 몇 몇을 포함, 나는 문제가 발생하는 것을 볼 수있다 _C [i, k] = 0이더라도 두 점 (i, j)의 클러스터가 이미 형성되고 k가 (i, j) 조인 할 때.

그래서 일부 클러스터의 크기가 2보다 큰 경우 연결 제한이 전파되는 것을 궁금해했습니다. _C는이 경우 정의되지 않았습니다.

감사합니다.

답변

1

그렇다면 현재 진행중인 문제는 하나의 클러스터에 갖고 싶지 않은 활성 지점의 연결 끊김에도 불구하고이 지점은 여전히 ​​동일한 연결된 구성 요소의 일부이며 해당 데이터와 관련된 데이터는 여전히 특정 레벨에서 동일한 클러스터에 연결되어야합니다.

일반적으로 AgglomerativeClustering은 다음과 같이 작동합니다. 처음에는 모든 데이터 요소가 별도의 클러스터입니다. 그런 다음 반복 할 때마다 인접한 두 개의 클러스터가 병합되므로 원본 데이터와 L2 거리의 클러스터 평균을 비교하면 원본 데이터와의 불일치가 전반적으로 증가합니다.

따라서 두 노드 간의 직접 연결을 끊어도 중간 노드가 한 단계 높은 클러스터링을 수행 할 수 있습니다.

+1

답변 해 주셔서 감사합니다. 내가 글을 쓰는지 보자. C [i, j] = 1, C [j, k] = 1, C [i, k] = 0이라면 i와 k는 연결될 수 없다. 첫 번째 단계에서 i와 j는 연결됩니다. 그러면 k는 클러스터 (i, j)에 링크 될 수있다. 나는 C [i, k] = 0이기 때문에 k를 결합 할 수 없다고 생각했습니다. 그러나 실제로 C [j, k] = 1이기 때문에 (i, j)와 k 사이의 연결이 가능합니다. 이는 C [(i, j), k] = max (C [i, k], C [j, k])를 정의하는 것과 같다. –

+0

주저하지 말고 질문하십시오. 몇 마디로 그 메커니즘을 설명하는 것은 간단하지 않습니다. – eickenberg

+1

정확히 - 그들은 중개자를 통해 연결되었습니다. 나는 데이터가 충분히 유사하다면이 클러스터가 형성되는 것을 금지하는 것이 가능하다고 생각하지 않는다. 물론 부품을 완전히 분리하지 않는 한. 그러나이 경우 응집 기는 때로는 연결이 끊긴 구성 요소를 다시 연결합니다. – eickenberg