공부일기/Machine-Learning

K-최근접 이웃(K-Nearest Neighbors, K-NN)

pipiiiiii 2024. 7. 17. 14:53

K-최근접 이웃

K-최근접 이웃(K-NN)은 '유유상종'이라는 사자성어에 맞는 머신 러닝이다.

K-NN 알고리즘은 지도 학습의 한 종류로 데이터를 가장 가까운 유사 속성에 따라 분류하는 거리기반 분류 분석 모델이다.

거리 기반으로 분류하는 클러스터링과 유사한 개념이긴하나, 기존 관측치의 Y값(Class)이 존재한다는 점에서 비지도학습에 해당하는 클러스터링과 차이가 있다.    

 

K-NN 알고리즘은 거리를 측정할 때 유클리디안 거리 계산법을 사용한다. 

유클리디안 거리 계산법은 N차원의 공간에서 두 점간의 거리를 알아내는 공식으로 'L2 Distance'라고도 한다.  

 

 

K-NN 장단점

장점

  • 단순하고 효율적이다. 
  • 기저 데이터 분포에 대한 가정을 하지 않는다
  • 훈련 단계가 빠르다
  • 수치 기반 데이터 분류 작업에서 성능이 우수하다. 

단점

  • 모델을 생성하지 않아 특징과 클래스간의 관계를 이해하는데 제한적이다.
  • 적절한 K의 선택이 필요하다.
  • 데이터가 많아지면 분류 단계가 느리다.
  • 명목 특징 및 누락 데이터를 위한 추가 처리가 필요하다. 
    • 명목 특징을 수치 형식으로 변환하는 것을 '더미 코딩'이라고 한다. 
      유클리드 거리 계산법은 명목 데이터에 정의되지 않아 수치 형식으로 변환할 필요가 있는데 이를 위한 방법으로 '더미 코딩'을 활용한다 . 

      '더미 코딩' 예시
      남성과 여성이 있는 성별 범주 변수를 사용할 때 수치형으로 변환하는 작업

 

 

K-NN에서 K값 정하는 법

K값은 분류하는 데이터 포인트와 가장 가까운 K개의 이웃 데이터 포인트를 선택하는 데 사용된다. 

K값을 선택하는 것은 알고리즘이 어떻게 작동할지에 영향을 미치기 때문에 중요한데, 이런 K값을 정하기 위해서 신경을 써야하는 부분은 정규화와 K 개수 선택 두 가지가 있다. 

 

정규화

예를 들어 성인 남녀의 연봉과 시력을 특정으로 생각했을 때 연봉 단위가 원이면 편차가 천만 단위를 넘어갈 것이고 시력은 소숫점까지 따져가며 최대값과 최소값의 편차가 10 미만일 것이다. 이 두 기준을 똑같이 고려해서 반영하면 연봉이 압도적으로 반영되기 때문에 터무니없는 결론이 나올 것이다. 

그래서 모든 특성을 고르게 반영하기 위해 정규화(Normalization)을 해야 한다. 

 

정규화를 하는 방법에는 여러가지가 있지만 가장 널리 사용되는 방법은 두 가지다. 

  1. 최소값을 0, 최대값을 1로 고정한 뒤 모든 값을 0과 1 사이 값으로 변환하는 방법
  2. 평균과 표준편차를 활용해서 평균으로부터 얼마나 떨어져있는지 z-점수로 변환하는 방법 

물론 정규화가 언제나 능사는 아닐 것이지만 정규화를 하면 어느정도는 해결이 된다.  

 

 

K 개수 선택

K 개수를 선택하는 것은 모든 값을 실제로 테스트하면서 분류 정확도(Accuracy)를 계산하는과정에서 단서를 찾을 수 있다. 

  • K가 너무 작을 때 : Overfitting
    K가 너무 작으면 분류 정확도가 상당히 낮아진다. 시야가 좁아지고 근처에 있는 아주 작은 점 하나에 민감하게 영향을 받기 때문이다. 이를 과적합(overfitting)이라고 한다. 
    K-NN 알고리즘에서는 주변 다른 이웃들까지 충분히 고려하지 않았을 때 overfitting이 발생하고, 하나의 이상치(outlier)가 있을 경우 근처에 있는 점의 레이블이 그 이상치에 의해 결정될 수 있다. 
    또한, K값이 작으면 잡음과 이상치 등의 노이즈를 포함하기가 쉽다. 

    위 그림을 이용해 좀 더 쉽게 설명하자면, 그림 왼쪽 상단의 검은색 공은 이상치인 것으로 보이지만 K = 1인 경우 그 근처에 데이터가 위치하면 초록색으로 분류되는 것이 아니라 이상치를 따라 검은색으로 분류된다.  

  •  K가 너무 클 때 : Underfitting
    K가 너무 크면 과소적합(underfitting)이 발생한다. 
    과소적합은 분류기가 학습 세트의 세세한 부분에 충분히 주의를 기울이지 않았기 때문에 나타난다. 
    K값이 크면 많은 이웃을 포함하기 때문에 잡음과 이상치 등 노이즈의 영향은 줄지만 데이터 포인트 주변의 세부적인 특성을 파악하기는 어렵다.  

K값이 작아도, 많아도 정확도가 떨어지기 때문에 정확도를 확인하며 적절한 K값을 정하는 것이 좋다. 

 

 

K-NN 정확도

그리드 서치 교차검증(GridsearchCV)을 통해 성능이 높은 파라미터 K값을 찾을 수 있다.  

위 그래프를 설명하면 아래와 같다.

  • k가 1~10 정도 일때는 Underfitting으로 정확도가 65% 정도로 낮을 것을 볼 수 있다.
  • K가 100을 넘어가면 Overfitting되어 정확도가 70% 정도로 떨어진다.
  • k가 75정도일 때, ACC가 73% 정도로 가장 높으니 적절한 k값이라고 볼 수 있다.

 

 

K-NN 코드공부

https://github.com/DIB-PP/Machine-Learning

 

GitHub - DIB-PP/Machine-Learning

Contribute to DIB-PP/Machine-Learning development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

 

 

참고 사이트