K-Nearest Neighbors 알고리즘은 어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용하는 알고리즘입니다.
빨간 점의 새로운 데이터가 주어졌을 때 이 데이터를 Class A로 분류할지, Class B로 분류할지 판단하는 문제입니다.
k=3 으로 주어졌을 때 빨간 점의 가장 가까운 주변의 3개의 데이터를 확인하고, 3개의 데이터 중 더 많은 데이터가 포함되어 있는 범주로 분류합니다. 위의 그림에서는 노란점(Class A) 1개 보라점(Class B) 2개가 있기 때문에 k=3 일 때는 해당 데이터가 Class B로 분류됩니다.
k=6 으로 주어졌을 때는 원 안에 노란점(Class A) 4개 보라점(Class B) 2개가 있습니다. 따라서 k=6 일 때는 해당 데이터가 Class A로 분류됩니다.
KNN은 K의 값을 어떻게 정하냐에 따라 결과 값이 바뀔 수 있습니다. 따라서 가장 적합한 K를 찾는 것이 이 알고리즘의 관건이라고 할 수 있겠습니다. K의 default 값은 5입니다.
코드로 내용을 더 보겠습니다.
github 코드 첨부
https://github.com/erdnussretono/K-Nearest-Neighbors_1/blob/main/KNN.ipynb
scikit-learn 정리
- KNeighborsClassifier()는 k-최근접 이웃 분류 보델을 만드는 scikit-learn class입니다.
- n_neighbors 매개변수로 이웃의 개수를 정하고 default 값은 5입니다.
- p 매개변수로 거리를 재는 방법을 지정합니다. 1일 경우 맨해튼 거리, 2일 경우 유클리디안 거리를 사용합니다. default 값은 2입니다.
- n_jobs 매개변수로 사용할 CPU 코어를 정할 수 있습니다. -1로 설정하면 모든 CPU 코어를 사용해 이웃 간의 거리 계산 속도를 높힐 수 있습니다. fit() 매서드에는 영향을 주지 않습니다.
- fit() : scikit-learn model training method. ex) fit(traing data, target data)
- predict() : scikit-learn model prediction method. ex) predict(새로운 data 1개)
- score() : 훈련된 scikit-learn model 성능 측정. ex) score(test data, test target)
'AI' 카테고리의 다른 글
[머신러닝] 선형회귀(Linear Regression) (0) | 2021.07.17 |
---|---|
KNN(K-Nearest Neighbors) 회귀(regression) (0) | 2021.07.17 |
[데이터 전처리] titanic data 전처리 (0) | 2021.07.17 |
[머신러닝 데이터] 전처리 (0) | 2021.07.16 |
[머신러닝 데이터] 훈련 세트와 테스트 세트 (0) | 2021.07.15 |