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값 선택을 통해 다양한 문제에 적용할 수 있으며, 특히 데이터의 특성이 잘 정의된 경우에 뛰어난 성능을 보입니다.
답글 남기기