본문 바로가기
Python/ML

(KNN) K-Nearest Neighbors 정리

by JONGSKY 2023. 1. 18.
728x90
SMALL

1. K 최근법 이웃 알고리즘이란? (KNN)

 

KNN 또는 K - Nearest Neighbors 또는 K-최근법 이웃 알고리즘이라고 불리는 알고리즘은

(이하 KNN으로 통일)

데이터 분류작업에서 기초가 되는 알고리즘으로,

 

새로운 입력으로 들어온 데이터를 특정값으로 분류하는데

현재 데이터와 가장 가까운 K개의 데이터를 찾아서 가장 많은 분류 값으로

현재의 데이터를 분류하는 알고리즘이다.

 

아래 이미지는 KNN의 이해를 돕기 위한 이미지이다. (이미지 출처 : INEED COFFEE)

 

KNN 설명 이미지

 

K가 3이라고 가정했을 때 별모양 데이터가 분류되는 방법으로

가장 가까운 데이터 3개를 보았을 때 A 클래스 1개, B 클래스가 2개 임으로 별모양 데이터는 B 그룹으로 분류된다.

 

※ 데이터 분류란 새로운 데이터를 기존 데이터의 레이블 중 하나로 분류하는 작업을 의미한다.

 

2. KNN의 동작 원리

 

동작 원리는 간단하게 데이터의 위치 즉 벡터 공간에서 두 벡터의 거리를 기반으로 가깝고 멀다는 것을 구분하면 된다.

 

여기서 거리는 유클리드 거리와 맨하튼 거리 2가지로 표현할 수 있다.

 

유클리드 거리 계산법과 맨하튼 거리 계산법은 아래 그림을 참고하자.(이미지 출처 : EuleeKwon's Blog)

 

유클리드 거리와 맨하튼 거리 계산법

 

Q. 여기서 만약 가까운 이라는 개념이 현실세계와 같은 3차원 좌표값 혹은 2차원의 값이 아닌 N차원의 일반적인 데이터에서는 어떻게 정의할까?

A. 우리 눈으로 볼 수 는 없지만 두 거리 계산법(유클리드 거리, 맨해튼 거리)을 이용해 멀고 가깝고는 계산 가능하다. 시각화를 하기 위해서는 차원을 축소시켜 2차원 혹은 3차원으로 표현한다면 조금 더 직관적으로 이해하기 쉽다. (이미지 출처 : 테디노트)

 

3차원 분류 시각화 그래프

 

3. KNN의 장점과 단점

 

장점

- 간단하다. (수식이 간단하고 이해하기 쉽다.)

- 숫자로 구분된 속성에 우수한 성능을 보인다. 거리, 횟수, 점수와 같은 수치형 레이블에 대해서 높은 정확도를 기대할 수 있다.

- Lazy learning(게으른 학습) 의 특성이 있다. 즉 실제 예측 시점에서 계산을 진행하기 때문에 별도의 모델이 사전 학습을 할 필요가 없다.

- 이진 분류뿐만 아니라 다중 분류의 경우에도 적용할 수 있다.

 

단점

- 3번 째 장점인 Lazy learning의 trade-off로 연산속도가 다른 알고리즘에 비해 아주 느리다.

- 하나의 분류를 진행할 때마다 전체 데이터와 비교를 해야 하기 때문에 데이터 차원에 따라 연산 속도가 크게 늘어날 수 있다.

- 다른 알고리즘에 비해 데이터의 편향(bias)성, 이상치에 대해 민감하다.

- 적절한 K 값을 찾아내는 것이 중요하다.

 

4. KNN 코드 실행 시 확인

 

from sklearn.neighbors import KNeighborsClassifier

 

Parameter

1. n_neighbors : 이웃의 개수를 지정 (default : 5)

2. weights : 예측에 사용되는 가중치 uniform : 균일한 가중치 / distance : 거리의 역수로 가중치(default : uniform)

3. algorithm : 가장 가까운 이웃에 계산하는데 사용되는 알고리즘(default : auto)

    auto : 가장 적한한 알고리즘 찾아줌 / ball_tree : 자세한 설명 / kd_tree : 자세한 설명 / brute : 무차별 대입 검색

4. leaf_size : ball_tree 또는 kd_tree 사용 시 설정할 leaf 크기, Algorithum의 속도, 메모리 크기, 모델 성능에 영향(default : 30)

5. p : 거리를 재는 방법 1:맨해튼거리 2:유클리디안 거리 (default : 2)

6. metric : distance metric의 종류 - 자세한 설명(default : minkowski)

7. metric_params : 메트릭 함수에 대한 추가 키워드 인수(default : None)

8. n_jobs : CPU 코어 지정 수 -1:모든 CPU 코어 사용(default : -1)

 

Method

1. fit() : 모델을 데이터로 훈련

2. predict() : 모델을 데이터로 훈련하고 예측 (주어진 값으로 모델이 예측)

3. score() : 훈련된 모델의 신뢰도 측정

4. kneighbors() : 입력한 데이터에 가장 가까운 이웃 중 n_neighbors개의 거리와 인덱스 반환

728x90
LIST

'Python > ML' 카테고리의 다른 글

Machine Learning(기계학습)의 전반적인 개요  (0) 2023.10.21