HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
장지원 페이지/
기계학습개론
기계학습개론
/
#08. Naive Bayesian / KNN

#08. Naive Bayesian / KNN

선택
mid
참고 자료
텍스트
Mar 21, 2024
보편적으로 사용되는 분야 (정해진 것은 아님,classification model이 regression할 수 있도록 할 수 있다)
Classification
supervised
차수 (일주일 단위)
4-2.
📌
나이브 베이즈 넷과 KNN ⇒ 그냥 재밌게 읽어보자!
 

[Naive Bayesian Model]

What
H가 주어졌을 때의 X의 확률을 구해서, X가 주어졌을 때의 H의 확률을 구한다.
이 때 X를 evidence, P(H)를 prior, P(X|H)를 likelihood라고 한다.
(보통 classification을 할 때는 크기 비교만 하면 된다. 따라서 evidence를 신경 쓰지 않기도 한다. 주어진 evidence는 모두 같을 것이기 때문이다. 밑 example 토글의 예시에서도 evidence는 따로 나누어 주지 않았다)
notion image
데이터가 충분히 많고, discrete하다면 좋은 성능을 보인다.
continuous한 data라면 범위를 나누어 쪼개서 naive bayesian에 넣어 사용할 수 있다.
만약 밑 Example에서 age가 continuous이었다면, 임의로 10~20대, 20~30대.. 로 쪼개어 사용할 수 있다.
Example
예시
이 때 분모는 둘 다에서 같으므로, 무시해도 된다.
notion image
 

[KNN]

What
N개의 데이터를 참조해 label을 매기는 방식이다.
voting, 또는 weight sum을 해서 label을 구한다.
training을 하지 않는다. (=명확한 모델이 아니다)
training이란?: NB-model에서 prior와 likeilhood를 구하는 것, NN-model에서 파라미터를 최적화 하는 것
model이란?: NB-model에서 구해진 prior와 likeilhood, NN-model에서 최적화된 파라미터/레이어 등…
그러나 KNN에 사용되는 data 자체를 model이라고 볼 수도 있고, .. 뭐.. 그렇다..
  • lazy: training이 없다. (뭐.. 계산하는 것 그 자체를 training이라고 볼 수도 있다..)
  • 정확도 향상은 data 수를 늘림으로써 한다.
사용 분야
  • classification: 가까운 것 n개 참조해서 label을 선택하는 방식으로 사용한다.
  • regression: 마찬가지로 가까운 것 n개 참조해서 값을 예측하는 방식으로 사용한다.
    • ex.
      notion image
Feature
KNN의 특징
  • 모든 데이터는 n 차원에 분포해 있다. (data = instance = record = example = case, 모두 같은 말이다)
  • 거리는 euclidean distance로 결정된다. (이 외에 다른 ‘거리 구하기’ 방식을 사용할 수도 있다)
  • targer function은 discrete, real일 수 있다. (목표 하는 것이 “classification일 수도 있고, regression일 수도 있다”라는 의미인 것 같다)
  • target function이 discrete일 때, 즉 classification을 할 때는 가까운 element 중 가장 commom한 것들을 골라야 한다.
  • data size에 큰 영향을 받는다.
vonnoroi diagram
notion image
원래 왼쪽 그림과 같이 K개의 element를 참조해야 한다.
이 방식은 vonnoroi diagram 그려서 한 개의 element만을 참조해 어느 영역에 들어갔는지를 보고 label을 매기는 방식이다.
이 방식은 매우 빨라서, noise가 없을 때는 유용할 수 있지만, noise가 있는 data를 가지고 이 방법을 사용한다면, 편향이 생길 수 있기 때문에 주의해야 한다.
Making KNN more Powerful
다음과 같은 방식으로 KNN을 powerful하게 만들 수 있다.
  1. K 설정 (작으면 noise가 크고, 크면 정확도가 떨어진다. 이 trade off를 잘 고려해 설정하면 좋은 결과를 얻을 수 있다)
    1. predict, tune, evaluate 방식을 통해서 optimal한 K를 구할 수 있다.
  1. distance (밑과 같이 distance를 구하는 여러 방법이 존재한다. 이를 활용해 보는 것도 좋은 결과를 얻는데 도움을 준다)
    1. notion image
  1. scaling (각 속성들을 scale해주는 것도 좋은 결과를 얻게 하는데 도움을 준다)
Pro and Cons
단점
  • Data가 많아지면 DISK에 접근해야 하므로 느려진다.
  • 차원의 저주
    • 고차원으로 갈 수록 data가 sparser 해지기 때문에 구분하기 어려워 진다는 문제이다.
      ex.
      dim 3일 때는 {0,0,0}, {0,0,1} 사이의 distance가 sqrt(2)이다. 이 때는 sqrt(2)도 충분히 크다.
      하지만 dim 100에서의 {0,0,0….,0}, {0,0,0….,1} 사이 distance sqrt(2)는 매우 작게 되고, 모든 data들 사이가 상대적으로 가까워 지게 된다.
      ⇒ dim이 커질 수록 data 가까워 진다.
       
      이는 우리가 전에 배웠던, feature selection, extraction, dimentional reduction 등의 방법을 통해 차원을 줄여서 해결한다.
장점
  • 설정해야 할 param의 수가 적다.
    • K만 설정해 주면 된다.
      단 neighbor 사이의 weight나, simularity(distance) 구하는 방식을 바꿈으로써 정확도를 높여볼 수 있다.