K-최근접 이웃(KNN, K-Nearest Neighbors)은 「새 점이 들어오면 그것과 가장 가까운 K개의 학습 데이터 점을 찾고, 그들의 다수결(분류) 또는 평균(회귀)으로 답을 내는」 매우 단순한 알고리즘입니다.
예를 들어 K=5인 분류 문제에서 새 사진이 들어오면, 학습 데이터 중 그 사진과 가장 비슷한 5장을 찾아 그중 다수가 「고양이」면 「고양이」, 다수가 「개」면 「개」라고 답합니다.
매우 직관적이라 「게으른 학습(lazy learning)」으로도 불립니다 — 학습 단계에서 거의 아무 일도 안 하고, 추론 단계에서 모든 비교를 합니다.
비유하자면 KNN은 「새 친구를 사귀려 할 때 그 친구의 가장 가까운 친구들 5명이 누구인지 보고 그가 어떤 사람일지 짐작하는 것」과 비슷합니다.
「유유상종」이라는 인간 본성과 잘 맞는 발상입니다.
거리를 어떻게 잴 것인가가 핵심 결정 요소입니다.
보통 유클리드 거리(직선 거리)를 쓰지만 코사인 유사도, 맨해튼 거리 등 다양한 척도가 있습니다.
또 K를 너무 작게 잡으면 과적합(노이즈에 민감), 너무 크게 잡으면 과소적합(모든 답이 비슷해짐)이 옵니다.
보통 K는 5~50 사이에서 시작합니다.
KNN의 큰 약점은 「데이터가 많아질수록 추론이 느려진다」는 점입니다.
매번 모든 학습 데이터와 거리를 비교해야 하기 때문입니다.
이 한계를 줄이기 위해 KD-Tree·Ball-Tree, 그리고 최근의 ANN(Approximate Nearest Neighbors) 같은 빠른 검색 알고리즘이 함께 쓰입니다.
한 줄 요약
KNN은 새 점을 가장 가까운 K개의 학습 점들의 다수결로 분류하는 단순한 「게으른 학습」입니다.
직관적이지만 데이터가 많아지면 추론이 느려집니다.
더 알아볼 것
- 거리 척도 — 유클리드·코사인·맨해튼
- FAISS — Meta의 대규모 ANN 라이브러리
- KNN과 추천 시스템의 관계