brunch

You can make anything
by writing

C.S.Lewis

by 코딩하는 수학쌤 Aug 02. 2021

28.k최근접 이웃 (kNN) 알고리즘이란?

[4악장 - Cadenza] 머신러닝의 알고리즘과 수학

지도 학습 - kNN(k Nearest Neighborhood) 알고리즘

 최근접 이웃은 입력된 데이터가 이미 학습된 데이터 중 가장 가까운 k개의 데이터를 참고하여 분류를 하는 방법입니다. k-NN 모델은 거리 개념만 있으면 산출을 할 수 있기 때문에 머신러닝 알고리즘 중 가장 단순한 알고리즘에 속합니다.


 예를 들어 고3 학생의 입시를 지도할 때 주로 살펴보는 내신 등급과 수능 등급에 따라 수시 전형, 정시 전형 중 어떤 전형에 지원하는 것이 유리할지 살펴본다고 가정해보겠습니다. 그때 나의 성적을 기준으로 거리가 가장 가까운 k개의 값을 살펴본 결과 수시 전형이 많으므로 ‘나의 성적 특징은 수시, 정시 전형 중에서 수시 전형에 적합하구나.’라고 입력값을 분류할 수 있습니다.


 이 알고리즘에서는 k의 값을 얼마로 해야 할지 결정하는 것이 매우 중요합니다. k가 너무 작을 경우에는 특정 값에 따라 영향을 받을 수도 있고, k가 너무 클 때는 너무 많은 값들이 섞이고 크게 관계없는 값들까지도 비교를 하게 되죠. 따라서 k값에 따라 모델의 정확도를 먼저 잘 비교해서 가장 알맞은 값들을 선택해야 합니다.

 

 k-NN은 분류에도 사용하지만 데이터 전처리 과정에서 결측값을 결정할 때도 종종 사용합니다. 데이터들의 거리가 가깝다는 것은 유사한 성질이 많다고 할 수 있기 때문에 결측값 또한 근처의 데이터와 유사할 것이라고 가정할 수 있기 때문입니다. 예를 들면 어떤 학생이 수시, 정시 중 어디에 지원했는지 파악이 되지 않을 때 과목별 성적이 비슷한 분포를 보이는 학생들의 자료를 통해 추측할 수 있습니다. 이처럼 결측값을 대처하는 방법에서도 k-NN은 유용하게 활용됩니다.


[k값에 따른 정확도? 모델의 정확도는 어떻게 측정하나요?]

 k-NN 모델을 비롯해서 인공지능 모델을 만들게 되었을 때 성능은 어떻게 판단할까요? 이 모델은 레이블이 없는 실제 데이터의 분류에 활용됩니다. 즉, 학습 데이터에 없는 데이터가 정확히 분류가 되었는지 확인하기가 어렵습니다.



 따라서 인공지능의 성능을 확인할 때는 레이블이 있는 훈련용 데이터를 나누어서 미리 테스트를 해보는 ‘k-겹 교차검증’ 방법을 많이 활용합니다. 예를 들어 훈련용 데이터를 5개로 균등하게 나누어 5개의 검증 데이터 셋을 나누어놓습니다. 그중 4개로 학습을 하고, 나머지 하나를 마치 실전용 데이터처럼 테스트를 해봅니다. 그래서 그 정확도를 살펴봅니다.


 예를 들어 앞에서 다루었던 날씨 정보에 대한 운동 여부를 판별하는 모델에서 1차 검증 후 아래와 같은 결과를 거두었다고 해볼까요?

 이 경우에는 3/4를 맞추었으므로 1차 검증의 정확도는 75%가 됩니다. 이렇게 실제 모델이 얼마나 정확하게 맞추었는지는 레이블이 있는 기존의 훈련 데이터를 분할해서 여러 번 정확도를 구한 다음 그 정확도의 평균을 구해서 정확도를 산출합니다.







 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari