본문 바로가기
머신러닝

K-means clustering 에 대해 알아보고 python 으로 구현해보자!

by 프로그래밍하겠습니다 2025. 1. 5.
728x90
반응형

🎶 K-means clustering이란?

 

지난 포스트에서는 차원 축소와 주성분 분석에 대해 알아봤다.

차원 축소(Dimension reduction) - 주성분분석(PCA)

 

차원 축소(Dimension reduction) - 주성분분석(PCA)

🎶 차원 축소에 대해 알아보자! 저번 포스트에서는 RNN의 종류 중 하나인 LSTM과 GRU에 대해 알아봤다.LSTM과 GRU - 장기 의존성 문제를 해결한 RNN LSTM과 GRU - 장기 의존성 문제를 해결한 RNN🎶 LSTM과

ybbbb.tistory.com

 

이번 포스트에서는 'K-means clustering'에 대해 살펴보도록 하겠다.

 

일반적으로 머신러닝은 크게 '지도 학습(supervised learning)'과 '비지도 학습(unsupervised learning)'으로 나뉘는데, 

( 🎃 레이블을 가진 샘플과 가지지 않은 샘플이 섞여 있는 '준지도 학습(semi-supervised learning)'도 존재함!)

지도 학습이란,

특징 벡터 x와 목표값 y가 모두 주어진 상황에서 학습이 이루어지는 것을 말하며, 일반적으로 회귀와 분류 문제에서 사용된다.

비지도 학습이란,

특징 벡터 x는 주어지는 데, 목표값 y는 주어지지 않는 상황에서 학습이 이루어지는 것을 말하며, 대표적인 예로 군집화(clustering) 문제가 있다.

 

오늘 설명하고자 하는 K-means clustering이 바로 이 비지도 학습의 일부인 것이다!

 

군집화 문제란 특징 벡터 x={x1, x2, x3, ... , xn} 에서 다음과 같은 식을 만족하는 군집집합 C={c1, c2, c3, ... , ck}를 찾아내는 작업을 뜻한다.

clustering
[사진 1] 군집화 관련 수식

 

(🎃 군집의 개수 k는 주어지는 경우와 자동으로 찾아야 하는 경우가 있다.)

 

k-means clustering 알고리즘은 바로 이 군집화 문제의 일부로써,

다음과 같은 장점이 있어 매우 인기가 좋은 알고리즘이다.

  • 원리가 단순하고 성능이 좋음
  • 직관적이고 이해하기 쉬움
  • 구현이 쉬움

k-means clustering 알고리즘은 데이터 분포에 대한 사전 지식이 없을 경우에도 사용 가능한 비지도 학습이지만, 군집에 대한 사전 정보가 있을 경우 이를 바탕으로 모범 샘플을 사용하여 그 샘플을 초기화에 사용할 경우 더 나은 성능을 보일 수 있다는 특징도 갖고 있다.

 

👓 python 코드 구현을 통해 k-means clustering에 대해 자세히 파고들어보자!

 

우선, 필요한 라이브러리를 불러오고 임의의 데이터를 생성하자.

clustering code
[코드 1] 모듈 임포트 및 데이터 생성

 

'make_blobs 함수'는 클러스터링 가상데이터를 생성하는데 사용되는 함수로써, 다음과 같은 매개 변수를 갖는다.

  • n_samples : 생성할 데이터 개수
  • centers : 생성할 클러스터의 중심 개수
  • cluster_std : 클러스터의 표준 편차
  • shuffle : True 시 숫자를 랜덤으로 섞어줌

 

그 다음, k-means clustering의 훈련 과정을 시각화하기 위해 subplot를 활용한다.

clustering code
[코드 2] subplot

 

그 후, iteration 값이 1, 10, 20, 30, 40 일 때의 학습을 각각 진행시켜 plot으로 그 결과를 출력해본다.

clustering code
[코드 3] KMeans

 

'KMeans 함수'는 k-means clustering 구현을 위한 sklearn 내장함수로써, 다음과 같은 매개변수를 갖는다.

  • n_clusters : 설정할 k의 값
  • max_iter : 학습할 횟수
  • 더 자세한 설명은 다음 공식 사이트를 참고하길 바란다.

KMeans — scikit-learn 1.5.2 documentation

 

KMeans

Gallery examples: Release Highlights for scikit-learn 1.1 Release Highlights for scikit-learn 0.23 A demo of K-Means clustering on the handwritten digits data Bisecting K-Means and Regular K-Means ...

scikit-learn.org

 

그 후, 임의로 생성한 데이터의 정답값(y)을 활용해 정답 cluster를 출력한 후 전체적으로 비교해본다.

clustering code
[코드 4] 정답 cluster

 

아래 출력 결과에서 왼쪽 맨 밑에 있는 scatter plot이 정답 cluster이고, 왼쪽 첫 그래프부터 차례대로 1, 10, 20, 30, 40번 반복했을 때 생성된 cluster의 모습이다.

clustering img

 

실행 결과에서 확인해 볼 수 있듯이 iteration이 증가하면 증가할 수록 정답과 유사하게 clustering을 진행하도록 각 cluster의 중심이 이동하고 있다!

 

독자들도 꼭 python으로 직접 구현해 보길 바란다.

728x90
반응형