K-Means Clustering


Clustering

- 개인 또는 개체 중에서 유사한 것들을 몇개의 집단으로 그룹화 하는 방법.

- 데이터 자체에만 의존하여 자료를 탐색하고 요약하는 분석 기법.

- 전체 데이터를 군집을 통해  잘 구분하는 것이 목적.

- 모델로는 Hierarchical Clustering, K-means Clustering 등이 있다.


군집의 유형

- 상호배반적(disjoint) 군집 : 상호 배반적 군집(오직 하나의 군집에만 속함)

- 계보적 군집(hierarchical) 군집(한 군집이 다른 군집의 내부에 포함되는 형식)

- 중복(overlapping) 군집(두 개이상의 군집에서 동시에 관찰되는 형식)

- 퍼지(fuzzy) 군집(관찰단위가 소속되는 특정한 군집이 아니라, 각 군집에 속할 가능성을 표현)


K-Means Clustering

- k-means 에서는 사전의 K를 정해주어야한다. k값에 따라 결과 값의 차이가 많이 나기떄문에 적합한 K를 구해줘야한다.

- 적절한 K를 구하는 방법에는 실루엣 계수, 엘보우 기법 등이 있다.


*알고리즘

1. 군집 수 K를 설정.

2. 초기 K개의 군집의 중심을 랜덤으로 선택.

3. 관찰된 데이터를 설정된 k개의 중심 중 거리가 가까운 지점에 군집으로 할당.

4. 각 군집별로 할당된 데이터를 바탕으로 새로운 중심 계산.

5.  3~4 의 과정을 반복해 중심의 차이가 없을때 까지 반복.


Hierarchical Clustering

- 최단 연결법, 최장 연결법, 평균 연결법 등이 있다.

- 최단 연결법의 경우 관찰된 데이터중 가까운 데이터끼리 묶어감으로써 군집을 만들어가는 방법이다.

- Hieracrchical 한 구조를 가지며, Dendrogram으로 표현 된다. 직접 보고 군집을 나눌수 있는 장점이 있다.


*알고리즘

- 가장 가까운 데이터 끼리 묶음.

* 색별로 군집을 설정한 것을 볼수 있다. 사용자에 요구에 따라 변경 가능 할 수있다.

  ex) 빨강,초록 n 파랑,하늘색을 같은 군집으로 묶을 수 있다.



from sklearn.cluster import KMeans


kmeans = KMeans(n_clusters=4)

kmeans.fit(X)

y_kmeans = kmeans.predict(X)


plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')


centers = kmeans.cluster_centers_

plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5);




from sklearn.metrics import pairwise_distances_argmin


def find_clusters(X, n_clusters, rseed=2):

    # 1. Randomly choose clusters

    rng = np.random.RandomState(rseed)

    i = rng.permutation(X.shape[0])[:n_clusters]

    centers = X[i]

    

    while True:

        labels=pairwise_distances_argmin(X,centers)

        new_center=np.array([X[labels==i].mean(0) for i in range(n_clusters)])

        if np.all(centers==new_center):

            break

        centers=new_center

        

    return centers, labels


centers, labels = find_clusters(X, 4)

plt.scatter(X[:, 0], X[:, 1], c=labels,s=50, cmap='viridis');



+ Recent posts