계층 적 클러스터링을 사용하여 2 차원으로 병합 된 많은 양의 데이터를 시각화하려고합니다. 내가 원하는 것은 클러스터를 구성 포인트의 볼록 선체로 렌더링하여 계층 구조의 여러 높이에서 데이터를 볼 수있는 시각화를 만드는 것입니다. 이 문제의 가장 어려운 부분은 계층 구조를 위로 이동하면서 쌍 클러스터의 볼록 선체를 효율적으로 병합 할 수있는 알고리즘이 필요하다는 것입니다. O (n log n) 시간에 점의 볼록 선체를 계산하기위한 알고리즘을 많이 보았습니다. 그러나이 경우 문제의 하부 구조를 활용하는 것이 훨씬 효율적일 것으로 보이지만, 어떻게 확실하지.Python에서 계층 적 클러스터링의 볼록한 껍질
편집 :
자세한 내용은, 상기 데이터 구조는 클러스터의 최초 포인트에서 시작하고 포인트/클러스터가 다음의 클러스터를 형성하도록 결합하는 말했다 배열이다. 따라서 트리/포인터 구조와 비슷하지만 하나의 큰 배열에 포함되어 있습니다. 중요한 부분은 두 구성 클러스터가 수퍼 클러스터 중 무엇인지 확인하는 것이 효율적이지만 클러스터에 속한 모든 포인트 세트를 얻는 것은 효율적이지 않다는 것입니다. 따라서 합리적인 알고리즘은 아래에서 위로 작업해야합니다.
우리는 계층 구조의 중간에 있다고 가정하고 미리 계산 된 계층 구조에서 클러스터 A와 B가 병합되어 클러스터 C를 생성한다고 가정 해 봅시다. 우리는 위에서 아래로 갈 것입니다. 클러스터 A와 B에있는 점의 볼록 선체입니다. 따라서이를 결합하여 클러스터 C의 볼록 선체를 생성하면됩니다. 클러스터 A의 convex hull은 실제로 단일 점, 쌍 또는 전체 다각형 일 수 있습니다. 그래서 클러스터 C의 convex hull을 형성하기 위해 이들을 병합해야하는 몇 가지 경우가 있습니다. 그러나 아마도 싱글 톤과 페어를 다각형과 같은 방식으로 처리 할 수있는 영리한 솔루션이있을 것입니다.
가장 확실한 해결책은 클러스터 A와 B의 볼록 선체에서 결합 된 점 집합을 사용하여 볼록 선체를 계산하는 것입니다. 그러나이를 100k 점의 계층 구조에서 수행해야합니다. 이 A와 B
편집 2의 볼록 선체를 결합하는보다 효율적인 방법 :
/----5
1---/ /\
/\ /B 8
2 A 3 C 6 /
\/ \/
4--------7
그래, 그래서 내가 무슨 뜻인지의 그림을 ASCII로 시도했다. 클러스터 A의 볼록한 선체는 1-2-3-4이며, B의 볼록한 선체는 5-6-7-8이고 C의 볼록한 선체는 1-2-4-7-8-5입니다. 아마도 클러스터 A와 B는 선체 내부에 추가 점을 포함하고 있지만 분명히 C의 선체 일부가 될 수는 없으므로 문제는 클러스터 A와 B의 선체를 "연결하여" 포인트의 좌표에 따라 C의 선체. 이것은 전체 프로세스의 귀납적 인 단계입니다. (결과적으로 C는 클러스터 D와 결합 될 것이고, 알고리즘은 최상위 클러스터로 끝날 때까지 볼록한 선체로 모든 점의 볼록한 선체를 가질 것이다).
정확하게 현재 데이터 구조가 정확히 무엇을 의도하는지, 그리고 얼마나 정확히 설명 할 수 있습니까? – phant0m
자세한 내용은 위를 참조하십시오. – acjay
이미지가 어떻게 보이는지 보여주는 간단한 이미지를 추가 할 수 있습니까? (특별히 "이 문제의 가장 어려운 부분은 계층 구조 위로 올라감에 따라 쌍 클러스터의 볼록 선체를 효율적으로 병합 할 수있는 알고리즘이 필요하다는 것입니다." – AlbertFerras