본문 바로가기

카테고리 없음

K-최근접 이웃 알고리즘 (KNN) 이해하기

K-최근접 이웃 알고리즘(K-Nearest Neighbors, KNN)은 가장 간단하면서도 직관적인 지도학습 알고리즘 중 하나로, 분류(Classification)와 회귀(Regression)에 모두 사용할 수 있는 알고리즘입니다. 이 알고리즘은 새로운 데이터 포인트가 주어졌을 때, 그 데이터와 가장 가까운 K개의 이웃 데이터를 기준으로 예측값을 결정합니다. KNN은 복잡한 수식을 사용하지 않고, 거리에 기반한 직관적인 방식으로 작동하기 때문에 이해하기 쉽고, 데이터가 클 때 강력한 성능을 발휘할 수 있습니다.

KNN의 주요 아이디어는 "가까운 데이터끼리는 서로 비슷하다"는 가정에 기반합니다. 예를 들어, 꽃의 종류를 분류할 때 KNN 알고리즘은 새로운 꽃이 들어왔을 때 그 꽃과 가장 가까운 다른 꽃들을 기준으로 종류를 예측합니다. 만약 주변의 다섯 개의 꽃 중에서 세 개가 장미라면, 그 새로운 꽃도 장미일 가능성이 크다고 보는 것입니다. 이는 매우 직관적인 방식이지만 데이터의 구조와 분포에 따라 성능이 좌우될 수 있습니다. 따라서, 이웃의 개수를 나타내는 K값과 거리 계산 방식을 잘 설정하는 것이 매우 중요합니다.

하지만 KNN 알고리즘은 거리 계산에 기초하기 때문에, 데이터의 스케일링이나 불필요한 특징이 예측 성능에 영향을 줄 수 있으며, 특히 고차원 데이터나 대용량 데이터에서는 성능이 저하될 수 있습니다. 이러한 문제점을 해결하기 위해 적절한 데이터 전처리 및 최적의 K값 설정이 중요합니다. 고차원 데이터에서는 차원의 저주(curse of dimensionality) 문제가 발생할 수 있으며, 이를 해결하기 위해서는 데이터 차원을 축소하거나 중요한 특징만을 선택해야 합니다.

K-최근접 이웃 알고리즘 (KNN) 이해하기
K-최근접 이웃 알고리즘 (KNN) 이해하기

KNN 알고리즘의 작동 원리

KNN 알고리즘의 기본적인 작동 방식은 다음과 같습니다:

  1. 데이터 준비: 입력 데이터와 해당 레이블을 준비합니다. 이 데이터들은 공간 상의 좌표로 표현될 수 있습니다. 각 데이터 포인트는 특정 클래스에 속하거나 회귀의 경우에는 특정 값을 가집니다.
  2. 거리 계산: 새로운 데이터 포인트와 기존 데이터 포인트 간의 거리를 계산합니다. 일반적으로 유클리드 거리(Euclidean Distance)를 사용하지만, 경우에 따라 맨해튼 거리(Manhattan Distance)나 코사인 유사도(Cosine Similarity) 등을 사용할 수도 있습니다. 선택한 거리 측정 방법은 데이터의 특성과 문제에 따라 다르게 적용될 수 있으며, 이는 성능에 큰 영향을 미칠 수 있습니다.
  3. K개의 최근접 이웃 선택: 가장 가까운 K개의 데이터 포인트를 선택합니다. 이 K값은 미리 설정된 파라미터로, 결과에 큰 영향을 미칩니다. 일반적으로 홀수로 설정하는 경우가 많으며, 그 이유는 동일한 클래스 빈도수를 가진 경우의 타이브레이커(tie breaker) 역할을 하기 때문입니다.
  4. 예측 결정: K개의 최근접 이웃 중 가장 빈도수가 높은 클래스를 예측값으로 사용합니다. 분류 문제에서는 다수결 방식으로, 회귀 문제에서는 K개의 이웃 값들의 평균값을 예측값으로 사용합니다. 예를 들어, 회귀에서 주택 가격을 예측하는 경우 K개의 가장 가까운 이웃의 주택 가격 평균을 최종 예측값으로 사용합니다.

K값의 선택

KNN 알고리즘에서 K값은 모델의 성능에 큰 영향을 미칩니다. K값이 너무 작으면, 모델은 데이터에 과적합(overfitting) 될 가능성이 있습니다. 반대로 K값이 너무 크면, 모델이 너무 많은 이웃 데이터를 고려하므로, 일반화(generalization) 성능이 떨어질 수 있습니다. 일반적으로 K값을 홀수로 설정하는 경우가 많으며, 이는 데이터 포인트 간의 투표에서 동률이 발생하는 것을 방지하기 위함입니다.

작은 K값은 모델이 더 세세한 결정을 내리게 하며, 노이즈에 민감해져 정확한 분류가 어려워질 수 있습니다. 반면에, 큰 K값은 데이터의 전반적인 패턴을 더 잘 반영할 수 있지만, 국소적인 특징을 놓칠 수 있습니다.

거리 측정 방법

KNN에서 중요한 요소 중 하나는 "거리"입니다. 어떤 두 데이터 포인트 간의 유사성을 측정하는 방법으로, 가장 자주 사용되는 방법은 유클리드 거리입니다. 이외에도 다양한 거리 측정 방법이 있으며, 데이터의 특성에 따라 적합한 방법을 선택해야 정확한 예측이 가능합니다.

  • 유클리드 거리: 두 점 사이의 직선거리로, 가장 널리 사용되는 방법입니다.
  • 공식:
    ( d(p,q) = \sqrt {\sum_{i=1}^{n}(p_i - q_i)^2} )
  • 맨해튼 거리: 축을 따라 거리를 계산하며, 고차원 데이터에 덜 민감합니다.
  • 공식:
    ( d(p,q) = \sum_{i=1}^{n}|p_i - q_i| )
  • 코사인 유사도: 두 벡터 간의 코사인 각도를 통해 유사성을 측정합니다.
  • 공식:
    ( \cos(\theta) = \frac {p \cdot q}{|p||q|} )

KNN의 장점

  • 단순함: 매우 직관적이고 수학적 이론이 비교적 간단합니다.
  • 학습 과정이 없음: 데이터를 저장해 두고, 예측 시에만 연산을 필요로 합니다.
  • 유연성: 분류와 회귀 모두 사용 가능하며, 다양한 거리 측정 방법을 적용할 수 있습니다.
  • 모델 해석 용이성: 예측 결과를 쉽게 해석할 수 있습니다.

KNN의 단점

  • 예측 속도 느림: 대용량 데이터에서는 처리 속도가 느려질 수 있습니다.
  • 고차원 데이터에 취약: 차원이 증가하면 차원의 저주 문제가 발생할 수 있습니다.
  • 메모리 사용량 증가: 모든 데이터를 저장해야 하므로, 메모리 사용량이 많아질 수 있습니다.

KNN 성능 최적화를 위한 팁

  • 정규화: 데이터의 스케일에 민감하므로, 특성을 정규화해야 합니다.
  • 특성 선택: 불필요한 특성을 제거하여 차원을 줄이고 성능을 향상합니다.
  • K값 최적화: 교차검증을 통해 최적의 K값을 찾습니다.
  • 가중치 부여: 가까운 이웃에 더 높은 가중치를 부여하여 성능을 향상할 수 있습니다.

KNN 활용 예시

  • 이미지 분류: 손글씨 숫자 인식 등 이미지 분류 문제에서 사용됩니다.
  • 추천 시스템: 사용자 간 유사성을 바탕으로 아이템을 추천하는 방식에 사용됩니다.
  • 이상치 탐지: 금융 사기 탐지나 기계 고장 예측에 활용됩니다.

결론

K-최근접 이웃 알고리즘(KNN)은 단순하고 직관적이면서도 매우 강력한 알고리즘입니다. 적절한 K값 설정과 데이터 전처리를 통해 다양한 실세계 문제에 적용할 수 있습니다. 다만, 대용량 데이터나 고차원 데이터에서는 성능이 저하될 수 있으므로 이런 문제를 해결하기 위한 최적화 방법을 잘 고려해야 합니다. KNN은 데이터를 처음 다룰 때 좋은 출발점이 될 수 있으며, 실용적인 문제를 해결하는 데에도 유용한 도구가 될 수 있습니다.