이제 데이터 공부 안하는 블로그

[파이썬 라이브러리를 활용한 머신러닝] K -Nearest Neighbors 본문

머신러닝

[파이썬 라이브러리를 활용한 머신러닝] K -Nearest Neighbors

공사노비 2021. 9. 16. 13:03

제가 '파이썬 라이브러리를 활용한 머신러닝' 읽고 정리한 내용입니다.

 

K -Nearest Neighbors 

데이터를 분류할 수 있는 가장 간단한 머신러닝 알고리즘 중 하나다.

분류문제(KNeighborsClassifier 사용)와 회귀문제(KNeighborsRegressor 사용) 모두에 적용할 수 있는 알고리즘이다. 새로운 데이터 포인트에 대해 예측할 때 알고리즘이 훈련 데이터셋에서 가장 가까운 데이터 포인트, 즉 'Nearest Neighbor'를 찾아준다. 

 

 

 

여기서 k는 데이터 포인트 개수를 말하는데 임의로 지정할 수 있다. k를 3으로 지정하면 세 개의 최근접 이웃을 찾아준다. 아래에서처럼n_neighbors=3 으로 k를 3으로 지정해주면 가장 가까운 이웃을 3개 찾은 다음에 그 중에 숫자가 제일 많은 이웃(클래스)을 레이블로 지정한다. 예를 들면 아래 사진 맨 왼족에 빨간 별을 기준으로, 가장 가까운 이웃 3개는 파란 동그라미 클래스가 1개, 빨간 세모 클래스가 2개이다. 이웃이 더 많은 클래스를 레이블로 지정하기 때문에 빨간 별의 레이블은 빨간 세모 클래스가 된다. 

 

다만, k를 몇으로 설정해야 가장 좋은지는 여러 번의 시도를 통해 찾아봐야한다. k수 (이웃수)가 적으면 모델의 복잡도가 높아지고, 반대로 k수가 많으면 복잡도는 낮아진다.  너무 낮은 k수(이웃수)를 설정하면 모델이 너무 복잡해지고 아웃라이어를 캐치하지 못한다는 문제점이 있고, 반대로 k수가 너무 높으면 모델이 너무 단순해져서 정확도가 더 나빠질 수 있다.

 

 

 

내가 좋아하는 Josh 아저씨의 유튜브 영상 한 편이면 더 잘 이해할 수 있다.

https://youtu.be/HVXime0nQeI

 

 

K -Nearest Neighbors 장단점

매우 쉬운 모델이고 많이 조정하지 않아도 좋은 성능을 발휘한다는 점이 좋다. 하지만 많은 특성을 가진 데이터셋에서는 잘 작동하지 않으며, 희소값이 많은 데이터셋에서도 잘 작동하지 않는다는 단점이 있다.

 

 

K -Nearest Neighbors 주의할 점 (매개변수)

- 위에서도 언급했듯이 k의 개수(이웃의 수)를 잘 조정해야 한다. 

- KNeighborsClassifier(분류문제인 경우 사용)와 KNeighborsRegressor(회귀문제인 경우 사용)의 객체를 생성할 때 metric 매개변수를 사용하여 거리 측정 방식을 변경할 수 있는데, 기본적으로는 여러 환경에서 잘 동작하는 유클리디안 거리 방식을 사용한다.