K-Means – clustering

k-means clustering 은 비계층적 군집 분석중에 하나이다.

k-means clustering 기본 개념

여기서 군집분석이란 비슷한 속성을 가진 대상을 집단으로 묶는 기법이고,

비 계층적 군집 분석이란 군집이 아래의 그림과 같이 Hierarchical 구조가 아닌것을 말한다.

즉 아래와 같은 군집의 형태로 만들어 주어 분석하는 기법이다.

비 계층적 군집 분석중 대표적인 것이 K-means clustering 이고, K는 군집 수로 미리 지정을 한다.

K-Means 알고리즘

각 4단계의 알고리즘이 반복 수행하여 최적의 군집형태를 찾아준다. 여기서 군집수 k 를 얼마로 지정할지? k 개의 각 군집에 어떤 개체를 1개씩 넣을 지? 즉 initial seeding에 따라 결과가 크게 달라진다.

k의 값은 계층적 군집분석의 결과를 이용하는 방법을 사용하면 되는데, 변수가 많을 시 주성분분석으로 통해 차원 축소하여 2, 3차 차원 그래프로 판단한다.

K-Means 특징

  • 각 객체를 상호배반적인 K개의 군집을 형성
  • 초기에 부적절한 병합(분리)이 일어났을 때 회복가능
  • 군집의 수 K를 사전에 정의
  • 대용량 자료의 경우 유용
  • 사전에 아무 정보 없이 전체 데이터에 알맞은 군집수 찾기는 어렵다.
  • 군집 수 k에 따른 여러번의 군집분석 수행하여 종합적으로 결과를 판단하여 최종 모형 선택한다

군집화 방법

군집의 수 K 결정을 한다. 위의 그림은 K = 5, 최초 군집 기준값 결정이 된다.
각 기준값에 개체를 할당한다. 기준값에 대한 군집이 생성이 되면 해당 군집의 중심을 재 산출한다.
군집의 중심을 기준으로 개체를 재 할당한다. 새로 만들어진 군집에 대한 중심을 재 산출한다.
군집이 완벽히 나눠질 때 까지 위 작업을 반복 수행한다.

python code

from sklearn.datasets import make_blobs from sklearn.cluster import KMeans import matplotlib.pyplot as plt X, _ = make_blobs(n_samples=20, random_state=4) def plot_KMeans(n): model = KMeans(n_clusters=2, init="random", n_init=1, max_iter=n, random_state=6).fit(X) c0, c1 = model.cluster_centers_ plt.scatter(X[model.labels_ == 0, 0], X[model.labels_ == 0, 1], marker='v', facecolor='r', edgecolors='k') plt.scatter(X[model.labels_ == 1, 0], X[model.labels_ == 1, 1], marker='^', facecolor='y', edgecolors='k') plt.scatter(c0[0], c0[1], marker='v', c="r", s=200) plt.scatter(c1[0], c1[1], marker='^', c="y", s=200) plt.grid(False) plt.title("반복횟수={}, 관성={:5.2f}".format(n, -model.score(X))) plt.figure(figsize=(8, 8)) plt.subplot(321) plot_KMeans(1) plt.subplot(322) plot_KMeans(2) plt.subplot(323) plot_KMeans(3) plt.subplot(324) plot_KMeans(4) plt.tight_layout() plt.show()
Code language: Python (python)

위의 소스코드를 보면 K 의 개수는 2개로 하는 k-means clustring 방법이다. 군집화 반복횟수 n 을 1, 2, 3, 4번 으로 변경하여 clustering 되는 과정을 보여준다.

clustering 의 초기 중심위치를 설정하기 위하여 K-Means++ 알고리즘을 이용한다.

  1. 중심위치를 저장할 집합 M 준비
  2. 일단 하나의 중심위치 $\mu_{0}$를 랜덤하게 선택하여 M에 넣는다.
  3. M에 속하지 않는 모든 표본 $x_{i}$에 대해 거리 d(M,$x_{i}$)를 계산. d(𝑀,$x_{i}$)는 M안의 모든 샘플 $\mu_{k}$에 대해
    d($\mu_{k}, x_{i}$)를 계산하여 가장 작은 값 선택
  4. d(M,$x_{i}$)에 비례한 확률로 다음 중심위치 $\mu$를 선택.
  5. K개의 중심위치를 선택할 때까지 반복
  6. K-평균 방법 사용

참고자료 :

https://datascienceschool.net/03%20machine%20learning/16.02%20K-%ED%8F%89%EA%B7%A0%20%EA%B5%B0%EC%A7%91%ED%99%94.html

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.