본문 바로가기

Previous (20-22)/Development

Machine Learning - (2) kNN 모델

이 글을 읽기 전에 반드시 참고하셔야 할 부분이 있음을 알려드립니다.

 

인터넷 상에 제 글이 검색이 되어 다른 분들도 한 번 혹은 그 이상은 거쳐가는 곳인 것은 사실이지만, 어디까지나 저는 Machine Learning을 처음 시작하는 사람인 만큼 연구 및 학습을 위한 자료 정리용으로 올리는 것입니다.

그렇기 때문에 전문가가 아닌 초심자가 올리는 그런 글이라는 점을 참고정도 해 두시기 바랍니다.

 

그렇다 하여 책이나 학습 자료를 통해서 그대로 베끼거나 그런 내용은 블로그의 수준을 스스로 떨어뜨리는 일밖에는 되지 않는다는 점에서 그럴 일은 전혀 없을 것임도 더불어 참고하시기 바랍니다.

 

 

(본문 중 주요 내용에 대한 모든 출처: 알고리즘으로 배우는 인공지능,머신러닝,딥러닝 입문 - 위키북스, 김의중 지음)

즉 본문에서 뭔가 어디서 많이 본 것 같은 문구나 주요 팩트 등에 대한 내용은 위 책을 출처로 생각하시면 되겠습니다.



위 문구는 제가 글을 올리면서 어느정도 숙지가 된 부분이 있다고 싶을때까지는 계속 나타낼 예정이니 참고바랍니다.




2016/11/23 - [Onik Lab./MachineLearning] - Machine Learning - (1) 기초 개념


바로 전에는 기초 개념에 대해서 써 봤습니다.


크게는 지도학습, 비지도학습으로 구분되고, 지도학습은 분류모델, 예측모델이 있으며, 비지도학습은 군집모델이 있습니다.

그렇기에 이번에는 지도학습의 분류모델에 대해서 정리하고 그 중 하나인 kNN 모델에 대해서 다루겠습니다.


kNN모델이 어떤 모델에 어떻게 속해있는지는 아래 그림과 같습니다.





먼저 분류모델이 무엇인지부터 간단히 언급하자면, 어떤 정해진 값 중에서 하나의 결과를 도출해내는 것이라 하였습니다.

즉 여러 선택지 중 하나의 결과를 도출해내는 것이겠죠.


그렇다면 방대한 데이터를 분류모델을 통해서 나타내는 결과는 어떨까요.

각 데이터가 어떤 그룹에 속해있는지 그 결과를 나타내는 것이겠지요.


그것에 기반해서 접근하시면 될 것입니다.




(1) kNN 모델 정의 및 개념


k-Nearest Neighbor 모델의 약자입니다.


미리 학습을 하지 않고, 새로운 데이터의 Task 요청이 올때 그 때 분류를 수행하는 절차로 이루어지며,

기본 개념은 새로운 데이터가 어느 그룹에 속하는지를 분류하기 위해 가장 가까이 있는 학습데이터의 그룹을 알아보는 것이라 합니다.

이를 위해서는, 먼저 학습된 데이터를 표현할 수 있어야 합니다. 그래야 새로운 데이터가 어느 그룹인지를 알 수 있으니까요.



(2) k값 및 구분 방법


다음 예제를 보시면 될 것입니다.


출처: ResearchGate.net



빨간색, 녹색은 기존에 학습된 데이터입니다.

그리고 새로운 데이터 파란색이 들어왔습니다.


새로운 데이터가 어느 그룹에 속해있는지를 판단하기 위해서, 인접한 학습데이터의 개수를 기준으로 판단을 합니다.

이때 인접한 학습데이터의 개수가 바로 kNN의 'k'가 되는 것입니다.


위 그림과 같이, k=1이면 인접 데이터 개수가 1개이므로, 빨간색 그룹에 속하게 됩니다.

k=3이면 인접데이터 개수가 3개이므로, 빨간색 2개, 녹색 1개로 역시 빨간색에 속하게 됩니다.

k=5이면 인접데이터 개수가 5개이므로, 빨간색 2개, 녹색 3개로 이 때에는 녹색에 속하게 됩니다.


인접데이터 개수는 항상 홀수여야 합니다. 짝수일 경우 다른 두 그룹이 동수가 나버려서 판단이 어렵기 때문입니다.


그렇다면 여기에서 제일 중요한 것은 무엇일까요.


당연히 k값입니다.


k값이 무엇인가에 따라서 올바르게 분류할 수도 있고 아닐 수도 있기 때문입니다.


출처: PerClass.com



위 사진을 볼까요.

k값이 2일때, 19일때, 50일때입니다.

물론 제가 만든 사진이 아닌 외부 자료를 가지고 온 것인데 위 설명과는 다르게 짝수도 있네요.

(그렇다고 해도 짝수보다는 홀수를 k값으로 하는것을 권장합니다)


어떤 k값이 가장 올바를까요. 

k=19 가 가장 올바른 결과입니다.


k=2일 때에는 너무 민감하게 반응하고 있는데다가, 평균값과 큰 차이가 있는 데이터(Noise)가 많이 있습니다.

k=50일 때에는 너무 둔감하게 반응하고 그룹의 경계에 대한 변별력이 없는 상태입니다.


이 때 k=2와 같은 경우를 오버피팅(Overfitting)이라 하고, k=50과 같은 경우를 언더피팅(Underfitting)이라 합니다.


한가지 헷갈릴 수 있는 부분을 언급하자면, 색깔로 칠해진 부분과 특정 표식을 가진 포인트(점)의 차이가 무엇인가겠지요.


kNN 모델은 분류모델입니다. 데이터에 라벨이 있는 것이죠. 

즉 포인트로 나타낸 데이터는 라벨이 모두 붙어있는 것입니다.


그렇기 때문에 각 라벨 별로 어떤 Task의 어떤 k값을 가지고 이들 라벨링된 데이터를 분류해내는가가 kNN모델의 관건이 됩니다.



(3) 오버피팅(Overfitting) 및 에러 검증


정확한 데이터 분류를 위해서는 언더피팅을 검증하는 것보다는 오버피팅을 검증하는 것이 올바를 것입니다.

통상적으로 완벽하게 맞아떨어지는 데이터는 찾기가 힘들기 때문일까요.

그래서 오버피팅이 나타날 때 발생하는 노이즈, 즉 에러율을 비교하면서 에러율을 줄이기 위한 k값을 찾을 수 있어야 합니다.


이 때의 오버피팅을 해결하기 위한 방법으로는 대표적으로 규제화(Regularization) 방법으로 해결한다고 책에는 기술되었는데, 규제화에 대한 것은 따로 또 다룰 예정입니다. 간단히 설명하자면, 노이즈의 영향력을 최소화하기 위해 이에 대한 구속조건을 추가한다 정도로만 나타나 있네요.


먼저 참고하시고, 나중에 규제화를 따로 다룰 때 다시 언급토록 하겠습니다.




kNN 모델은 여기까지입니다.

아마 다음 글은 kNN 모델을 위한 R프로그래밍 예제 실습이 될 것으로 보이며, 해당 부분은 R Programming 카테고리에 다루겠습니다.