끄적이는 개발노트

260610_강의 정리 (KNN, K-Means) 본문

머신러닝

260610_강의 정리 (KNN, K-Means)

크런키스틱 2026. 6. 10. 23:16
728x90

 

machine learning · 거리 기반 알고리즘
KNN과 K-Means — 거리로 분류하고, 거리로 묶는다
  • KNN: 가장 가까운 이웃 K개의 다수결로 클래스를 결정하는 지도학습 분류기
  • K-Means: 데이터를 K개 군집으로 묶는 비지도학습 클러스터링
  • 두 알고리즘 모두 유클리디안 거리를 핵심 척도로 사용하며, 스케일링이 필수임
📐
0. 모든 것의 출발 — 거리(Distance)

"이 데이터와 저 데이터가 얼마나 비슷한가?" — 거리 기반 알고리즘의 핵심 질문

  • 머신러닝에서 거리는 두 데이터 포인트(벡터)가 얼마나 다른지를 수치로 표현한 것임
  • 거리가 작을수록 두 데이터는 비슷하고, 클수록 다름
  • 가장 널리 쓰이는 방식이 유클리디안 거리(Euclidean Distance) — 우리가 일상에서 자로 재는 직선 거리와 동일한 개념임
d(p, q) = √Σ(pᵢ − qᵢ)²
d(p, q)두 점 p와 q 사이의 거리 (최종 결과값)
√ (루트)제곱합의 제곱근 — 단위를 원래 스케일로 되돌리는 역할
Σ (시그마)모든 특성(feature)에 대해 합산 — i번째부터 n번째까지
(pᵢ − qᵢ)²각 특성값의 차이를 제곱 — 음수 방지, 큰 차이에 더 가중치 부여
💡 새 개념
스케일링 Feature Scaling
  • 거리 계산 전, 각 특성의 값 범위를 통일시키는 전처리 작업
  • 단위가 다른 특성(예: 나이 vs 연봉)이 섞이면 큰 숫자의 특성이 거리를 지배함
  • 대표 방법: Min-Max 정규화(0~1 범위), 표준화(평균 0, 표준편차 1)
나이(25~60)와 연봉(2000~8000만원)을 같이 쓰면 연봉이 거리를 독점함 → 스케일링으로 동등한 영향력 부여
핵심 원칙
· 거리 기반 알고리즘을 쓸 때는 반드시 스케일링 먼저
· 스케일링 없이 학습하면 큰 수치의 특성이 결과를 왜곡함
🔍
1. KNN — K-최근접 이웃 알고리즘

"새 데이터가 들어오면, 가장 가까운 K명의 이웃을 찾아 다수결로 정한다" — 직관적인 지도학습 분류기

  • Instance-Based Learning(사례 기반 학습): 별도의 모델 파라미터를 학습하지 않고, 학습 데이터 자체를 기억해뒀다가 예측 시점에 사용함
  • 새로운 데이터가 입력되면 학습 데이터 전체와의 거리를 계산하고, 가장 가까운 K개를 선택함
  • K개 이웃 중 가장 많은 클래스로 분류 결정 (분류 문제 기준)
  • 비선형 경계를 자연스럽게 처리함 — 데이터 분포에 따라 복잡한 결정 경계도 형성 가능
  • 이상치(outlier)에 상대적으로 강건함 — K가 크면 소수 이상치의 영향이 희석됨
  • 데이터셋이 작을 때 특히 효과적임
💡 새 개념
K (하이퍼파라미터) Number of Neighbors
  • 몇 명의 이웃을 참고할지 결정하는 값 — 사용자가 직접 지정함
  • K가 작으면: 이웃 1~2명만 보므로 민감하고 불안정 (과적합 위험)
  • K가 크면: 많은 이웃을 평균내므로 안정적이지만 경계가 흐릿해짐 (과소적합 위험)
k=1이면 가장 가까운 딱 1명의 클래스를 따름 → 이상치 하나가 있으면 바로 틀릴 수 있음
이웃 검색 알고리즘 Neighbor Search Algorithm
  • brute: 모든 학습 데이터와 거리를 일일이 계산 — 데이터 적을 때 단순하고 정확
  • kd_tree: 데이터를 이진 트리 구조로 분할해 탐색 범위를 줄임 — 저차원 데이터에 빠름
  • ball_tree: 데이터를 구(ball) 형태로 분할 — 고차원·비선형 분포에 적합
데이터 1만 건 이상이면 brute보다 kd_tree나 ball_tree 권장
새 데이터 입력
전체 학습 데이터와 거리 계산
가장 가까운 K개 선택
다수결로 클래스 결정
⚠ 주의사항
· KNN은 예측 시마다 전체 데이터와 거리를 계산 → 데이터가 많아질수록 예측 속도 저하
· 고차원 데이터(특성이 수백 개 이상)에서는 "차원의 저주"로 성능 하락 가능
· 반드시 스케일링 후 사용할 것
🔵
2. 군집 분석 — Clustering 이란?

"레이블 없이 데이터 스스로 무리를 짓게 하는" 비지도학습의 핵심 기법

  • 군집 분석은 정답 레이블 없이 데이터 간의 유사도(거리)만으로 자연스러운 그룹을 찾아내는 비지도학습임
  • 목적은 정확한 분류가 아니라 데이터의 구조 파악 — 복잡한 데이터를 단순한 그룹으로 요약
  • 결과 평가는 정확도 대신 군집 간 거리(응집성·분리성)로 측정함
  • 후속 작업으로 각 군집의 통계적 특성(평균, 분포 등)을 분석하는 것이 일반적임
항목 Clustering (군집) KNN Classification (분류)
학습 방법 비지도학습 (레이블 없음) 지도학습 (레이블 있음)
거리 활용 군집 내 유사도 측정 이웃 탐색 기준
목적 데이터 구조 파악 (복잡 → 단순) 새 데이터의 정확한 클래스 예측
성능 평가 군집 간 거리, 혼잡성(실루엣 계수) 정확도(Accuracy)
후속 작업 군집별 통계 분석 (중심값, 분포) 없음
3. K-Means — 중심 기반 군집 알고리즘

"각 데이터를 가장 가까운 중심(Centroid)에 배정하고, 중심을 계속 갱신해 군집을 완성한다"

  • 데이터를 K개의 군집으로 나누는 가장 대표적인 클러스터링 알고리즘
  • 각 군집의 중심(Centroid)까지의 거리를 기준으로 데이터를 배정함
  • 원형(구 형태)에 가까운 군집을 잘 찾아냄 — 복잡한 모양의 군집에는 한계 있음
  • 이상치에 민감 — 극단적 이상치 하나가 중심을 크게 끌어당길 수 있음
💡 새 개념
중심값 Centroid
  • 각 군집에 속한 모든 데이터 포인트의 좌표 평균값
  • 군집의 "대표 위치" 역할을 함
군집 내 점들의 x, y 좌표를 각각 평균내면 그 군집의 중심(Centroid) 좌표가 됨
WSS (Within-Cluster Sum of Squares)
  • 각 데이터 포인트와 해당 군집 중심 사이의 거리 제곱합
  • K-Means가 최소화하려는 목적 함수 — WSS가 작을수록 군집이 촘촘함
WSS = Σ(xᵢ - cᵢ)² → 각 점 xᵢ에서 가장 가까운 중심 cᵢ까지의 제곱 거리를 모두 합산
K-Means 학습 과정 (3단계 반복)
1
초기 중심값 설정
K개의 초기 중심점을 무작위로 배치함. 초기값에 따라 결과가 달라질 수 있으므로 여러 번 반복하거나 K-Means++ 초기화를 사용함
2
군집 재배정 (Re-assign)
각 데이터 포인트를 가장 가까운 중심에 배정함. 즉, 모든 점에 대해 K개 중심까지의 거리를 계산하고 최솟값을 선택
3
중심 재계산 → 수렴까지 반복
새로 배정된 군집 내 데이터들의 평균 좌표로 중심을 갱신함. 배정이 더 이상 변하지 않을 때까지 2-3단계를 반복
K 값을 어떻게 정할까?
· Elbow Method: K를 늘려가며 WSS를 그리면 꺾이는 지점(elbow)이 최적 K
· 실루엣 계수(Silhouette Score): 군집 응집도와 분리도를 동시에 측정 (-1~1, 높을수록 좋음)
📊
4. 실루엣 계수 — 군집 품질 평가

"내 군집 안에서 얼마나 촘촘하고, 다른 군집과 얼마나 잘 분리됐나?" — 군집 품질의 종합 점수

s(i) = (b(i) − a(i)) / max(a(i), b(i))
s(i)데이터 포인트 i의 실루엣 계수 (-1에서 1 사이)
a(i)같은 군집 내 다른 점들까지의 평균 거리 → 작을수록 군집 내 응집도가 높음
b(i)가장 가까운 다른 군집의 점들까지의 평균 거리 → 클수록 군집 간 분리가 잘 됨
max(...)두 값 중 큰 것으로 나눠 -1~1 범위로 정규화
s(i) ≈ 1
자기 군집에 잘 속하고 다른 군집과 확실히 분리됨 → 이상적인 배정
s(i) ≈ 0
군집 경계에 걸쳐 있음 → 어느 군집에도 명확히 속하지 않는 상태
s(i) ≈ −1
잘못된 군집에 배정됨 → K 값을 바꾸거나 전처리를 재검토할 필요 있음
전체 평균 실루엣 계수
· 모든 데이터 포인트의 s(i)를 평균낸 값으로 전체 군집 품질을 한 수치로 요약
· 일반적으로 0.5 이상이면 합리적인 군집, 0.7 이상이면 우수한 군집 구조로 봄
🌐
5. DBSCAN — 밀도 기반 군집 알고리즘

"K-Means가 못하는 것을 한다 — 불규칙한 형태의 군집 찾기 + 이상치 자동 제거"

  • 밀도 기반 클러스터링: 중심이 아니라 데이터가 밀집된 영역을 군집으로 정의함
  • K-Means와 달리 K(군집 수)를 미리 지정하지 않아도 됨 — 데이터가 알아서 군집 수를 결정함
  • 이상치(노이즈)를 아예 군집에서 제외해 별도 처리함 — 노이즈 제거 효과
  • 원형이 아닌 불규칙한 형태의 군집도 탐지 가능
  • 구현과 파라미터 튜닝이 복잡하지만, 이상치 많은 실무 데이터에 강력함
💡 새 개념
Epsilon (ε) 탐색 반경
  • 한 점 주변에서 "이웃"으로 볼 수 있는 최대 거리
  • 이 반경 안에 든 점들을 이웃으로 간주함
ε = 0.5이면, 반경 0.5 안에 있는 점들만 이웃으로 봄
Minimum Points (MinPts) 최소 이웃 수
  • ε 반경 안에 MinPts개 이상의 점이 있어야 그 점을 Core Point로 인정
  • 이 조건을 못 채우면 Border Point 또는 Outlier(노이즈)로 분류됨
MinPts = 3이면, 반경 내 점이 3개 미만이면 군집의 핵심 멤버로 인정하지 않음
Core / Border / Outlier 포인트
  • Core Point: ε 안에 MinPts 이상 → 군집의 핵심
  • Border Point: Core가 아니지만 Core의 ε 안에 있음 → 군집의 가장자리
  • Outlier(Noise): 어떤 Core Point의 이웃도 아님 → 이상치로 처리, 군집 미배정
DBSCAN이 이상치 제거에 강한 이유 — Outlier를 아예 군집에 넣지 않음
K-Means vs DBSCAN 선택 기준
· 원형 군집 + 이상치 적음 + K 알고 있음 → K-Means (빠르고 단순)
· 불규칙 형태 + 이상치 많음 + K 모름 → DBSCAN (강력하지만 파라미터 튜닝 필요)
🗺️
6. 전체 요약 — 세 알고리즘 한눈에 비교
항목 KNN K-Means DBSCAN
유형 지도학습 (분류) 비지도학습 (군집) 비지도학습 (군집)
핵심 아이디어 가장 가까운 K개 이웃 다수결 중심과의 거리 최소화 밀도 높은 영역 확장
K 지정 필요 (이웃 수) 필요 (군집 수) 불필요
이상치 처리 상대적으로 강건 민감 (중심 왜곡) 자동 제거 (노이즈 처리)
군집 형태 원형에 최적 임의 형태 가능
주요 파라미터 k, algorithm n_clusters, init eps, min_samples
평가 방법 정확도(Accuracy) 실루엣 계수, Elbow 실루엣 계수
거리 계산 (스케일링 필수)
KNN: 이웃 K개로 분류
|
K-Means: 중심으로 군집
|
DBSCAN: 밀도로 군집
KNeighborsClassifier KMeans DBSCAN silhouette_score StandardScaler MinMaxScaler
728x90

'머신러닝' 카테고리의 다른 글

260612_강의 정리 (SVM)  (0) 2026.06.12
260611_강의 정리 (차원 축소)  (0) 2026.06.11
260609_강의 정리 (나이브 베이즈)  (0) 2026.06.09
260608_강의 정리 (확률 모델 기초)  (0) 2026.06.08
260605_강의 정리 (XGBoost)  (0) 2026.06.05