캡쳐 사진 및 글작성에 대한 도움 출저 : 유튜브 - 허민석님


kNN 알고리즘

image

녹색 별모양의 영화가 Activtion영화인지 / Romantic영화인지 분류하고 싶다.

액션영화와 로맨틱영화 사이에 있어서 상당히 분류하기 곤란하다. 이럴 때 쓰는 머신러닝 알고리즘이 kNN(최근접 이웃)알고리즘이라 할 수 있다.

녹색별을 제외하고, 기존의 데이터(액션영화 5, 로맨틱영화 4)를 가지고 액션영화다, 로맨틱 영화다 이야기 해보자.


영화에서 발차기 수가 많이 나올경우, 액션영화일 가능성이 높다
반대로 키스 장면이 많이 나올 수록, 로맨틱영화일 가능성이 높다.
(여러 feature들이 영향을 미치겠지만, 가장 중요한 feature라고 여겨지는 2개만 가져와서 2차원으로 보는 것이다)


  1. 먼저 k를 정해줘야한다.
    k는 최근접을 몇개까지 볼것인지를 정해줘야한다.
    여기서는 k를 3으로 사용하도록 한다. k는 될수록 작은수를 사용하는게 좋다
    k는 기본적으로 홀수를 쓴다. 왜냐하면, 짝수를 쓸 경우 2:2 같은 상황이 만들어져 답을 하지 못하는 경우가 발생하기 때문이다.
    요약하자면 k는 작은 홀수를 사용해야할 것이다.
    image
    위에서 보이는 것과 같이, 가장 가까운(최근접)거리에 k = 3개가 들어오도록 해보자.
    액션영화가 2개, 로맨틱영화가 1개 걸리므로, 이 녹색별은 액션영화으로 예측된다.
    만약 k=4가였다고 가정해보자.
    액션영화쪽에서 2개, 로맨틱 영화쪽에서 2개가 걸려 어떤 영화인지 예측하기 힘들 것이다.
    image

    이제 이 영화는, kNN알고리즘에 의하면, 액션영화라는 예측값을 얻을 수 있다.


  2. 최근접거리(NN)는 어떻게 구할까?
    중학교때 배웠던 피타고라스의 정리로 구할 수 있다.
    image


질문과 답변

안녕하세요, sklaern에서 KNN으로 와인 종류 Classification 풀고 있는데요. 계속 K =1 일때 정확도가 제일 높게 나와요. 제가 잘 몰라서 그런데 통상 K = 1 이면 Overfitting 된거라고 알고 있는데 Cross Validation(Kfold = 10)으로 해도 Validation set의 정확도가 K=1 (이웃의 수 = 1)일때 가장 정확도가 높게 나옵니다,,, 이럴때는 어떤 제약을 더 두면 Overfitting을 막을 수 있을까요?


안녕하세요, 모델 성능 평가 지표로는 accuracy, precision, recall, F1-score 등이 있는데요, 혹시 k=1일 때 accuracy만 높은 것이 아닌 지 궁금하네요. 제시한 네개의 지표를 골고루 잘하는 모델이 k=1인지 먼저 확인해봐야할 것 같아요. 만약 k=1이 모든 지표에서 1등일 경우에는, 와인 종류를 위한 특성을 feature vector로 만들어 주실 때 feature engineering이 제대로 이루어졌는 지 봐야할 것 같습니다. standardization, normalization 등등으로 수치값을 0 ~ 1 사이의 값으로 평준화 시켜주시는 작업이 kNN 트레이닝 전에 이루어졌나요?


네, 말씀하신대로 Standardization을 해서 Fitting시켰구요. Accuracy만 K=1일때 1등이예요. 그외 값도 metrics.classification_report 뽑아봤습니다. 혹시 precision recall f1-score 중에 애메하면 그냥 f1-score 높은 걸로 파라미터를 가져가도 될까요?


네, 데이터 셋에 와인의 클래스들이 균일하다면, accuracy 높은 녀석을 선택해주시고요, 만약에 와인 A는 10개, B는 30개, C는 80개처럼 균일하지 않을 경우 f1-score가 높은 녀석으로 사용하는 게 통상적입니다.


네, 데이터 셋에 와인의 클래스들이 균일하다면, accuracy 높은 녀석을 선택해주시고요, 만약에 와인 A는 10개, B는 30개, C는 80개처럼 균일하지 않을 경우 f1-score가 높은 녀석으로 사용하는 게 통상적입니다.

+ Recent posts