클러스터링 알고리즘-평균 이동 알고리즘

평균 이동 알고리즘 소개

앞서 논의한 바와 같이 비지도 학습에 사용되는 또 다른 강력한 클러스터링 알고리즘입니다. K- 평균 클러스터링과는 달리 어떤 가정도하지 않습니다. 따라서 비모수 알고리즘입니다.

평균 이동 알고리즘은 기본적으로 데이터 포인트의 가장 높은 밀도 (즉, 클러스터 중심)쪽으로 포인트를 이동하여 클러스터에 데이터 포인트를 반복적으로 할당합니다.

K-Means 알고리즘과 Mean-Shift의 차이점은 클러스터 수는 알고리즘 wrt 데이터에 의해 결정되기 때문에 나중에 클러스터 수를 미리 지정할 필요가 없다는 것입니다.

평균 이동 알고리즘의 작동

다음 단계를 통해 Mean-Shift 클러스터링 알고리즘의 작동을 이해할 수 있습니다.

  • Step 1 − 먼저 자체 클러스터에 할당 된 데이터 포인트로 시작합니다.

  • Step 2 − 다음으로이 알고리즘은 중심을 계산합니다.

  • Step 3 −이 단계에서 새 중심의 위치가 업데이트됩니다.

  • Step 4 − 이제 프로세스가 반복되고 더 높은 밀도 영역으로 이동됩니다.

  • Step 5 -마지막으로 중심이 더 이상 이동할 수없는 위치에 도달하면 중지됩니다.

Python으로 구현

Mean-Shift 알고리즘이 어떻게 작동하는지 이해하는 간단한 예입니다. 이 예제에서는 먼저 4 개의 서로 다른 Blob을 포함하는 2D 데이터 세트를 생성하고 그 후 Mean-Shift 알고리즘을 적용하여 결과를 확인합니다.

%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,3],[4,5,5],[3,10,10]]
X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
    marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()

산출

[[ 2.98462798 9.9733794 10.02629344]
[ 3.94758484 4.99122771 4.99349433]
[ 3.00788996 3.03851268 2.99183033]]
Estimated clusters: 3

장점과 단점

장점

다음은 Mean-Shift 클러스터링 알고리즘의 몇 가지 장점입니다.

  • K- 평균 또는 가우스 혼합에서와 같이 모델 가정을 할 필요가 없습니다.

  • 또한 볼록하지 않은 모양을 가진 복잡한 클러스터를 모델링 할 수 있습니다.

  • 클러스터 수를 자동으로 결정하는 대역폭이라는 매개 변수 하나만 필요합니다.

  • K- 평균에서와 같이 지역 최소값의 문제는 없습니다.

  • 이상치에서 문제가 발생하지 않습니다.

단점

다음은 Mean-Shift 클러스터링 알고리즘의 몇 가지 단점입니다-

평균 이동 알고리즘은 클러스터 수가 갑자기 변경되는 고차원의 경우 제대로 작동하지 않습니다.

  • 클러스터 수를 직접 제어 할 수는 없지만 일부 애플리케이션에서는 특정 수의 클러스터가 필요합니다.

  • 의미있는 모드와 무의미한 모드를 구분할 수 없습니다.