[지도학습] KNN
지도학습 중 가장 간단하다고 볼 수 있는 거리를 이용하여 예측하는 모델
테스트 데이터와 가장 가까운 k개의 특징을 보고 테스트 데이터 예측
k-최근접 이웃(K-Nearest Neighbors, KNN)
거리가 가장 가까운 데이터포인트를 찾고, 가장 많은 클래스가 예측 결과가 됨
훈련방법 : 훈련데이터 저장
예측방법 : 궁금한 데이터에서 가장 가까운 훈련 데이터를 찾아 선택
이웃을 몇개 찾을 지 몰라서 k! 이웃개수는 내가 정하면 됨~ 이웃수는 홀수로 정하기
예측 결과는 가장 많은 이웃의 상태가 됨!
knn 과정
1. 데이터셋 나누기(train/test)
2. 이웃 수(= k) 정하기
3. 훈련 : 훈련데이터 저장
4. 예측 : 테스트 데이터에서 가장 가까운 k개 데이터 포인트가 속한 클래스 중 과반수에 해당하는 것이 예측 결과!
5. 평가

K-Neighbors Classifier
knn이랑 같은데 포인트가 속한 클래스에 따라 평면에 색을 칠함
이항이라면 색이 지정 영역으로 나뉘는 결정경계를 볼 수 있음
이웃을 많이 선택할 수록 경계가 부드러워짐 = 복잡도가 낮아짐(단순해짐)
훈련 데이터 전체 개수를 이웃으로 정하는 경우 0,1 둘 중 많은 쪽으로 예측값이 다 동일하게 선택됨
=> 예측할 의미가 없어짐

k-Neighbors Regression
하나일 경우는 knn이랑 같은데 둘 이상일 경우 개수가 많은 걸로 선택하는 것이 아니라 이웃 간의 평균
python 코드 중 sklearn 패키지 사용 시 knn_regression( weight=uniform,..) = np.mean사용한 단순 평균 (기본값) knn_regression( weight= distance,..) = 거리 고려한 가중치 평균 |
이웃수에 따른 정확도 비교

이웃 수가 많을수록 훈련데이터 정확도는 떨어지지만 테스트 정확도는 상승함
이웃 수를 너무 많이 선택하면 오히려 정확도가 떨어짐
장단점과 파라메타
kneighbors 분류기에 중요한 매개변수는 2개
- 이웃의 수
- (KNR일 경우만!) 데이터 포인트 사이의 거리를 재는 방법(기본값은 유클리디안)
장점 |
이해하기 쉬운 모델 매개변수를 많이 조정하지 않아도 좋은 성능 |
단점 |
훈련 세트가 매우 크면(특성의 수 or 샘플의 수) 느림 전처리과정이 중요! 수백개 이상의 특성을 가진 데이터셋에서는 잘 안됨 특성값 대부분이 0인 희소한 데이터 셋 잘 안됨 |
-
어떨때 사용?
복잡한 알고리즘 적용전 시작해볼 만함
* 이차원으로 했을 때 하나의 특성에만 영향이 클 수도 있어서 거리를 재는 것이기 때문에 전처리 과정에서 꼭 표준화 해주기!