k-최근접 이웃, k-NN 알고리즘 이해 - 부스트키워드 블로그 커버 이미지
검색엔진 원리
2026년 9월 1일

k-최근접 이웃(k-NN) 알고리즘 쉽게 이해하기

부스트키워드 팀

부스트키워드 팀

검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.


머신러닝이라고 하면 복잡한 수식과 오랜 학습 시간을 떠올리기 쉽지만, 그중에는 놀랍도록 단순한 직관에서 출발하는 알고리즘도 있습니다. 바로 k-최근접 이웃(k-Nearest Neighbor, k-NN)입니다. 이 알고리즘의 핵심은 단 한 문장으로 요약할 수 있습니다. "새로운 데이터가 무엇인지 궁금하면, 가장 가까이 있는 이웃들을 살펴보고 그들과 비슷하게 판단하자." 이 글에서는 k-NN이 실제로 어떻게 작동하는지 예제와 함께 알아봅니다.

"유유상종"이라는 아이디어에서 출발한 알고리즘

비슷한 데이터는 비슷한 결과를 가질 것이라는 직관

"끼리끼리 모인다"는 말처럼, k-NN은 서로 비슷한 특징을 가진 데이터는 결과도 비슷할 것이라는 직관에서 출발합니다. 예를 들어 어떤 영화 리뷰가 기존에 '긍정적'이라고 분류된 리뷰들과 표현이나 단어 사용 패턴이 매우 비슷하다면, 이 새로운 리뷰도 긍정적일 가능성이 높다고 판단하는 식입니다.

복잡한 학습 과정 없이 판단한다는 특징

많은 머신러닝 알고리즘은 데이터를 미리 학습해서 하나의 규칙이나 모델을 만들어두고, 이후 새로운 데이터가 들어오면 그 모델을 이용해 빠르게 판단합니다. 하지만 k-NN은 조금 다릅니다. 별도로 규칙을 미리 만들어두지 않고, 새로운 데이터가 들어올 때마다 그 순간에 기존 데이터 전체와 직접 비교하는 방식으로 작동합니다. 이 때문에 k-NN은 '게으른 학습(Lazy Learning)'이라는 별명으로 불리기도 합니다. 미리 공부해두는 대신, 문제가 주어질 때마다 그때그때 참고 자료를 뒤져 답을 찾는 방식과 비슷하다고 이해하면 됩니다.

k-NN은 어떻게 작동하는가

데이터를 공간 위의 점으로 표현하기

k-NN을 이해하려면 먼저 데이터를 좌표 공간 위의 점으로 표현한다고 생각해야 합니다. 예를 들어 영화 리뷰라면 "긍정적인 단어가 몇 번 등장했는지"와 "부정적인 단어가 몇 번 등장했는지"라는 두 가지 특징을 각각 x축과 y축으로 삼아, 리뷰 하나하나를 평면 위의 한 점으로 나타낼 수 있습니다. 실제로는 훨씬 더 많은 특징을 사용해 고차원 공간에 점을 찍지만, 기본 원리는 동일합니다.

새로운 데이터와 가장 가까운 k개의 이웃 찾기

이렇게 기존 데이터를 공간 위에 점으로 찍어두었다면, 새로운 데이터가 들어왔을 때 이 데이터도 같은 공간 위의 한 점으로 표시합니다. 그런 다음 이 새로운 점과 거리가 가장 가까운 기존 데이터 점을 순서대로 k개 찾아냅니다. 여기서 k는 몇 개의 이웃을 참고할지를 정하는 숫자로, 사용자가 미리 정해주는 값입니다.

이웃들의 다수결로 분류 결정하기

가장 가까운 k개의 이웃을 찾았다면, 이 이웃들이 각각 어떤 카테고리에 속해 있는지를 살펴보고 다수결로 새로운 데이터의 카테고리를 결정합니다. 예를 들어 k를 5로 정했을 때, 가장 가까운 이웃 5개 중 3개가 '긍정', 2개가 '부정'이라면 새로운 데이터는 '긍정'으로 분류됩니다.

간단한 예제로 이해하는 k-NN 분류

영화 리뷰를 '긍정/부정'으로 분류하는 가상의 예시

다음과 같이 이미 분류가 끝난 영화 리뷰 6개가 있다고 가정해봅시다. 각 리뷰는 "긍정 단어 등장 횟수"와 "부정 단어 등장 횟수"로 표현됩니다.

  • 리뷰 A (긍정 5, 부정 0) → 긍정
  • 리뷰 B (긍정 4, 부정 1) → 긍정
  • 리뷰 C (긍정 4, 부정 0) → 긍정
  • 리뷰 D (긍정 0, 부정 5) → 부정
  • 리뷰 E (긍정 1, 부정 4) → 부정
  • 리뷰 F (긍정 0, 부정 4) → 부정

이제 "긍정 단어 3, 부정 단어 1"이라는 새로운 리뷰가 들어왔다고 해봅시다. 이 리뷰와 기존 리뷰들 사이의 거리를 계산해보면, 리뷰 B(긍정 4, 부정 1)와 리뷰 C(긍정 4, 부정 0)가 가장 가까운 이웃으로 나타나고, 그다음으로 리뷰 A가 가깝게 나타납니다.

k값에 따라 결과가 달라지는 과정

만약 k를 1로 설정한다면, 가장 가까운 이웃 하나(리뷰 B)만 참고하므로 새로운 리뷰는 '긍정'으로 분류됩니다. k를 3으로 설정한다면, 가장 가까운 이웃 세 개(리뷰 B, C, A)를 참고하게 되는데 셋 다 '긍정'이므로 역시 '긍정'으로 분류됩니다. 이처럼 k값에 따라 참고하는 이웃의 범위가 달라지고, 경우에 따라서는 최종 분류 결과가 바뀔 수도 있습니다.

k값은 어떻게 정할까

k가 너무 작을 때의 문제

k를 1처럼 매우 작게 설정하면, 단 하나의 이웃만 보고 판단하기 때문에 그 이웃 데이터가 우연히 잘못 분류되어 있거나 특이한 사례였을 경우 결과가 쉽게 왜곡될 수 있습니다. 이를 노이즈(잡음)에 민감하다고 표현합니다.

k가 너무 클 때의 문제

반대로 k를 지나치게 크게 설정하면, 새로운 데이터와 거리가 먼 이웃까지 지나치게 많이 참고하게 되어 오히려 실제로 가까운 이웃들이 갖는 특징이 희석되어 버립니다. 극단적으로 k를 전체 데이터 개수만큼 크게 설정하면, 결국 가장 많은 데이터가 속한 카테고리로만 항상 분류되는 무의미한 결과가 나옵니다.

적절한 k값을 찾는 일반적인 방법

그래서 실무에서는 여러 k값을 직접 시도해보면서, 어떤 k값일 때 분류 정확도가 가장 높게 나오는지를 실험적으로 확인하는 방법을 주로 사용합니다. 이 과정에서 데이터를 일부는 학습용으로, 일부는 검증용으로 나누어 각 k값의 성능을 비교하는 방식이 일반적으로 쓰입니다.

k-NN의 장점과 한계

이해하기 쉽고 구현이 간단하다는 장점

k-NN의 가장 큰 장점은 원리가 직관적이어서 이해하기 쉽고, 별도의 복잡한 학습 과정 없이도 비교적 좋은 성능을 낼 수 있다는 점입니다. 데이터의 분포가 복잡하고 뚜렷한 규칙으로 표현하기 어려운 경우에도 유연하게 대응할 수 있습니다.

데이터가 많아질수록 느려진다는 단점

반면 새로운 데이터가 들어올 때마다 기존 데이터 전체와 거리를 일일이 계산해야 하기 때문에, 데이터의 양이 많아질수록 판단 속도가 크게 느려진다는 단점이 있습니다. 이 때문에 대규모 데이터를 다룰 때는 속도를 높이기 위한 별도의 자료구조나 근사 기법을 함께 사용하는 경우가 많습니다.

'거리'를 어떻게 정의하느냐에 따라 결과가 달라지는 문제

또한 k-NN은 "가까운 정도"를 어떻게 계산하느냐에 따라 결과가 크게 달라질 수 있습니다. 데이터의 각 특징이 서로 다른 단위와 범위를 가지고 있다면, 특정 특징이 거리 계산에 지나치게 큰 영향을 미칠 수 있어 사전에 데이터를 적절히 조정해주는 과정이 필요합니다.

실제로 어디에 쓰일까

추천 시스템

k-NN의 원리는 추천 시스템에서도 자주 활용됩니다. "나와 취향이 비슷한 다른 사용자들이 좋아한 상품이나 콘텐츠"를 찾아 추천해주는 방식이 바로 k-NN의 발상과 매우 닮아 있습니다.

이미지 인식, 이상 거래 탐지 등 활용 사례

이 외에도 손글씨 숫자를 인식하거나, 신용카드의 이상 거래를 평소 패턴과 비교해 탐지하는 등 "새로운 데이터가 기존의 어떤 사례와 가장 비슷한가"를 판단해야 하는 다양한 문제에 k-NN의 원리가 응용되고 있습니다.

정리하며

k-NN은 복잡한 수학적 모델을 만드는 대신, "가장 가까운 이웃들을 보고 판단한다"는 단순하고 직관적인 방식으로 데이터를 분류합니다. 이 단순함 덕분에 머신러닝을 처음 접하는 사람도 비교적 쉽게 원리를 이해할 수 있고, 실제로도 여러 분야에서 실용적으로 활용되고 있습니다. 다만 데이터 양이 많아질수록 속도가 느려지고 거리 계산 방식에 결과가 민감하다는 점은, k-NN을 실제로 적용할 때 반드시 염두에 두어야 할 부분입니다.

Q.k-NN은 왜 '게으른 학습(Lazy Learning)'이라고 불리나요?

A.대부분의 머신러닝 알고리즘은 데이터를 미리 학습해 하나의 규칙이나 모델을 만들어두지만, k-NN은 이러한 사전 학습 과정 없이 새로운 데이터가 들어올 때마다 그 순간에 기존 데이터와 직접 비교합니다. 미리 공부해두지 않고 그때그때 참고 자료를 찾아본다는 의미에서 '게으르다'고 표현합니다.

Q.k값은 홀수로 정해야 하나요?

A.분류할 카테고리가 두 개뿐인 경우, k를 짝수로 정하면 이웃들의 표가 동점으로 갈리는 상황이 생길 수 있습니다. 이런 상황을 피하기 위해 카테고리가 두 개인 문제에서는 흔히 k를 홀수로 설정하는 경우가 많지만, 반드시 지켜야 하는 규칙은 아닙니다.

Q.k-NN과 k-means는 같은 알고리즘인가요?

A.이름이 비슷해서 자주 혼동되지만 서로 다른 알고리즘입니다. k-NN은 이미 정답(카테고리)이 알려진 데이터를 참고해 새로운 데이터를 분류하는 방법이고, k-means는 정답이 주어지지 않은 데이터를 비슷한 것끼리 몇 개의 그룹으로 자동으로 묶어주는 군집화 방법입니다.

Written by

부스트키워드 팀

부스트키워드 팀

검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.