본문 바로가기

프로그래밍/기계학습

K-Nearst Neighbors (KNN) _K-최근접 이웃

 

 

🟩 지도 학습의 대표적인 머신 러닝 방법 

 

🟡 분류 (classification)

-분류는 미리 정의된, 가능성 있는 여러 클래스 레이블(class label) 중 하나를 예측하는 것 

-두 개로만 나뉘는 이진 분류(Binary Classification)와 셋 이상의 클래스로 분류하는 다중 분류(multiclass classification)로 나뉜다.

-분류예시 : 얼굴 인식, 숫자 판별 (MNIST)

 

🟡 회귀(regression)

-연속적인 숫자 또는 부동소수점수 (실수)를 예측하는 것

-회귀예시: 주식 가격을 예측하며 수익을 내는 알고리즘 등

 

 

KNN이란 ? 

 

: 게으른 학습(lazy learner) 또는 사례중심학습(instance-based learning)

 

*게으른 학습: 알고리즘은 훈련 데이터에서 판별 함수(discriminative function)를 학습하는 대신 훈련 데이터 셋을 메모리에 저장하는 방법.

 

< 특징 >

-주변 k개의 자료의 클래스(class) 중 가장 많은 클래스로 특정 자료를 분류하는 방식

-새로운 자료를 가장 가까운 자료 5개 (k = 5)를 이용하여 투표하여 가장 많은 클래스로 할당한다.

-training-data 자체가 모형일 뿐 어떠한 추정 방법도 모형도 없음.

-즉 데이터 분포를 표현하기 위한 파라미터를 추정하지 않음.

-매우 간단한 방법이지만 performance는 떨어지지 않음.

 

그림이 매우 조잡하네요..심지어 화질도 구려...

- 데이터의 차원이 증가하면 차원의 저주(curse of dimension) 문제가 발생함.

-즉 KNN은 차원이 증가할수록 성능 저하가 심함

-데이터의 차원(dimensionality)이 증가할수록 해당 공간의 크기(부피)가 기하급수적으로 증가하여 동일한 개수의 데이터의 밀도는 차원이 증가할수록 급속도로 희박(sprase)해짐

-차원이 증가할수록 데이터의 분포 분석에 필요한 샘플 데이터의 개수가 기하급수적으로 증가하게 되는데 이러한 어려움을 표현한 용어가 차원의 저주임

 

🟩 KNN의 하이퍼파라미터 

🟡 탐색할 이웃 수(k)와 거리 측정 방법

- k가 작을 경우 데이터의 지역적 특성을 지나치게 반영하여 과접합(Overfitting)발생

- 반대로 매우 클 경우 모델이 과하게 정규화(Underfitting)발생

 

💛 그러니까 k가 너무 작으면 정말 가까운 이웃만 고려하기 때문에 너무 지엽적인 견해로 분류할 수 있고 이때 Overfitting이 발생한다. 반대로 K가 너무 크면 너무 많은 이웃을 고려하여 새로운 변수를 분류하기 때문에 성급한 일반화를 하게되어 Underfitting이 발생할 수 있다는 것이다. 

 

🟡 다수결 방식(Majority voting): 이웃 범주 가운데 빈도 기준 제일 많은 범주로 새 데이터의 범주를 예측하는 것

투표의 방식과 비슷!

🟡 가중 합 방식(Weighted voting): 가까운 이웃의 정보에 좀 더 가중치를 부여

 

🟩 KNN의 장단점 요약

🟡장점

- 학습데이터 내에 끼어있는 노이즈의 영향을 크게 받지 않음.

- 학습데이터 수가 많다면 꽤 효과적인 알고리즘

- 마할라노비스 거리와 같이 데이터의 분산을 고려할 경우 매우 강건한 방법론

*마할라 노비스 거리(Mahalanobis distance)는 평균과의 거리가 표준편차의 몇 배인지를 나타내는 값. 즉 어떤 값이 얼마나 일어나기 힘든 값인지, 또는 얼마나 이상한 값인지를 수치화하는 한 방법 

 

🟡단점

- 최적 이웃의 수(k)와 어떤 거리 척도(distance metric)가 분석에 적합한지 불분명해 데이터 각각의 특성에 맞게 연구자가 임의로 선정해야 함

- best K는 데이터 마다 다르기 때문에 탐욕적인 방식(Grid Search)으로 탐색

- 새로운 관측치와 각각의 학습 데이터 사이의 거리를 전부 측정해야 하므로 계산시간이 오래 걸리는 한계가 있음.

 

🟡KNN의 계산복잡성을 줄이려는 시도들

*Locality Sensitive Hashing 

*Network based Indexer

*Optimized product quantization

 

 

 

출처 : https://github.com/sejongresearch/2022.MachineLearning