개요
Naïve Bayes는 n개의 특성을 지닌 샘플 데이터 x가 주어졌을 때, 이 샘플 데이터가 K개의 클래스 y1,y2,…yk 중 하나에 속할 확률을 결정한다. 즉, 각 클래스에 대해
P(yk∣x)=P(yk∣x1,x2,…,xn)
을 계산하고, 위 확률값이 최대인 클래스를 샘플의 최종 클래스로 할당한다.
ykargmaxP(yk∣x)=ykargmaxP(x)P(x∣yk)P(yk)where P(x∣yk)=P(x1∣yk)×P(x2∣yk)×⋯×P(xn∣yk)
예시: Spam/Ham 이메일 예측
클래스별 확률 계산
스팸 메일을 S (Spam), 햄 메일을 NS (Not Spam)로 정의하고, 출현한 단어를 x1,…,xn이라 하면, 테스트 데이터의 이메일이 각 클래스에 속할 확률은 아래와 같다.
P(S∣x1,x2,…,xn)P(NS∣x1,x2,…,xn)
y∈{S,NS}argmaxP(y∣x1,x2,…,xn)=y∈{S,NS}argmaxP(x1,x2,…,xn)P(x1,x2,…,xn∣y)P(y)where P(x1,x2,…,xn∣yk)=P(x1∣yk)×P(x2∣yk)×⋯×P(xn∣yk)
Smoothing
만약 P(xi∣yk)=0이라면, 즉 단어 하나가 해당 클래스에서 관측되지 않은 경우, 다른 단어의 Likelihood 값과 무관하게 P(x∣yk)가 0이 된다. 따라서 Smoothing 기법을 적용하여 이를 방지한다.
Laplace Smoothing
모든 클래스에서 단어들이 한 번씩 출현했다고 가정한다. 단어의 종류가 n개일 때, 각 단어가 해당 클래스에서 한 번씩은 등장했다는 가정에 따라, 단어 당 한 번씩 분모에 단어의 개수 n을 더해준다.
✏️ 분모에도 1을 더하거나, 분모는 모든 단어에 대해 동일하므로 아무것도 더하지 않는 방법도 가능하다.
Log() 사용
P(x∣yk)=P(x1∣yk)×P(x2∣yk)×⋯×P(xn∣yk)
단어들이 매우 많은 경우, 0~1의 값을 가지는 Likelihood 식을 곱하다 보면 매우 작은 값을 가지게 된다. 일정 수준 이상 작아지면 Underflow되어 모두 같은 값으로 치환되므로, log를 취해 덧셈 연산으로 바꾸어 이를 방지한다.
P(x∣yk)=exp(log(P(x1∣yk))+log(P(x2∣yk))+⋯+log(P(xn∣yk)))
ykargmaxP(yk∣x)=ykargmaxP(x)P(x∣yk)P(yk)=ykargmax(logP(yk)+logP(x∣yk))=ykargmax(logP(yk)+i∑logP(xi∣yk))