My Data Story
[군집] 평균-이동 본문
◈ '군집' 목차 ◈
5. 평균-이동
평균-이동 군집 알고리즘에 대해 알아보자.
1. 평균-이동
평균-이동은 임의의 포인트에서 시작해 특정 대역폭을 가지고 데이터가 모여 있는 곳으로 중심을 이동시키며 군집화를 수행한다.
step1
원 반경을 설정해 각 샘플을 중심으로 하는 원을 그린다.
step2
그 다음 원 안에 포함된 모든 샘플의 평균을 구한다.
step3
원의 중심을 평균점으로 이동시킨다.
step4
모든 원이 이동하지 않을 때까지 평균-이동을 계속한다(원의 중심이 포함된 샘플의 평균점일 때 까지)
평균-이동은 지역의 최대 밀도를 찾을 때까지 데이터가 모여 있는 밀도가 높은 쪽으로 원을 이동시킨다.
동일한 지역에 (또는 충분히 가깝게) 안착한 원에 있는 모든 샘플은 동일한 클러스터가 된다.
국부적 밀집도 추정에 의존한다.
평균-이동 알고리즘은 클러스터의 개수를 지정할 필요가 없다.
대역폭의 크기에 따라서 알고리즘 자체적으로 클러스터의 개수를 최적으로 정한다.
다시 말해 대역폭 크기에 따라 클러스터링 품질이 결정된다.
평균-이동은 DBSCAN과 유사한 특징있다.
다만, 모양이나 개수에 상관없이 클러스터를 찾을 수 있다는 차이점이 존재한다.
하이퍼파라미터도 매우 적다. bandwidth 부르는 대역폭 크기에 해당하는 원 반경 딱 한개이다.
하지만 DBSCAN 과 달리 평균-이동은 클러스터 내부 밀집도가 불균형일 때 여러 개로 나누는 경향이 있다.
계산 복잡도는 O(m^2) 이라 대규모 데이터 셋에는 적합하지 않다.
2. MeanShift 클래스
사이킷런에서 MeanShift 클래스를 통해 평균-이동 알고리즘을 구현할 수 있다.
from sklearn.cluster import MeanShift
meanshift = MeanShift(bandwidth = 0.8)
cluster_labels = meanshift.fit_predicts(X)
사이킷런에서 estimate_bandwidth를 통해 적절한 bandwidth 값을 얻을 수 있다.
from sklearn.cluster import estimate_bandwidth
from sklearn.cluster import MeanShift
opt_bandwidth = estimate_bandwidth(X)
meanshift2 = MeanShift(bandwidth = opt_bandwidth)
▶ MeanShift 클래스 구현에 대해 더 자세히 알고 싶다면 >> 참고 URL - MeanShift
'Machine Learning > 3. 비지도 학습 알고리즘' 카테고리의 다른 글
[군집] 유사도 전파 (0) | 2023.08.19 |
---|---|
[군집] BIRCH (0) | 2023.08.19 |
[군집] 병합군집 (0) | 2023.08.19 |
[군집] HDBSCAN (0) | 2023.08.19 |
[군집] DBSCAN (0) | 2023.08.19 |