[ML]KNN 알고리즘
K-Nearest Neighbor : KNN , 최근접 이웃
개요
휘귀와 분류 모두 가능한 Memory-Based Learning 지도학습 알고리즘이다. (분류에 더 많이 사용)
이 알고리즘은, 유사한 데이터 포인트는 유사한 레이블이나 값을 갖는 경향이 있다는 아이디어에 의존한다.
즉, 새로운 데이터가 주어졌을 때, 거리 기반으로 가장 가까운 K개의 이웃 데이터들을 찾아서 이 데이터의 클래스 또는 값을 예측하게 된다.
가운데 동그라미(새로운 데이터 포인트)가 네모 카테고리로 분류되어야 하는 것인지,
세모 카테고리로 분류되어야 하는지 k개의 이웃 개수에 따라 결정된다.
Memory-Based Learning(Instance - Based - Learning)
K-Nearest Neighbors(KNN)는 메모리 기반 학습 알고리즘 중 하나이다.
훈련 데이터셋을 메모리에 저장하고, 새로운 데이터 포인트를 분류할 때 저장된 데이터 포인트들과의 유사도를 측정하여 예측하는 방식이다. 메모리 기반 학습 알고리즘은 다음과 같은 특징을 가진다.
1. 학습 단계(Learning Phase) 없음: Memory-Based Learning은 훈련 데이터를 단순히 저장하기 때문에, 별도의 학습단계가 없다(바로 적용 가능)
2. 단순한 모델 : 모델 자체가 간단하며, 복잡한 파라미터 조정이나 튜닝 과정이 필요하지 않음(유사도 측정 방법과 이웃의 수(K)만 조절)
3. 데이터 의존적: Memory-Based Learning은 저장된 데이터에 직접적으로 의존한다(데이터의 품질과 양이 예측 성능에 직접적인 영향을 미침) > 데이터 품질 향상이 중요
따라서, Memory-Based Learning은 간단하고 직관적이기 때문에, 특히 데이터셋이 작고 노이즈가 적을 때 효과적인 방법이다.
K 값 결정
K 값을 통해 각 클래스에 대한 경계를 설정한다.
K 값에 따라 변하는 결정경계는 K 값이 증가함에 따라 경계가 더 부드러워진다.
너무 큰 K값 설정 시
- 미세한 경계 값을 잘 분류하지 못한다
- 모델이 너무 단순해지고 편향이 높아진다(결정 경계가 더 부드러워짐 > 일반화 능력이 저하 )
너무 작은 K값 설정 시
- 패턴이 직관적이지 않고, 이상치의 영향을 크게 받는다.
- 모델이 복잡해지고 분산이 높아진다(결정 경계가 더 복잡해짐 > 과적합 가능성 증가 > 일반화 능력 저하)
거리 계산 방법
독립변수/ 종속변수의 유형에 따라 거리 계산 / 방법이 달라진다.
독립변수 | 거리 |
범주형 | $$ HammingDistance(x,y)= \sum_{i = 1}^{n} |x\underset{i}{} - y\underset{i}{}|$$ |
연속형 | $$ EuclideanDistance(x,y)= \sqrt {\sum_{n=1}^{i}({x_{i}}^{} - {y_{i}}^{})^2} $$ $$ ManhattanDistance(x,y)= \sum_{n=1}^{i}\left|{x_{i}}^{} - {y_{i}}^{}\right| $$ |
알고리즘 예측 방법
종속변수 | 설명 |
범주형 | 근처 k 개 중에 가장 많은 범주 선택(Majority Voting)) |
연속형 | 근처 k개의 평균 선택 |
*데이터가 불균형 하다면?
각 이웃의 예측에 가중치를 부여 > 가중 다수결 투표(Weighted Majority Voting)
주변 이웃들의 예측 및 가중치 계산: 주변 이웃들의 예측을 수집하면서, 각 이웃의 예측에 가중치 부여(일반적으로 더 가까운 이웃에 더 높은 가중치를 할당하거나, 이웃의 중요도를 고려하여 가중치를 조절)