IT/ML

[sklearn] kNN(k-Nearest Neighbors)

aram 2022. 11. 11. 00:15

 

k-최근접 이웃(KNN) 분류

  • 게으른 학습기 
  • 지도 학습에 활용되는 가장 단순한 종류의 알고리즘
  • 주어진 개수만큼 가까운 멤버들과 비교하여 그룹으로 분류 (Nearest Neighbour)
  • 모델 훈련X == new data가 들어오면 그때그때 분류
  • 가장 가까운 k 개의 샘플에서 다수의 클래스그 샘플의 클래스로 예측
  • 데이터와 데이터 사이의 거리를 구해야 함

 

> https://cafe.naver.com/soojebi/151442 의 문제

1.  K값에 따라 결과가 달라질 수 있다.
2.
학습 절차 없이 새로운 데이터가 들어 올때 거리를 측정한다.
3. 거리 기반의 모형이므로 예측 변수에 대한 표준화가 필요하다.

 

KNeighborsClassifier(n_neighbors, p, metric, ...)

- metric : 사용할 거리 측정 방법을 지정
    ='minkowski' :  유클리드 거리(Euclidean distance) 와 맨하튼 거리(Manhattan distance)를 일반화 한 것
- p
    =1 ( 맨하튼 거리: 격자를 이루는 선이 길이라고 생각하고 그 길이를 따라 잰 거리 )
    =2 ( 유클리드 거리: 좌표계에 두 점이 있을 때 두 지점의 최단거리 )
- n_jobs :  컴퓨터 코어를 사용할지 결정
- algorithm : 가장 가까운 이웃을 계산하기 위한 방법
- weights : 가중치 부여
    = 'distance'  :  멀리 떨어진 샘플보다 가까운 이웃의 투표에 가중치 더 부여
-  radius
    : 고정 영역의 반지름을 지정하여 이웃 샘플 결정
     ( 샘플의 클래스가 주어진 반지름 r 이내에 있는 모든 샘플의 클래스로부터 예측)

- outlier_label : 반지름 내에 다른 샘플이 하나도 없는 샘플에 부여할 레이블 지정

 

#K-nearest neighbors 하이퍼파라미터

  • n_neighbors: int, default=5
  • weights: {‘uniform’, ‘distance’} or callable, default=’uniform’
  • algorithm: {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’
  • leaf_size: int, default=30
  • p: int, default=2
  • KNeighborsClassifier 

예시코드]  

from sklearn.neighbors import NearestNeighbors
hyperparameters = {
    'n_neighbors' : list(range(1,5)),
    'weights'     : ['uniform', 'distance'],
    'algorithm'   : ['auto', 'ball_tree', 'kd_tree', 'brute'],
    'leaf_size'   : list(range(1,10)),
    'p'           : [1,2]
}

 

 

* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.

728x90