K-means Clustering

김혜성·2021년 2월 18일
0

Machine Learning

목록 보기
5/10

K-means Clustering의 정의

K-means Clustering(K-평균 군집화)은 비지도 학습의 클러스터링 모델 중 하나이다. 우선 클러스터란 비슷한 특성을 가진 데이터들끼리 묶는 것을 의미한다. 비슷한 특성은 가까운 위치로 해석할 수 있다.

위의 그림을 보면 거리가 가까운 데이터들끼리 같은 색으로 칠해져있어서 Cluster(군집)을 이루고 있다. Clustering은 이처럼 데이터들이 주어졌을 때 이들을 군집으로 grouping 해주는 것을 의미한다.

이제 K-means Clustering이라는 용어를 하나하나 뜯어보자. Centroid란 각 군집들의 중심이다.
K-means Clustering에서 k는 클러스터의 개수를 의미한다. 위의 사진에서 k값은 3인 것이다. means는 centroid를 뜻한다. 합쳐보면, K-means Clustering은 k개의 centroid를 이용해서 k개의 cluster를 만들어주는 모델이다. 비슷한 특성을 가지는 데이터들끼리 묶어서 패턴을 찾는다고 볼 수 있다.

K-평균 군집화의 과정

  1. k값을 결정한다(군집의 개수 결정).
  2. 초기 Centroid를 선택한다. 랜덤으로 설정, 수동으로 설정, K-mean++로 설정하는 방법이 있다.
  3. 모든 데이터를 순회하며 가장 가까운 Centroid가 있는 클러스터로 assign해준다.
  4. Centroid를 클러스터의 중심으로 이동한다.
  5. assign되지 않은 데이터가 남지 않을 때까지 3, 4단계를 반복한다.

https://www.youtube.com/watch?v=9TR54u08IGU
위 영상에서 잘 설명하였다. 10분이 좀 넘는 영상이지만 참고 보면 참고할만하다.

K값 정하기

Rule of Thumb

데이터의 수가 n개일 때

으로 대략적인 k값을 구할 수 있다.

Elbow Method

클러스터의 수(k)를 계속 증가시키며 정확도가 향상되지 않을 때 멈추는 방법이다.

실습

KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
         n_clusters=2, n_init=10, n_jobs=None, precompute_distances='auto',
         random_state=None, tol=0.0001, verbose=0)

Parameter

  • n_clusters: k값이다(클러스터의 개수).
  • init: default값은 k-means++로, 초기 Centroid를 정하는 방법이다. 먼저 맨 처음 데이터를 centroid1로 두고, 이와 가장 멀리 떨어져 있는 데이터를 centroid2로 둔다. 다음으로 centroid1,2와 가장 멀리 떨어져 있는 데이터를 centroid3으로 둔다. 이처럼 정해주면 random한 방식보다 iteration을 줄여주어 더 효율적이다.
  • max_iter: k-평균 군집화의 과정 3,4를 반복하는 정도를 정해준다. default는 300으로 보통 300번 반복하기 전에 모든 데이터들이 assign되어 그 전에 끝이 난다.
from sklearn.cluster import KMeans

kmean = KMeans(n_clusters=2)
kmean.fit(X_train, y_train)
y_kmean_predict = kmean.predict(X_test)

print("K-means Clustering Accuracy: {0:.4f}".format(accuracy_score(y_kmean_predict, y_test)))

위의 코드를 사용했을 때 iris에서 다른 모델을 사용했을 때보다 낮은 정확도인 0.73을 보였다...

K-평균 군집화의 단점

  • local minimum이 발생할 수 있다.

    위와 같이 데이터가 분포해 있다면 직관적으로 봤을 때, 왼쪽 6개, 오른쪽 6개로 군집화해주면 될 것이다.

    하지만 위와 같이 초기 설정된 Centroid가 위, 아래로 하나씩이라면 위의 6개의 데이터와 아래의 6개의 데이터로 나뉘게 된다.
    이처럼 local minimum에 빠질 수 있다는 단점이 있다.

출처

profile
똘멩이

0개의 댓글