K-최근접 이웃

From CS Wiki
Revision as of 17:24, 28 October 2024 by 핵톤 (talk | contribs)
K-nearest neighbor; KNN
k-최근접 이웃(k-Nearest Neighbors, kNN) 알고리즘은 모든 학습 데이터를 저장한 뒤, 새로운 데이터가 들어왔을 때 유사도 측정(similarity measure) 또는 유사도 함수(similarity function)에 기반해 가장 가까운 데이터를 찾는 방식으로 예측을 수행하는 알고리즘이다. 이때 유사도는 일반적으로 유클리드 거리(Euclidean Distance)와 같은 거리를 사용해 계산된다.

Knn 예시.png

주요 특징

  • 비모수적(non-parametric): kNN은 데이터에 대해 특정 함수 형태를 가정하지 않는다. 이는 여러 유형의 데이터에 대해 유연하게 적용할 수 있어 강력한 이점을 제공하지만, 반대로 데이터에 지나치게 적합되는 과적합(overfitting) 문제를 일으킬 수 있다.
  • 훈련 과정이 없음: kNN은 사전 학습(training) 단계가 없다. 즉, 모델이 학습되지 않으며, 예측할 때 직접 계산을 수행한다. 이러한 특성 때문에 게으른 학습(lazy learning) 또는 인스턴스 기반 학습(instance-based learning) 알고리즘으로도 불린다.
  • 예측 시 느림: 훈련된 모델을 미리 저장하지 않기 때문에 예측 단계에서 모든 데이터를 참고해야 하며, 특히 데이터셋이 클수록 많은 시간이 소요된다. 이는 예측이 빠른 다른 알고리즘에 비해 단점으로 작용할 수 있다.
  • 널리 사용됨: 직관적이고 이해하기 쉬운 알고리즘으로, 다양한 분류와 회귀 문제에 활용된다.

작동 방식

  1. 데이터 준비: 각 데이터 포인트의 위치와 해당하는 클래스(또는 값)를 포함한 학습 데이터를 준비한다.
  2. 거리 계산: 새로운 데이터 포인트가 주어지면, 학습 데이터와의 거리를 계산한다.
  3. 가장 가까운 k개의 이웃 선택: 계산된 거리 중 가장 가까운 k개의 데이터 포인트를 선택한다.
  4. 투표:
    • 분류: 가장 가까운 k개의 이웃 데이터 포인트들 중 다수결을 통해 가장 많이 속하는 클래스로 분류한다.
    • 회귀: k개의 이웃 데이터 포인트들의 평균을 사용하여 값을 예측한다.

구체적인 예시

예를 들어, 특정 사용자의 관심사를 예측하는 상황을 생각해보자. 이전에 수집된 사용자 데이터가 있으며, 각각의 사용자는 특정 장르의 영화를 선호하는 정보가 담겨 있다고 가정한다.

  1. 데이터 준비: 각 사용자의 나이와 영화 장르 선호도가 포함된 데이터를 준비한다.
  2. 새로운 사용자 정보 입력: 예를 들어, 나이가 30살인 새로운 사용자가 입력된다.
  3. 거리 계산: 이 새로운 사용자가 기존 사용자와 얼마나 가까운지(예: 나이 차이를 기준으로) 계산한다.
  4. 이웃 선택: 가까운 k명의 사용자를 선택한다.
  5. 투표: k명의 사용자 중 가장 많이 선호하는 영화 장르를 선택하여 새로운 사용자가 선호할 가능성이 큰 장르를 예측한다.