🎶 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}를 찾아내는 작업을 뜻한다.
(🎃 군집의 개수 k는 주어지는 경우와 자동으로 찾아야 하는 경우가 있다.)
k-means clustering 알고리즘은 바로 이 군집화 문제의 일부로써,
다음과 같은 장점이 있어 매우 인기가 좋은 알고리즘이다.
- 원리가 단순하고 성능이 좋음
- 직관적이고 이해하기 쉬움
- 구현이 쉬움
k-means clustering 알고리즘은 데이터 분포에 대한 사전 지식이 없을 경우에도 사용 가능한 비지도 학습이지만, 군집에 대한 사전 정보가 있을 경우 이를 바탕으로 모범 샘플을 사용하여 그 샘플을 초기화에 사용할 경우 더 나은 성능을 보일 수 있다는 특징도 갖고 있다.
👓 python 코드 구현을 통해 k-means clustering에 대해 자세히 파고들어보자!
우선, 필요한 라이브러리를 불러오고 임의의 데이터를 생성하자.
'make_blobs 함수'는 클러스터링 가상데이터를 생성하는데 사용되는 함수로써, 다음과 같은 매개 변수를 갖는다.
- n_samples : 생성할 데이터 개수
- centers : 생성할 클러스터의 중심 개수
- cluster_std : 클러스터의 표준 편차
- shuffle : True 시 숫자를 랜덤으로 섞어줌
그 다음, k-means clustering의 훈련 과정을 시각화하기 위해 subplot를 활용한다.
그 후, iteration 값이 1, 10, 20, 30, 40 일 때의 학습을 각각 진행시켜 plot으로 그 결과를 출력해본다.
'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를 출력한 후 전체적으로 비교해본다.
아래 출력 결과에서 왼쪽 맨 밑에 있는 scatter plot이 정답 cluster이고, 왼쪽 첫 그래프부터 차례대로 1, 10, 20, 30, 40번 반복했을 때 생성된 cluster의 모습이다.
실행 결과에서 확인해 볼 수 있듯이 iteration이 증가하면 증가할 수록 정답과 유사하게 clustering을 진행하도록 각 cluster의 중심이 이동하고 있다!
독자들도 꼭 python으로 직접 구현해 보길 바란다.
'머신러닝' 카테고리의 다른 글
앙상블(Ensemble) - 배깅(Bagging), 부스팅(Boosting), 스태킹 (0) | 2025.01.30 |
---|---|
[RL] 강화학습(Reinforcement Learning) - 에이전트, 정책, 정책탐색, 환경, 리턴, 할인율 (2) | 2025.01.16 |
[RL] 강화학습 알고리즘 - PPO (Proximal Policy Optimization) with TRPO, Clipped Surrogate Objective, GAE, 상태가치함수, 엔트로피 보너스 (2) | 2025.01.15 |
SVM(Support Vector Machine) - 소프트 마진과 하드 마진, 그리고 커널 트릭 + python 구현까지! (0) | 2025.01.07 |
차원 축소(Dimension reduction) - 주성분분석(PCA) (0) | 2025.01.01 |
LSTM과 GRU - 장기 의존성 문제를 해결한 RNN (2) | 2024.12.31 |
RNN(Recurrent Neural Networks)이란? (0) | 2024.12.30 |
CNN구현 in python - MNIST 데이터셋을 활용하자! (0) | 2024.12.29 |