본문 바로가기

Machine Learning/군집(Clustering)

Clustering - K-means

반응형
Cluster (클러스터)

비슷한 특성을 가진 데이터들끼리의 묶음


Clustering (클러스터링)

데이터들을 군집(클러스터, 무리)으로 묶어주는 작업
라벨링된 데이터를 묶는 작업으로, 비지도 학습으로 분류됨



K-mean 클러스터링

각 클러스터에 할당된 데이터 포인트들의 평균 좌표를 이용해
중심점을 반복적으로 업데이트하며 클러스터를 형성하는 알고리즘

K는 군집의 개수를 의미하며 사용자가 조정해야하는 파라미터


Centroid (중심점)

클러스터의 중심

 

 

각 군집(클러스터)별로 중심점(Centroid)이 찍혀있는 모습

 

 

작동원리

 

 

1. 클러스터의 수(K) 설정 (n_clusters)

 

 

 

2. init 파라미터의 기본값인 k-means++ 방식으로 centroid1, 2, 3, ..., n개 찾음

 

centroid1에서 제일 멀리 떨어져 있는 데이터를 centroid2로 찾고

 

centroid1, 2와 제일 멀리 떨어진 데이터를 centroid3으로 찾는 방식

 

 

 

3. 각 데이터마다 가장 가까운 중심점에 해당하는 클러스터 할당

(가장 가까운 중심점은 유클리드 거리로 찾음)

 

 

 

4. 할당된 클러스터를 기반으로 새로운 중심점을 계산

(클러스터의 중심으로 centroid 이동, 새로운 중심점은 내부 점들의 거리의 산술평균으로 찾음)

 

 

 

5. 각 클러스터의 할당이 변하지 않을 때까지 위 작업 반복

 

 

 

 

 

데이터 불러오기

 

 

싸이킷런의 datasets 패키지의 wine 데이터셋을 불러온다.

 

 

13개의 변수, 모두 float64타입이다.

 

라벨은 0, 1, 2로 구분되어 있다.

 

 

 

 

 

스케일링

 

 

 

 

PCA를 통해 2차원으로 축소

 

2차원으로 줄여진 데이터는 원본 데이터를 약 56% 설명

 

 

 

 

 

K-means로 클러스터 찾기

 

 

PC1과 PC2의 값에 따라 클러스터링 되었으며 3개를 설정했기에

 

0, 1, 2의 값이 나왔다. (이 값은 매번 바뀐다.)

 

 

 

 

이를 데이터프레임의 컬럼으로 추가해준 뒤 그래프로 확인해보자

 

 

 

3개의 군집이 직관적으로 보아도 그럴싸 하게 생성된 것으로 보인다.

 

 

 

 

 

중심점도 함께 그리기

 

 

cluster_centers_속성에 중심점의 위치가 찍혀있다.

 

이를 이용해 클러스터별 중심점을 함께 표시해주자

 

 

 

 

 

 

 

적절한 군집의 수, K는 어떻게 정할까?

 

Elbow Method

클러스터 간 거리의 합을 나타내는 Inertia value가 급격히 떨어지는 구간 이용

그 구간을 K의 값으로 설정

 

 

 

Inertia 시각화

 

 

육안으로 보아도 K가 3일 때 inertia 값이 급격히 떨어지는 것을 볼 수 있다.

 

 

단, Elbow Method를 이용한 방법이 머신러닝에 있어서 항상 최선의 변수를 만드는 방법은 아닐 수 있다.

 

위 내용은 추후 포스팅 예정.

 

 

 

참조

https://bcho.tistory.com/1203?category=555440

https://blueskyvision.tistory.com/564

https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-7-K-%ED%8F%89%EA%B7%A0-%EA%B5%B0%EC%A7%91%ED%99%94-K-means-Clustering

www.kaggle.com/tmheo74/geo-data-eda-and-feature-engineering#K-Means-Clustering---Lat,-Long

반응형