4 minute read

Naive Bayes

Overview

조건부 확률의 정의를 사용해서 여태까지 관측한 결과를 바탕으로 전체의 확률을 예측하는 방식이다.

그저 영혼 없는 수식으로만 보이지만, 왼쪽항은 B라는 사건이 일어났을 때 A라는 사건이 일어날 확률을 뜻하는 것으로, 아직 관측하지 않은 모든 데이터를 포함한 집단 (모집단 or 전체)에서 A의 확률을 나타낸 것이다.

논리적으로 봤을 때 모집단에 있는 모든 데이터를 관측하지 않고서야 왼쪽항을 실험적으로 구할 수는 없다. 따라서 이를 오른쪽의 식으로 나타낼 수 있다는 것이 매우 큰 의미를 가진다. 왜냐하면 오른쪽 항은 실험적으로 구할 수 있기 때문이다.

우리가 20개의 메일을 받아서 이를 손수 스팸(Event A)과 정상으로 구분하고, 여기서 스팸메일로 의심할 수 있는 단어들이 포함(Event B)된 수도 다 헤아렸다고 하자. 오른쪽 항을 살펴보면, 스팸메일의 수도 알고, 스펨메일 의심 단어가 등장한 수도 알고 있으므로, $P(B|A)$ 는 알고있다. 전체 메일 수 중에 스팸메일 수도 알고 있으므로 $P(A)$ (Prior probability)도 알고 있다. 분모 값 $P(B)$는 모르지 않냐? 라고 말할 수 있겠지만 우리가 최종적으로 구하려는 것은 B를 관측하고 나서 A의 확률을 구하는 것으로, B를 구성하는 모든 사건 $(B\in{돈,홍보,무료,\cdots})$ 에 대하여 구한 $P(A|B)$ 의 확률이 합이 1이 되는 것이 중요하기 때문에 미지수로 두고 풀어도 상관없다.

따라서 위 식에서 중요한 것은 $P(A|B) \propto P(B|A) \times P(A)$ 로 나타낼 수 있다는 것이며 이는 곧 $Posterior \propto Likelihood \times Prior$ 가 되며 Bayes 기반 알고리즘의 뼈대가 된다.

예시: Spam Mail 분류

아주 Good old fashioned한 예시. 먼저 미리 관측한 결과는 다음과 같다.

  • 메일을 받았더니 12통 중 8통은 Normal, 4통이 Spam Mail이다.

위 결과를 바탕으로 전체의 확률에 대해서 사전 지식(Prior)을 얻을 수 있다. 아직 표본이 적긴 하지만, Prior 확률은 아래와 같다.

\[\begin{aligned} P(Normal) = 0.6,\;P(Spam) = 0.4 \end{aligned}\]

그리고 나서 Spam과 정상으로 분류 된 메일 중에서 keyword ‘Money’, ‘Promotion’, ‘Free’가 나타난 메일을 세봤더니 조건부 확률이 다음과 같다는 사실도 알아냈다.

\[\begin{aligned} P(Money\|Spam) = 0.2,\;P(Promotion\|Spam) = 0.3,\;P(Free\|Spam) = 0.5\\ P(Money\|Normal) = 0.4,\;P(Promotion\|Normal) = 0.5,\;P(Free\|Normal) = 0.1 \end{aligned}\]

만약에 이메일로 Free Promotion 이라는 메시지가 왔다면 이 메세지가 Spam일지 Normal일 지는 다음과 같이 구할 수 있게 된다.

\[\begin{aligned} P(Spam\|Free\;Promotion) &\propto P(Free\;Promotion|Spam) \times P(Spam)\\ &\propto P(Free\|Spam) \times P(Promotion\|Spam) \times P(Spam)\\ &\propto0.5 * 0.3 * 0.4 = 0.06 \end{aligned}\] \[\begin{aligned} P(Normal\|Free\;Promotion) &\propto P(Free\;Promotion|Normal) \times P(Normal)\\ &\propto P(Free\|Normal) \times P(Promotion\|Normal) \times P(Normal)\\ &\propto0.1 * 0.5 * 0.6 = 0.03 \end{aligned}\]

Normalize하게 되면 Free Promotion이라는 메시지에 대하여 Spam, Normal일 확률은 각각 2/3과 1/3이 된다. 이렇게 관측한 데이터에 대한 히스토그램을 바탕으로 확률을 구하는 경우와 다르게 관측 데이터를 가우시안으로 정의하게 되는 경우를 Gaussian Naive Bayes라고 한다.

또한 ‘Naive’ 라는 의미가 붙는 이유는 현재 관측한 데이터끼리 모두 독립적이라고 가정했기 때문이다. 만약에 자연어 처리를 하는데 있어서 Naive bayes 방식을 사용한다면 알고리즘 성능이 떨어질 수도 있다. 왜냐하면 실제로 자연어 간에는 문법이나 관용구에 의해서 통상적으로 같이 오는 단어나 순서가 정해져 있는 단어 들이 있기 때문이다. 하지만 Naive bayes 방식은 순서나 의존성 등을 고려하지 않고 그저 자루 안에 들어있는 사건들을 독립적으로 꺼내는 bag of words 형태를 취하고 있기 때문에 개선하여 사용할 필요가 있다.

Leave a comment