개발로그필름
[ML] K-평균 알고리즘 본문
728x90
반응형
SMALL
반응형

K-평균 알고리즘이란?
데이터를 K개의 그룹(클러스터)으로 자동으로 나누는 알고리즘
비슷한 애들끼리 묶는 것이 목적
왜 이름이 K-평균일까?
- K: 나누고 싶은 그룹(클러스터)의 개수
- 평균: 각 그룹의 중심(= 평균 위치)을 기준으로 데이터를 묶기 때문
동작 방식 (직관적으로)
- K개의 중심점(centroid)을 무작위로 정함
- 모든 데이터를 가장 가까운 중심점에 할당
- 각 클러스터의 중심점을 다시 계산 (그룹 내 평균 위치)
- 중심점이 더 이상 움직이지 않을 때까지 2~3단계 반복
➡ 반복하면서 그룹이 점점 정확하게 분리된다
예시
| 점 ID | x좌표 | y좌표 |
| A | 1 | 2 |
| B | 2 | 1 |
| C | 10 | 12 |
| D | 11 | 13 |
이런 2차원 데이터를 K=2로 클러스터링하면:
- A, B는 하나의 그룹 (왼쪽 아래)
- C, D는 또 다른 그룹 (오른쪽 위)
- 중심이 대충 찍힘
- 점들이 가까운 중심에 붙음
- 중심이 다시 평균 위치로 이동
- 반복하면서 점들이 제대로 된 그룹으로 모임!
장점
- 구현이 간단하고 빠름
- 대규모 데이터에도 빠르게 작동
- 시각화가 쉬움 (2D/3D 기준)
단점
- K(군집 수)를 미리 정해야 함
- 원형(둥근) 모양 군집에 강하지만, 비선형 구조는 잘 못 나눔
- 이상치에 민감함
Python 예제 (sklearn)
from sklearn.cluster import KMeans
import numpy as np
# 데이터 예시
X = np.array([[1,2], [2,1], [10,12], [11,13]])
# K=2로 클러스터링
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
print("클러스터 레이블:", kmeans.labels_)
print("중심점 좌표:", kmeans.cluster_centers_)
[1 1 0 0]
[[10.5 12.5] # 0번 클러스터의 중심점
[1.5 1.5]] # 1번 클러스터의 중심점
- 0번 클러스터: (10+11)/2, (12+13)/2 → (10.5, 12.5)
- 1번 클러스터: (1+2)/2, (2+1)/2 → (1.5, 1.5)
즉,
K-평균은 데이터를 K개의 그룹으로 나누고, 각 그룹의 중심(평균)을 기준으로 가장 가까운 데이터끼리 묶는 알고리즘
반응형
LIST
'ML' 카테고리의 다른 글
| [ML] KMeans() 하이퍼파라미터 설정 (1) | 2025.06.06 |
|---|---|
| [ML] 로버스트 스케일러 (0) | 2025.06.05 |
| [ML] 클러스터란? (0) | 2025.06.04 |
| [ML] 범주형 변수와 타겟변수 사이의 관계 시각적으로 확인하기 (0) | 2025.06.01 |
| [ML] F1-score, ROC Curve & AUC (0) | 2025.05.31 |
Comments