Posts KNN 개념 정리 및 활용 (sklearn)
Post
Cancel

KNN 개념 정리 및 활용 (sklearn)

:mag: Index


:radio_button: k-최근접 이웃 알고리즘 이란? (KNN)

​

K - Nearest Neighbors , K- 최근접 이웃 알고리즘 이란 \* 데이터 분류 작업 에서 활용되는 기초가 되는 알고리즘이다.

​

새로운 입력으로 들어온 데이터를 특정값으로 분류하는데 현재 데이터와 가장 가까운 k개의 데이터를 찾아 가장 많은 분류 값으로 현재의 데이터를 분류하는 알고리즘이다.

​

아래는 k-최근접 이웃 알고리즘의 이해를 돕기 위한 사진이다.

초기

​

1
* 가장 가까운 3개의 기존 데이터의 분류를 살펴본 결과 , B분류가 2개 A분류가 1개이므로 새로운 데이터 '별' 은 B분류로 할당

​

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

​


:radio_button: k-최근접 이웃 알고리즘의 동작 원리

​

가장 가까운 이라는 개념은 현실 세계와 같은 3차원 좌표값이 아닌 3이상의 N차원의 일반적인 데이터에 대해서는 어떻게 정의할까?

​

사실 3차원 이상의 데이터는 우리 눈으로 확인 가능한 형태로 표현할 수 없을 뿐 , 거리의 계산은 동일하게 벡터 공간에서 두 벡터의 유클리디안 거리를 기반으로 가깝고 멀다는 것을 구분하면 된다.

​

(x1,x2,…,xn) 의 값을 가지는 데이터와 (y1,y2,…,yn) 의 값을 가지는 데이터 사이 거리는 다음과 같이 나타낸다.

​

\[dist = \sqrt{(x_1-y_1)^2 + (x_2-y_2)^2 + \dots + (x_n-y_n)^2}\]

​


:radio_button: k-최근접 이웃 알고리즘의 장단점

​

pros

  • 당연하지만 , 우선 정말 간단하다. 선수 지식을 필요로하지 않는다.
  • 숫자로 구분된 속성에 우수한 성능을 보인다. 거리, 횟수 , 점수와 같은 수치형 레이블에 대해서 높은 정확도를 기대할 수 있다.
  • Lazy learning 의 특성이 있다. 즉 실제 예측 시점에서 계산을 진행하기 때문에 별도의 모델이 사전 학습을 할 필요가 없다.
  • 이진 분류는 물론 , 다중 분류의 경우에도 적용할 수 있다.

cons

  • pros 3번의 trade-off 로 연산 (or 예측) 속도가 다른 알고리즘에 비해 아주 느리다.

  • 하나의 예측 (or 분류) 를 진행할 때마다 전체 데이터와 비교를 진행하기 때문에 데이터 차원에 따라 연산 속도가 크게 늘어난다.

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

  • 적절한 K값을 찾는것이 관건


:radio_button: sklearn 패키지를 활용한 KNN

​

:pencil2: k-최근접 이웃 객체 생성

1
2
3
4
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor

knn = KNeighbors(n_neighbors=k)

​

세부 파라미터 :

  • n_neighbors : 몇개의 최근접을 조사하여 데이터 분류를 할지 지정하는 옵션. 하나의 파라미터만 존재하므로 최적의 k 값을 찾는것이 중요하다. (k 의 변화에 따른 cross_val_score 그래프를 그리는 것이 일반적)

​

:pencil2: k-최근접 이웃 객체 학습

1
knn.fit(xdata,ylabel)

​

세부 내용 :

  • xdata 는 벡터 공간의 실제 데이터 벡터들로 이루어져있고 ylabel 은 각 데이터의 분류 값이다.
  • 다른 알고리즘 처럼 실제 학습이 이루어지진 않고 predict 메소드가 실행됨에 따라 xdata 전체 데이터와 조사가 진행된다.

​

:pencil2: k-최근접 이웃 객체 예측

1
2
knn.predict(xtest)
knn.predict_proba(xtest)

​

세부 내용 :

  • 새로운 입력 xtest 에 대하여 k 개의 최근접을 조사하고 데이터 분류를 진행

  • predict의 경우 최빈 , 혹은 과반수 이상인 레이블 값 하나를 반환하고 predict_proba 의 경우 각 분류 카테고리에 속할 확률들을 반환한다.


:radio_button: 참고자료

This post is licensed under CC BY 4.0 by the author.