지금까지 살펴본 알고리즘들은 모델을 설계하고 주어진 데이터를 학습하게 했다. 그리고 학습내용을 바탕으로 새로운 데이터에 대한 추론을 진행했다. 이런 방식을 Model-Based Learning 이라고 한다.
이와 대조되는 개념으로 Instance-Based Learning 이 있다. 모델을 따로 설계하지 않고, 데이터 입력 후에 예측값을 계산하게 하는 방식이다.
Eager Learning 은 학습 시점에 일반화된 모델을 미리 학습해 입력이 들어오기 전에 학습을 다 끝내는 방식이다. 즉, target function 이 입력에 대해 독립적이다.
반면 Lazy Learning 은 훈련 과정이 따로 없고, 입력 데이터가 들어와 예측이 요청될 때 까지 연산을 미룬다.
Eager Learning 은 긴 훈련 시간을 가지는 대신 inference 가 빠르다는 장점이 있다. Lazy Learning 은 구현이 간단하다는 장점이 있지만 inference 를 위해 전체 train data 를 저장해야 하는 문제가 있다. 대부분의 경우에는 Eager Learning 이 효율적이고, Lazy Learning 은 특수한 경우에 사용된다.
KNN 은 Lazy Learning 방식을 이용해 문제를 해결하는 알고리즘이다. 기본 아이디어는 이미 입력된 데이터 포인트 중 새로 입력된 데이터 포인트와 가장 가까운 K 개의 데이터를 참고하는 것이다.
데이터의 평균값 등 continuous value 를 집계하면 Regression Task 를, 가까운 데이터들의 majority class 를 분석하면 Classification Task 를 해결할 수 있다.
세 용어 모두 비슷한 개념을 가지고, 동의어로 쓰일 때도 있다. 각자 강조하는 부분이 다른 정도의 차이가 있다.
KNN 에는 두 개의 Hyperparameter 이 있다. 이들은 훈련으로 찾을 수 없고, 사람이 직접 찾아서 설정해야 한다.
Value of K
몇 개의 Nearest Neighbor 를 참고할 것인지 여부가 중요하다.
너무 적은 데이터를 참고하면 noise 에 취약할 수 있다.

다음과 같은 데이터 분포를 가정해보자. 우측 하단의 네모는 noise 라고 볼 수 있다. 전체적인 클래스 분포에 맞지 않는 데이터이기 때문이다. X 에 들어갈 데이터의 클래스를 예측하는 상황에서 K=1 로 설정했다고 해보자. 전체적인 분포에 따르면 예측은 동그라미가 맞겠지만, 예측값은 네모가 될 것이다. Overfitting 과 유사한 상황이 발생하는 것이다.
K 값이 증가하면 일반적으로 일반화 성능이 증가한다. 하지만 K 를 너무 크게 설정하면 전체적인 분포에 과하게 집중해 국소적인 특징이 묵살될 가능성이 있다. 즉 이미 있는 데이터에 대한 편향이 생긴다. 또한 계산량이 과도하게 많아질 수 있다. 따라서 적절한 K 값을 실험을 통해 찾아주는 것이 중요하다.

Distance Function
관심 있는 문제나 데이터의 특성에 따라, 데이터 포인트 간 거리를 측정하는 방식인 Distance Function을 선택하거나 정의할 수 있다.
대표적인 거리 함수로는 Euclidean, Manhattan, Hamming, 그리고 Cosine Similarity 등이 있으며, 각각의 함수는 데이터 타입과 분석 목적에 따라 적합성이 달라진다.