본문 바로가기

공부/Machine Learning

[KNN] 3. Hyperparameters (하이퍼파라미터) in KNN

[KNN] 3. Hyperparameters (하이퍼파라미터) in KNN






Hyperparameter ?


하이퍼 파라미터란, 일반적으로 머신러닝에서 어떠한 임의의 모델을 학습시킬때, 사람이 직접 튜닝 (설정) 해주어야하는 변수를 말합니다.



Hyperparameters in KNN


KNN 모델에서 사람이 직접 설정해주어야 하는 변수는 크게 두가지 입니다.

첫째는, 데이터간의 거리를 나타낼 기준 Distance
둘째는, 모델에서 지정할 K의 값


1. Distance (거리)

KNN 모델에서 데이터간의 거리는 중요한 지표이자 변수입니다. 왜냐하면, 거리를 어떻게 측정하고 기준잡느냐에 따라서 새로 들어올 데이터의 분류가 달라지기 때문입니다. 거리를 구하는 방법으로서 일반적으로 많이 사용하는 두 가지는, (1)유클리디안 거리, (2)맨하탄 거리 입니다.




(1) Euclidean Distance (유클리디안 거리)

일반적으로 가장 많이 사용하는 거리계산법입니다. 우리가 흔희 알고있는 피타고라스의 정리, n차원에서의 두 점 사이의 거리를 통해 구할 수 있습니다. 



(2) Manhatten Distance (맨하탄 거리)

두 번째로 많이 쓰이는 거리는 맨하탄거리 입니다. 뉴욕 맨하탄을 상상하면 무엇이 가장 먼저 떠오르나요? 그 중 하나는 바로 레고 블럭처럼 네모나고 규칙적으로 배열된 거리, 도로, 블록들이 떠오릅니다. 우리가 맨하탄 도심 한 가운데에 있다고 가정해봅시다. 우리가 목적지 까지 가야한다면, 과연 유클리디안거리에 따른 직선거리로 목적지까지 이동할 수 있을까요? 불가능합니다. 인도를 따라 걷든지, 혹은 택시를 잡아타고 도로를 따라 네모난 블럭들을 돌고 돌아 가야합니다. 맨하탄 거리라고 이름 붙여진 유래는 이러합니다. 기하학적인 관점에서 직선거리인 유클리디안 거리와는 달리, 맨하탄 거리는 제한된 조건 하에서 정해진 루트를 통해 도달할 수 있는 거리입니다.


유클리디안 거리, 맨하탄 거리 이외에도 표준화거리, 마할라노비스 거리, 체비셰프 거리, 민콥스키 거리, 캔버라 거리 등 다양한 거리측정법이 존재합니다. 기타 거리 측정법은 생략하도록 하겠습니다. 구글에 찾아보면 다 나와요!




2. K=?

KNN모델에서 K값을 어떻게 설정하느냐에 따라 결과가 달라집니다. 따라서 하이퍼파라미터는 상당히 중요하다고 할 수 있습니다.
K값이 중요한 또 다른 이유는, 바로 모델의 적합성 관점에서 보았을때, Overfitting 된 모델이냐, 혹은 Underfitting 된 모델이냐를 결정할 수 있기 때문입니다.


K 값이 너무 작으면, (임의로 K=1 이라고 가정)

-> 거리가 가장 가까운 1개의 데이터를 기준삼아 새로운 데이터를 분류하므로

-> 분류 기준이 too much strict 되어

-> train set 에서의 정확도는 높지만

-> test set 에서는 에러가 높고 정확도가 낮은 결과를 낳습니다

-> 따라서 overfitting-과적합된 모델을 낳을 우려가 있다고 할 수 있습니다.


반면,


K 값이 너무 크면, (임의로 K=100 라고 가정)

-> 거리가 가장 가까운 100개의 데이터를 기준삼아 새로운 데이터를 분류

-> 분류 기준이 too much general 하게 되어

-> 새로운 데이터의 분류에 대해 precise 하게 판단하지 못하기 때문에

-> test set에 대한 정확도가 낮을 수 있습니다.

-> 다시말해, underfitting 된 모델을 낳을 우려가 있습니다.




따라서, 적절한 K 값 설정은 곧 적절한 모델의 설정과 같은 말이라고 할 수 있습니다.

적절한 K를 설정 할 수 있도록 기존의 train-test 에서 살짝 변형된 다른 방법인 교차검증법을 사용 할 수 있습니다.




Cross-Validation (교차검증법)


Cross-Validation 는 교차검증법이라고 부르며, 일반적으로는 overfitting (과적합)을 방지하기 위해서 많이 사용합니다.

방법은 다음과 같습니다.


기존에 나눈 train-test set 에서 train 셋을 다시 여러개의 fold로 나누어, 그 안에서 1차적인 test를 하는 개념이라고 이해하면 좋습니다.


(1) K=1이라고 가정하고, 위와 같이 train set을 5개의 fold (fold1, fold2, fold3, fold4, fold5) 로 나눕니다.

(2) 1번째 시도에서는 fold1+fold2+fold3+fold4로 모델을 만들고, fold5로 test 하여 accuracy를 냅니다.

(3) 2번째 시도에서는 fold1+fold2+fold3+fold5 로 모델을 만들고, fold4로 test하여 accuracy를 냅니다.

... 5개의 fold 하에서는 모두 5번의 시도끝에 5개의 accuracy를 구하고, 그것의 평균을 냅니다.

-> K=1 일때 cross-validation 에 따른 accuracy 를 냅니다.


위와 같은 방법을 통해 K를 바꿔가면서 accuracy를 내고, accuracy가 가장 좋은 K를 선택하여, test set를 넣어 정확도를 계산한다.





요약


    • KNN 분류기에서, 하이퍼 파라미터는 크게 거리기준잡기, K값 설정 이 있다.
    • 거리계산법은 일반적으로 유클리드거리, 맨하탄 거리 등을 사용하며, 데이터의 특성과 분석의 목적에 따라 기타 계산법을 설정할 수 있다.
    • 적절한 K값의 설정은 모델의 정확성과 신뢰도에 영향을 미친다.
    • Cross-Validation (교차검증법)은 적절한 K를 찾기 위한 하나의 방법이 될 수 있다.


참고&출처
http://aikorea.org/cs231n/classification/
http://www.datamarket.kr/xe/