나이브 베이즈 넷과 KNN ⇒ 그냥 재밌게 읽어보자!
[Naive Bayesian Model]
What
H가 주어졌을 때의 X의 확률을 구해서, X가 주어졌을 때의 H의 확률을 구한다.
이 때 X를 evidence, P(H)를 prior, P(X|H)를 likelihood라고 한다.
(보통 classification을 할 때는 크기 비교만 하면 된다. 따라서 evidence를 신경 쓰지 않기도 한다. 주어진 evidence는 모두 같을 것이기 때문이다. 밑 example 토글의 예시에서도 evidence는 따로 나누어 주지 않았다)

데이터가 충분히 많고, discrete하다면 좋은 성능을 보인다.
continuous한 data라면 범위를 나누어 쪼개서 naive bayesian에 넣어 사용할 수 있다.
만약 밑 Example에서 age가 continuous이었다면, 임의로 10~20대, 20~30대.. 로 쪼개어 사용할 수 있다.
Example
예시
이 때 분모는 둘 다에서 같으므로, 무시해도 된다.

[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.

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

원래 왼쪽 그림과 같이 K개의 element를 참조해야 한다.
이 방식은 vonnoroi diagram 그려서 한 개의 element만을 참조해 어느 영역에 들어갔는지를 보고 label을 매기는 방식이다.
이 방식은 매우 빨라서, noise가 없을 때는 유용할 수 있지만, noise가 있는 data를 가지고 이 방법을 사용한다면, 편향이 생길 수 있기 때문에 주의해야 한다.
Making KNN more Powerful
다음과 같은 방식으로 KNN을 powerful하게 만들 수 있다.
- K 설정 (작으면 noise가 크고, 크면 정확도가 떨어진다. 이 trade off를 잘 고려해 설정하면 좋은 결과를 얻을 수 있다)
predict, tune, evaluate 방식을 통해서 optimal한 K를 구할 수 있다.
- distance (밑과 같이 distance를 구하는 여러 방법이 존재한다. 이를 활용해 보는 것도 좋은 결과를 얻는데 도움을 준다)

- 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) 구하는 방식을 바꿈으로써 정확도를 높여볼 수 있다.