(거의 자정넘어시작하지만 그래도13일이라치자...)
0. 나이브 베이즈
1. 조건부 확률과 베이즈 정리
2. 나이브 베이즈 예시 - 스팸분류~!
Q. 다른 좋은 머신 러닝 대비, 오래된 기법인 나이브 베이즈(naive bayes)의 장점을 옹호해보세요.
0. 나이브 베이즈가 뭔데?
" 특성들 사이의 독립을 가정하는 베이즈 정리를 적용한 확률 분류기 "
그렇다면 베이즈 정리는 뭔가?
1. 조건부 확률, 나이브 베이즈
# 조건부 확률 : P(A|B)가 B가 일어나고나서 A가 일어날 확률
# 베이즈 정리 :
베이즈 정리는 조건부 확률을 계산하는 방법 중 하나입니다.
P(A) 가 A가 일어날 확률, P(B) 가 B가 일어날 확률, ==> P(A), P(B) 사전 확률
P(B|A) 가 A가 일어나고나서 B가 일어날 확률, P(A|B)가 B가 일어나고나서 A가 일어날 확률 ==> P(B|A) , P(A|B) 사후 확률
이때 P(B|A) 를 쉽게 구할 수 있는 상황이라면, 아래와 같은 식을 통해 P(A|B)를 구할 수 있습니다.
P(A|B)=P(B|A)P(A)P(B)
2. 나이브 베이즈 예시
나이브 베이즈 분류기는 이러한 베이즈 정리를 이용하여 분류를 수행!
ex. 스팸 메일 분류기
예를 들어서 나이브 베이즈 분류기를 통해서 스팸 메일 필터를 만들어본다고 합시다.
입력 텍스트(메일의 본문)이 주어졌을 때,
입력 텍스트가 정상 메일인지 스팸 메일인지 구분하기 위한 확률을 이와 같이 표현할 수 있습니다.
P(정상 메일 | 입력 테스트) = 입력 텍스트가 있을 때 정상 메일일 확률
P(스팸 메일 | 입력 테스트) = 입력 텍스트가 있을 때 스팸 메일일 확률
이를 베이즈의 정리에 따라서 식을 표현하면 이와 같습니다.
P(정상 메일 | 입력 테스트) = (P(입력 테스트 | 정상 메일) × P(정상 메일)) / P(입력 텍스트)
P(스팸 메일 | 입력 테스트) = (P(입력 테스트 | 스팸 메일) × P(스팸 메일)) / P(입력 텍스트)
입력 텍스트가 주어졌을 때, P(정상 메일 | 입력 테스트)가 P(스팸 메일 | 입력 테스트)보다 크다면 정상 메일이라고 볼 수 있으며,
그 반대라면 스팸 메일이라고 볼 수 있습니다.
그런데 두 확률 모두 식을 보면 P(입력 텍스트)를 분모로 하고 있음을 알 수 있습니다.
그렇기 때문에 분모를 양쪽에서 제거하고 이렇게 식을 간소화할 수 있습니다.
P(정상 메일 | 입력 테스트) = P(입력 테스트 | 정상 메일) × P(정상 메일)
P(스팸 메일 | 입력 테스트) = P(입력 테스트 | 스팸 메일) × P(스팸 메일)
입력 텍스트는 메일의 본문을 의미한다고 언급했습니다.
그런데 메일의 본문을 어떻게 나이브 베이즈 분류기의 입력으로 사용할 수 있을까요?
메일의 본문에 있는 모든 단어를 토큰화 시켜서 이 단어들을 나이브 베이즈의 분류기의 입력으로 사용합니다.
만약 메일의 본문에 있는 단어가 3개라고 가정해보겠습니다.
기본적으로 나이브 베이즈 분류기는 모든 단어가 독립적이라고 가정합니다.
메일의 본문에 있는 단어 3개를 w1, w2, w3라고 표현한다면
결국 나이브 베이즈 분류기의 정상 메일일 확률과 스팸 메일일 확률을 구하는 식은 아래와 같습니다.
P(정상 메일 | 입력 텍스트) = P(w1 | 정상 메일) × P(w2 | 정상 메일) × P(w3 | 정상 메일) × P(정상 메일)
P(스팸 메일 | 입력 텍스트) = P(w1 | 스팸 메일) × P(w2 | 스팸 메일) × P(w3 | 스팸 메일) × P(스팸 메일)
식을 보고 눈치채신 분들도 있겠지만, 나이브 베이즈 분류기에서 토큰화 이전의 단어의 순서는 중요하지 않습니다.
즉, BoW와 같이 단어의 순서를 무시하고 오직 빈도수만을 고려합니다.
3. 중요한 특징 !!
- 나이브 베이즈는 feature끼리 서로 독립이라는 조건이 필요
. 즉, 스펨 메일 분류에서 광고성 단어의 개수와 비속어의 개수가 서로 연관이 있어서는 안됨 !
참고 링크 :
댓글