이 포스트는 ⌜혼자 공부하는 머신러닝+딥러닝⌟ 도서를 참고하여 작성하였습니다.
scikit-learn
- KNeighborsClassifier()는 k-최근접 이웃 분류 모델을 만드는 scikit-learn 클래스이다. n_neighbors parameter로 이웃의 개수를 지정한다. p parameter로 거리를 재는 방법을 지정하고(1이라면 맨해튼 거리, 2일 경우 유클리디안 거리), n_jobs parameter로 사용할 CPU 코어를 지정할 수 있다.
- fit()은 scikit-learn 모델을 훈련할 때 사용하는 method이다. 처음 두 parameter로 훈련에 사용할 특성과 정답 데이터를 전달한다.
- predict()는 scikit-learn 모델을 훈련하고 예측할 때 사용하는 method이다. 특정 데이터 하나만 매개변수로 받는다.
- score()는 훈련된 scikit-learn 모델의 성능을 측정한다. 처음 두 parameter로 특성과 정답 데이터를 전달한다.
k-최근접 이웃(KNN, k-Nearest Neighbors) 알고리즘
어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용한다. 간단히 말하면 주위의 데이터로 현재 데이터를 판단하는 것이다. 다음 사진을 보고 생각해보자. 파란색은 도미의 데이터, 주황색은 빙어의 데이터이다.
![붉은 색 점에 위치한 생선의 경우는 도미에 속할 것이라고 생각할 것이다. 붉은 점 주위에 도미 데이터가 많기 때문이다.](https://prod-files-secure.s3.us-west-2.amazonaws.com/863ec452-41a7-48c3-ac88-6c9d88328810/4e7df496-70d6-4467-a58e-d6b9d95be1a7/Untitled.png)
이게 k-최근접 이웃 알고리즘의 형태이다. 새로운 데이터에 대해 예측할 때는 가장 가까운 직선 거리에 어떤 데이터가 있는지를 살피면 된다. 하지만, 단점은 k-최근접 이웃 알고리즘의 이런 특징 때문에 데이터가 아주 많은 경우에는 사용하기 어렵다.