참고:
https://ratsgo.github.io/machine%20learning/2017/04/18/HC/
https://bcho.tistory.com/1204
https://datascienceschool.net/03%20machine%20learning/16.04%20%EA%B3%84%EC%B8%B5%EC%A0%81%20%EA%B5%B0%EC%A7%91%ED%99%94.html
https://lucy-the-marketer.kr/ko/growth/hierarchical-clustering/
https://www.displayr.com/what-is-hierarchical-clustering/
계층적 클러스터링에는 두 가지 방법이 있다.
1. 모든 데이터 점들을 하나의 군집으로 묶는 것
2. 전체 군집을 데이터 점들로 쪼개는 것.
그 중 위의 것을 정리했다.
먼저 요약하면, 모든 점들을 군집으로 묶어가며, 결과적으로 하나만 남을 때까지 묶는 알고리즘 이라고 볼 수 있을 것 같다.
Dendrogram이라는 그래프를 이용하면 시각화를 잘 할 수 있다.
이 알고리즘을 사용하려면, 거리 혹은 유사도에 대해 미리 정의가 되어 있다는 가정하에 시작한다.
알고리즘 자체는 심플한데, 모든 군집들 중 가장 거리를 가진 군집들을 서로 묶는 그리디 알고리즘이다.
다만 군집과 군집 혹은 군집과 점 사이의 거리를 어떻게 정의하는지는 여러 정의가 있다.
1. 두 군집 사이에 가장 가까운 데이터의 거리
2. 두 군집 사이에 가장 먼 데이터의 거리
3. 군집에 속한 모든 점들끼리의 거리의 평균
4. 군집 중심 사이의 거리.
장점은
1. k를 사전에 지정해 줄 필요가 없다. 나온 결과에 대해 원하는 k값을 사용해 군집을 나눠주면 된다.
2. dendrogram으로 표현이 가능하다
단점
1 O(n^3)이다.
2. 그리디 알고리즘이므로, 한번 군집이 잘못 묶이면 되돌릴 수 없다.
3. 모든 점을 군집화 해야 되므로 노이즈나 outlier에 약하다
4. 군집이 복잡한 것을 찾지 못한다.
.. 별로 이득이 없어 보인다. 차라리 그냥 밀도 기반을 쓸 것 같다 ?