지도 학습 알고리즘
어떤 데이터가 주어지면 그 주변(이웃)의 데이터를 살펴본 뒤 더 많은 데이터가 포함되어 있는 범주로 분류하는 방식
새로운 데이터가 주어졌을 때 (빨간 점) 이를 Class A로 분류할지, Class B로 분류할지 판단하는 문제입니다. k=3일 때, 즉 안 쪽 원을 먼저 살펴보겠습니다. k가 3이라는 것은 가장 가까운 주변의 3개 데이터를 본 뒤, 3개의 주변 데이터가 더 많이 포함되어 있는 범주로 분류하겠다는 것입니다. 빨간 점 주변에 노란색 점(Class A) 1개와 보라색 점(Class B) 2개가 있습니다. 따라서 k=3 일 때는 해당 데이터가 Class B (보라색 점)으로 분류됩니다. k=6일 때를 보겠습니다. 원이 더 커졌습니다. 이제 원 안에 노란색 점 4개와 보라색 점 2개가 있습니다. 따라서 k=6일 때는 노란색 점으로 분류합니다. KNN은 K를 어떻게 정하냐에 따라 결과 값이 바뀔 수 있습니다. K가 너무 작아서도 안 되고, 너무 커서도 안 됩니다. K의 default 값은 5입니다. 가장 가까운 주변 5개 데이터를 기반으로 분류한다는 것입니다. 일반적으로 K는 홀수를 사용합니다. 짝수일 경우 동점이 되어 하나의 결과를 도출할 수 없기 때문입니다.
KNN의 특징은 훈련이 따로 필요 없다는 것입니다. 다른 모델들은 clf.fit(x_train, y_train)의 코드를 통해 훈련시킵니다. 즉 훈련데이터를 기반으로 모델을 만들고 테스트 데이터로 테스트를 하는 방식입니다. 하지만 KNN은 훈련이 따로 필요 없습니다. 그냥 훈련 데이터를 저장하는 게 훈련의 전부입니다. SVM을 예로 들면, 훈련 데이터를 기반으로 Decision Boundary를 만들고, 그렇게 만든 Decision Boundary를 통해 테스트 데이터를 분류합니다. KNN은 위 그림에서 보는 것과 같이 새로운 데이터가 주어지면 그제야 주변의 k개 데이터를 보고 새로운 데이터를 분류해주지요. 따라서 사전 모델링이 필요 없는 것입니다. real-time 예측이 이루어집니다. 모델을 별도로 구축하지 않는다는 뜻으로 게으른 모델 (Lazy model)이라고 부릅니다. 그렇기 때문에 SVM이나 선형 회귀보다 빠릅니다.
KNN에서는 데이터와 데이터 사이의 거리를 구해야 합니다. 거리를 구하는 방식은 두 가지가 있습니다.