KNN 알고리즘의 핵심 개념부터 실전 적용까지

K-최근접 이웃(K-Nearest Neighbors) 알고리즘은 머신러닝에서 가장 직관적이고 널리 사용되는 분류 및 회귀 알고리즘 중 하나입니다. 이 알고리즘의 핵심 원리부터 실제 적용까지 종합적으로 살펴보겠습니다.

1. KNN이란?

K-최근접 이웃(K-Nearest Neighbors) 알고리즘은:

  • 새로운 데이터를 분류할 때
  • 기존 데이터 중에서 가장 가까운 K개의 이웃을 찾아
  • 다수결로 어떤 클래스(그룹)에 속할지 결정하는 방법

2. 핵심 개념

요소의미
K몇 명의 이웃을 볼 것인지 (하이퍼파라미터)
이웃입력된 데이터와 가까운 데이터들
거리얼마나 비슷한지를 수치로 나타낸 것 (주로 유클리드 거리 사용)
다수결가장 많은 이웃이 속한 그룹을 따라감

3. 거리 계산 공식 (유클리드 거리)

거리 = √[(x₁ – y₁)² + (x₂ – y₂)² + ⋯ + (xₙ – yₙ)²]

  • x와 y는 두 데이터 포인트
  • x₁, y₁는 각각의 필드(특성, feature) 값

👉 특성이 많아질수록 계산 항이 늘어나고 차원이 높아짐

4. K값에 따른 특징

K 값특징
K가 작을수록민감, 노이즈에 취약, 과적합 가능성 있음
K가 클수록덜 민감, 더 일반적, 하지만 경계가 흐려짐
일반적으로 홀수 사용무승부 방지 (K=3, 5, 7 등)

5. 스케일 차이 문제

❗ 문제

필드마다 수치 범위가 다르면, 거리 계산 시 스케일이 큰 특성이 결정적 영향을 미침
예: 연봉(천만 단위) vs 키(cm)

✔ 해결책: 정규화 or 표준화

방법특징공식
정규화 (MinMaxScaler)0~1로 압축(x – min) / (max – min)
표준화 (StandardScaler)평균 0, 분산 1로 맞춤(x – μ) / σ

6. 정제 시 주의할 점

  • 거리 계산은 수치형 특성만 가능
  • 문자열/범주형은 변환 필요 (예: One-hot encoding)
  • 결측치, 이상치 제거 → 거리 계산에 큰 영향 줌
  • 정규화/표준화는 거의 필수

7. 실전 적용 흐름 (요약 코드)

from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

# 1. 데이터 준비
X = df.drop('target', axis=1)
y = df['target']

# 2. 정규화 or 표준화
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 3. 학습/테스트 분리
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)

# 4. KNN 모델 학습
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# 5. 예측 및 평가
y_pred = knn.predict(X_test)

한 줄 요약

KNN은 “가까운 친구 따라하기” 분류법이며, “거리”는 수치 기반이고, 그 거리의 정확도는 “스케일 정제”에 달려 있다!

이 알고리즘의 강점은 단순하면서도 효과적이라는 점입니다. 적절한 데이터 전처리와 K값 선택을 통해 다양한 문제에 적용할 수 있으며, 특히 데이터의 특성이 잘 정의된 경우에 뛰어난 성능을 보입니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다