오답노트

[ML] KNN (K-Nearest Neighbors) 본문

Python/ML

[ML] KNN (K-Nearest Neighbors)

권멋져 2022. 8. 23. 18:38

KNN

예측 데이터의 변수로 부터 실측 데이터의 변수 사이의 거리를 계산하여 그 중 가장 가까운 k개 데이터의 평균으로 타겟 데이터를 예측하는 알고리즘

 

(출처 :  https://pub.towardsai.net/k-nearest-neighbors-knn-algorithm-tutorial-machine-learning-basics-ml-ec6756d3e0ac)

 

장점으로는 데이터의 분포 형태와 상관이 없다.

설명변수의 개수가 많아도 사용가능하다.

 

단점으로는 계산시간이 오래걸리고, 훈련 데이터를 모델에 함께 저장하고 있다.

해석이 어렵다.

 

K 값

KNN은 인접한 k 개의 데이터의 평균으로 판단한다.

k를 어떻게 설정하느냐에 따라 예측 결과가 달라지게 된다.

 

k 값을 최대 train 데이터의 개수까지 키울 수 있는데, 그렇게 되면 train 데이터의 평균으로 데이터를 예측하게 된다.

즉, 평균 모델이 되는 것이다.

 

적절한 k 값을 찾아 최적의 성능을 가진 모델로 모델링해야한다.

 

보통 데이터의 개수의 제곱근 근처에서 답을 찾아간다.

 

거리 계산법

(출처 : https://www.varsitytutors.com/hotmath/hotmath_help/topics/distance-formula)

 

A 에서 B의 거리를 측정할 때

A와 B의 직선 거리를 유클리디안 거리 (Euclidean Distance)

A에서 C, C에서 B로 가는 거리를 맨해튼 거리 (Manhattan Distance) 라고 한다.

거리 계산법에 따라 성능이 달라질 수 있다.

 

스케일링

변수들의 범위는 제각각일 경우가 많다.

KNN을 사용하기 위해서는 변수들 값의 범위를 맞춰 줘야만 한다.

 

Normalization은 최대 최소값을 이용해 비율로 스케일링 하는 방법이다.

 

Standardization은 평균과 분산을 이용하여 스케일링 하는 방법이다.

 

스케일의 방법의 따라서 모델의 성능이 바뀔 수 있다.

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

[ML] 범주형 데이터 모델 평가 방법  (0) 2022.08.23
[ML] 로지스틱 회귀(Logistic Regression)  (0) 2022.08.23
[ML] KNN - KNeighborsRegressor  (0) 2022.08.23
[ML] 선형회귀 (Linear Regression)  (0) 2022.08.22
[ML] 모델링 개요  (0) 2022.08.22