K-Nearest Neighbors Simulator (2D)
캔버스 클릭: 현재 선택된 클래스(A/B)로 데이터 추가. Test Mode 켜면 클릭으로 테스트 점 추가 및 예측(최근접 이웃 표시).
Model Info
Points: 0 A · 0 B
Last test P(B): -
Nearest neighbors (last test):
Notes & Tips
- K가 작으면 결정경계가 복잡해지고 과적합 가능, K가 크면 부드러워짐.
- Weighted 체크 시 가까운 이웃의 영향이 더 큽니다 (weight = 1/d, d가 0이면 매우 큰 가중치 처리).
- Resolution 조절로 히트맵 해상도 변경 (성능/품질 트레이드오프).
K-Nearest Neighbors (간단 이론 및 실습 가이드)
개요
K-NN은 학습 단계에서 실제로 모델 파라미터를 학습하지 않는 비모수(또는 기억 기반) 분류 알고리즘입니다. 새로운 샘플이 들어오면 훈련 데이터와의 거리를 계산해서 가장 가까운 K개의 이웃을 찾고, 그 이웃들의 다수결(또는 가중 다수결)로 라벨을 결정합니다.
거리(metric) 선택
- 유클리드 거리(Euclidean): 연속 실수형 특성에서 가장 흔히 사용됩니다.
- 맨해튼 거리(Manhattan): 차원의 독립적 영향이 더 크거나 격자형 데이터에 유리합니다.
- 고차원에서는 거리 개념이 희미해지는 문제(차원의 저주)가 있으므로, 특성 스케일링이 매우 중요합니다.
K 값의 영향
- 작은 K (예: 1~3): 결정 경계가 복잡하고 노이즈에 민감 — 과적합 가능성↑.
- 큰 K (예: 데이터의 √N 이상): 경계가 매끄러워지고 안정적이지만 국소 패턴을 놓칠 수 있음 — 편향↑.
- 실전에서는 교차검증(CV)으로 최적의 K를 찾는 것이 권장됩니다.
가중치(Weighted) 옵션
단순 다수결 대신 weight = 1 / d 처럼 거리에 역비례하는 가중치를 주면 가까운 이웃의 영향력이 커집니다.
단, d가 0(정확히 겹치는 점)일 경우 특수 처리를 해줘야 합니다(예: 그 점의 라벨을 바로 반환).
전처리(Feature scaling)
K-NN은 거리 기반이므로 표준화(평균0, 표준편차1) 또는 정규화(0~1) 같은 스케일링을 꼭 적용해야 합니다. 한 특성의 스케일이 크면 거리 계산에서 그 특성이 지배적으로 작용합니다.
복잡도와 가속 기법
- 순차적 브루트포스 계산: 훈련셋이 크면 예측 비용이 O(N·d) (N=샘플 수, d=차원)으로 비쌉니다.
- 가속 기법: KD-Tree, Ball-Tree, locality-sensitive hashing(LSH) 등으로 탐색을 빠르게 할 수 있습니다(특히 저차원에서 유용).
결정 경계(Visualization) 관련
히트맵 해상도(resolution)를 높이면 경계가 더 정교하게 보이지만 계산 비용이 증가합니다. 실습에서는 해상도와 K를 함께 조절해 보세요:
- 해상도 낮음 + K 작음 → 거친, 노이즈한 경계
- 해상도 높음 + K 큼 → 부드럽고 일반화된 경계
- 테스트: 같은 데이터에 대해 여러 K를 비교하면 편향-분산 트레이드오프를 직관적으로 이해할 수 있습니다.
실습 팁(데모에서 해볼 것)
- 데이터 분포 변경: XOR / Concentric / Overlap 같은 데모를 사용해 K-NN이 어떤 유형의 문제에 강한지/약한지 확인하세요.
- 스케일링 실험: 한 축의 스케일을 크게 바꿔보고 결과가 어떻게 달라지는지 관찰하세요.
- Weighted 토글: weighted 체크를 켜고 끄며 가까운 이웃의 영향 변화를 확인하세요.
- Tie(동점) 처리: K가 짝수일 때 동점이 생길 수 있습니다 — 데모에서는 라벨 빈도가 같으면 거리 합(가중치 합)이 큰 쪽을 사용합니다.
장단점 & 응용
- 장점: 구현이 간단하고, 데이터에 대한 사전 가정이 적으며, 국소적 패턴 포착에 강함.
- 단점: 큰 데이터셋에서 느리고(예측 비용), 고차원 데이터에서는 성능 저하가 있음. 메모리 기반이라 훈련 데이터 전부를 저장해야 함.
- 응용: 추천 시스템(유사 사용자 찾기), 간단한 분류/이상치 탐지, 소량 데이터의 빠른 프로토타이핑.
디버깅 & 구현 주의사항
- 같은 위치에 여러 레이블의 점이 중복되면 예측이 불안정할 수 있음 — 이런 경우 가중치 사용 또는 중복 제거를 고려하세요.
- 거리 계산에서 0으로 나누는 문제(가중치 1/d)를 방지하기 위해 작은 ε을 더하거나, 동일 위치이면 즉시 그 라벨을 반환하도록 처리하세요.
- 히트맵 계산은 병렬화(웹워커)나 해상도 조절로 성능을 개선할 수 있습니다.
추천 실험 순서(교육용)
- Load Demo (vertical) → K=1,5,15을 차례로 적용해 경계 변화 관찰
- 스케일링을 인위적으로 변경(예: x축을 10배)하고 결과 비교
- 데이터에 노이즈/이상치 추가 후 Weighted 옵션 켜고 끄기
- XOR 타입 데이터에서 Kernel 방법(비선형 분리)과 비교해 K-NN 한계 확인