개발로그필름

[ML] K-평균 알고리즘 본문

ML

[ML] K-평균 알고리즘

yuullog 2025. 6. 4. 23:25
728x90
반응형
SMALL
반응형

 

 

 

 

K-평균 알고리즘이란?

데이터를 K개의 그룹(클러스터)으로 자동으로 나누는 알고리즘
비슷한 애들끼리 묶는 것이 목적

 

 

왜 이름이 K-평균일까?

  • K: 나누고 싶은 그룹(클러스터)의 개수
  • 평균: 각 그룹의 중심(= 평균 위치)을 기준으로 데이터를 묶기 때문

 

 

동작 방식 (직관적으로)

  1. K개의 중심점(centroid)을 무작위로 정함
  2. 모든 데이터를 가장 가까운 중심점에 할당
  3. 각 클러스터의 중심점을 다시 계산 (그룹 내 평균 위치)
  4. 중심점이 더 이상 움직이지 않을 때까지 2~3단계 반복

➡ 반복하면서 그룹이 점점 정확하게 분리된다

 


 

예시

점 ID x좌표 y좌표
A 1 2
B 2 1
C 10 12
D 11 13

이런 2차원 데이터를 K=2로 클러스터링하면:

  • A, B는 하나의 그룹 (왼쪽 아래)
  • C, D는 또 다른 그룹 (오른쪽 위)
  1. 중심이 대충 찍힘
  2. 점들이 가까운 중심에 붙음
  3. 중심이 다시 평균 위치로 이동
  4. 반복하면서 점들이 제대로 된 그룹으로 모임!

 

 

장점

  • 구현이 간단하고 빠름
  • 대규모 데이터에도 빠르게 작동
  • 시각화가 쉬움 (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
Comments