728x90
반응형
1. 정의
평균 이동은 K-Means와 유사하게 중심을 군집의 중심을 지속적으로 움직이면서 클러스터링을 수행한다. 다만, 평균 이동은 중심을 데이터가 모여 있는 밀도가 가장 높은 곳으로 이동시킨다.
데이터의 분포도를 이용해 중심점을 찾는데, 확률 밀도 함수를 이용하고 이를 찾기 위해서 KDE(Kernel Density Estimation)을 이용한다.
KDE
커널함수를 통해 어떤 변수의 확률 밀도 함수를 추정하는 대표적인 방법. 관측된 데이터 각각에 커널 함수를 적용한 값을 모두 더한 뒤 데이터 건수로 나눠 확률 밀도 함수를 추정한다. 대표적인 커널 함수로 가우시안 분포 함수가 적용된다.
그리고 KDE의 식은 아래와 같다.
$$
\mathrm{KDE}=\frac{1}{n} \sum_{i=1}^{n} K_{h}\left(x-x_{i}\right)=\frac{1}{n h} \sum_{i=1}^{n} K\left(\frac{x-x_{i}}{h}\right)
$$
h는 대역폭으로 KDE 형태를 부드러운(또는 뾰족한) 형태로 만드는데 적용되며, h값은 KDE 기반의 평균 이동에서 매우 중요하다.
일반적으로 대역폭이 클수록 KDE가 평활화되어 적은 클러스터를 가지게 되고 대역폭이 적을수록 많은 클러스터를 지니게 된다. 또한 평균 이동에서는 클러스터의 개수를 지정하지 않으며, 오직 대역폭의 크기에 따라 수행한다.
2. 사용법
사이킷런의 MeanShift 클래스를 활용할 수 있으며, bandwidth 파라미터가 대역폭에 해당한다. 또한 사이킷런은 최적의 대역폭 계산을 위해 estimate_bandwidth() 함수를 제공한다.
다음은 make_blob()을 활용하여 Mean Shift를 수행한 예시이다.
In [0]:
# 라이브러리 임포트
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import MeanShift
from sklearn.cluster import estimate_bandwidth
In [1]:
# 데이터 생성
X, y = make_blobs(n_samples=200, n_features=2, centers=3, cluster_std=0.7, random_state=0)
In [2]:
# Mean Shift 수행 (bandwidth=0.8일때)
meanshift = MeanShift(bandwidth=0.8)
cluster_labels = meanshift.fit_predict(X)
print('cluster labels 유형:', np.unique(cluster_labels))
cluster labels 유형: [0 1 2 3 4 5]
In [3]:
# Mean Shift 수행 (bandwidth=1.0일때)
meanshift = MeanShift(bandwidth=1)
cluster_labels = meanshift.fit_predict(X)
print('cluster labels 유형:', np.unique(cluster_labels))
cluster labels 유형: [0 1 2]
In [4]:
# estimate_bandwidth() 함수 수행
bandwidth = estimate_bandwidth(X)
print('bandwidth 값:', round(bandwidth, 3))
bandwidth 값: 1.816
In [5]:
# Mean Shift 수행 (bandwidth=estimate_bandwidth()의 반환값일때)
meanshift = MeanShift(bandwidth=bandwidth)
cluster_labels = meanshift.fit_predict(X)
print('cluster labels 유형:', np.unique(cluster_labels))
cluster labels 유형: [0 1 2]
In [6]:
# 클러스터 결과와 실제값 비교
print(np.unique(y==cluster_labels, return_counts = True))
(array([ True]), array([200], dtype=int64))
3. 특징
- 데이터 세트 형태를 특정 형태로 가정하거나 특정 분포도 기반의 모델로 가정하지 않으므로 좀 더 유연한 클러스터링이 가능하다.
- 이상치의 영향력도 크지 않으며, 미리 클러스터의 개수를 정할 필요도 없다.
- 하지만 수행 시간이 오래 걸리며 band-width의 크기의 영향을 많이 받는다.
- 따라서 분석 업무 기반의 데이터보다는 컴퓨터 비전 영역에서 더 많이 사용된다고 한다.
4. Reference
728x90
반응형
'머신러닝 > 클러스터링' 카테고리의 다른 글
[클러스터링] GMM(Gaussain Mixture Model) (0) | 2022.07.30 |
---|---|
[클러스터링] K-Means 알고리즘 (0) | 2022.07.30 |