이론

나이브 베이즈 분류모형(Naive Bayes Classifier)

Simon Yoon 2022. 7. 10. 23:54

본 포스팅은 모바일보다 데스크탑에 최적화되어 있습니다.

 

 

이번 포스팅에서는 범주형 변수에 대해 적용할 수 있는 나이브 베이즈 분류기(Naive Bayes Classifier)에 대해서 다루도록 하겠습니다. 곧바로 나이브 베이즈 분류기에 대해 이야기하기에 앞서서 아래와 같이 순차적으로 이론들을 정리해보면서 학습하겠습니다.

 

Agenda:

1. 조건부 확률(Conditional Probability)

2. 베이즈 정리(Bayes Theorem)와 머신러닝

3. 나이브 베이즈 분류기(Naive Bayes Classifier)


1. 조건부 확률(Conditional Probability)

조건부 확률이란, 어떤 특정한 사건이 발생한 후 그 다음 사건이 일어날 확률을 의미합니다. 예를들어 ▵▵대학교의 ○○학과에 뽑힌 학생이 남학생임을 알았다고 했을 때, 그 남학생이 정시 입학생일 확률은 얼마나 될까?에 대해서 조건부 확률로 계산할 수 있습니다.

위와 같은 상황에서

1) 남학생이 뽑힐 확률: P(M) = 32 / 60

2) 수시 입학생이 뽑힐 확률: P(E) = 25 / 60

일단 P(M)과 P(E)는 이와 같이 계산할 수 있을 것입니다.

 

그렇다면 임의로 뽑힌 한 학생이 정시로 입학한 남학생일 확률은 무엇일까요?

사건 M과 사건 R이 동시에 발생하므로 결합확률(Joint Probability): P(M ∩ R) = 20 / 60 = 1 / 3 입니다.

 

이제 다시 조건부 확률로 돌아와서 사건 B 가 발생했을 때 사건 A 가 발생할 확률은 P(A | B) 이고, 그림과 같이 표현하자면 아래와 같이 나타낼 수 있을 것입니다.

이는 P(A | B) = P(A ∩ B) / P(B) 가 됩니다.

 

위의 문제로 다시 돌아가서 보면, ▵▵대학교의 ○○학과에 뽑힌 학생이 남학생임을 알았다고 했을 때, 그 남학생이 정시 입학생일 확률은 P(R | M)이고, P(R | M) = P(R ∩ M) / P(M) = (20 / 60) / (32 / 60) = 20 / 32 입니다.

 

연습문제

주사위를 던질때 사건 A는 3 이상의 눈이 나오는 경우이고, 사건 B는 소수(prime number)가 나타나는 경우일 때, P(B | A)를 구하시오.

더보기

P(B | A) = P(A ∩ B) / P(A) = (2 / 6) / (4 / 6) = 1 / 2

 

이제 우리는 조건부 확률이 무엇인지 어떻게 계산하는지를 알았습니다. 다음으로 넘어가보겠습니다.


2. 베이즈 정리(Bayes Theorem)와 머신러닝

먼저 베이즈 정리는 표본공간 S가 k개의 배반 사건 $A_{1}, A_{2}, ... , A_{k}$ 로 분할될 때

임의의 사건 $B$가 발생할 때 사건 $A_{i}$ 가 발생할 조건부 확률을 의미합니다. 이는 아래와 같이 표현됩니다.

 

$P(A_{i}|B) = \frac{P(A_{i}\cap B)}{P(B)} = \frac{P(B|A_{i})\cdot P(A_{i})}{P(B|A_{1})P(A_{1})+P(B|A_{2})P(A_{2})+...+P(B|A_{i})P(A_{i})+...+P(B|A_{k})P(A_{k})}$

 

한번 예시를 들어보겠습니다.

 

어떤 사람이 밤중에 머리가 아파서 불을 켜지 않은 채 서랍에서 상비약을 꺼내 먹었다고 하자. 그런데 얼마 후 심한 복통으로 병원을 찾게 되었다. 의사의 생각으로는 약물 중독이 틀림없는데 어떤 약에 의한 것인지 알 수가 없다.

서랍 속에는 아스피린이 든 병이 2개, 독약이 든 병이 1개 있었다. 그리고 일반적으로 아스피린을 먹어서 복통 증상이 발생할 확률은 5%, 독약을 먹어서 증세가 발생할 가능성은 80%라고 한다. 그러면 그 사람이 독약을 먹었을 확률은 얼마인가?

 

일단 복통이 일어나는 사상을 B, 독약을 먹은 사상을 A, 아스피린을 먹은 사상은 $\overline{A}$ 라고 하겠습니다.

1) 독약을 먹고 복통이 일어날 확률 P(B | A) = 0.8

2) 아스피린을 먹고 복통이 일어날 확률 P(B | $\overline{A}$) = 0.05

3) 독약을 먹을 확률 P(A) = 1 / 3

4) 아스피린을 먹을 확률 P($\overline{A}$) = 2 / 3

 

이때 베이즈 정리를 이용하면, 다음과 같이 계산할 수 있습니다.

복통 증세가 발생했는데 독약에 의한 증상일 확률

$P(A|B) = \frac{P(A\cdot B)}{P(B)} = \frac{P(B|A)\cdot P(A)}{P(B|A)P(A) + P(B|\overline{A})P(\overline{A})} = \frac{0.8 \times 0.33}{0.8 \times 0.33 + 0.05 \times 0.67} = \frac{0.264}{0.2975} = 0.89$

 

복통 증세가 발생했는데 아스피린에 의한 증상일 확률

$P(\overline{A}|B) = \frac{P(\overline{A}\cdot B)}{P(B)} = \frac{P(B|\overline{A})\cdot P(\overline{A})}{P(B|A)P(A) + P(B|\overline{A})P(\overline{A})} = \frac{0.05 \times 0.67}{0.8 \times 0.33 + 0.05 \times 0.67} = \frac{0.0335}{0.2975} = 0.11$

 

여기서 P(A)를 원인사상 A의 사전확률(관측자가 이미 알고 있는 사건으로부터 나온 확률),

P(A | B)를 원인사상 A의 사후확률(사건 B가 발생하여 이 정보가 반영된 사건 A의 확률)이라 하고

P(B | A)를 우도함수(likelyhood function; 이미 알고있는 사건이 발생했다는 조건하에 다른 사건이 발생할 확률)라고 합니다.

 

머신러닝에서 우리는 훈련 데이터(observed training data)가 주어졌을 때,  어떤 한 공간(space) 상에서의 가장 발생가능한 사건(the best hypothesis)을 결정하는데 관심이 있습니다. 새로운 데이터가 주어졌을 때 레코드 하나를 분류하기 위해서 이러한 방법으로 각 클래스에 속할 확률을 계산하고 나서, 가장 큰 확률을 갖는 클래스로 분류하게 됩니다.

 

이제 2번째 agenda인 베이즈 정리와 머신러닝에 대한 설명을 마쳤습니다. 다음으로 나이브 베이즈에 대해서 다뤄보도록 하겠습니다.


3. 나이브 베이즈 분류기(Naive Bayes Classifier)

먼저 단순규칙(Naïve Rule)은 모든 예측변수들을 배재한 상태에서 어느 한 레코드를 가장 지배적인 클래스를 찾아서 해당 클래스로 분류하는 단순한 규칙입니다. 예를들어 앞선 상황과 비슷한 가정을 해본다면, 훈련 데이터에서 조사된 복통 환자의 80%가 독약을 먹고 복통이 발생한 것이라고 나타났을 경우 새로운 환자에서 나타난 복통은 단순히 독약에 의한 것이라고 분류합니다. 일반적으로 단순규칙은 좀 더 복잡한 분류모델의 성과를 평가하기 위한 벤치마크의 역할로 사용됩니다. 나이브 베이즈(Naïve Bayes) 분류는 단순규칙 보다는 좀 더 정교한 방법으로, 예측변수에 포함된 정보들을 단순규칙과 결합한 형태입니다.

 

나이브 베이즈 분류모형은 각 개별 attibute가 조건부 독립(conditional independent)하다고 가정을 합니다. 이 부분에 대해서 이야기하자면, 일단 분류문제는 예측변수들이 주어질 때 각 클래스에 속할 확률을 추정하게 됩니다. 이 때 앞에서 다룬 조건부 확률을 사용하게 됩니다. 만약 조건부 확률로 추정할 경우 예측변수의 수가 p개라고 할 때, 한 클래스가 $C_{i}$에 속할 확률은 아래와 같습니다.

$P(C_{i}|X_{1},...,X_{p}) = \frac{P(X_{1},...,X_{p}|C_{i})P(C_{i})}{P(X_{i},...,X_{p}|C_{1})P(C_{1})+ ... + P(X_{1},...,X_{p}|C_{m})P(C_{m})}$

이 수식만 봐도 어려워 보이는데 차원의 수가 늘어날수록(예측변수의 수가 늘어날수록) 점점 더 각 레코드들이 자신과 일치하는 경우를 찾지 못하는 문제가 발생하게 됩니다. 따라서 이러한 문제를 해결하기 위해서 전체 데이터세트를 사용한 나이브 베이즈를 사용하게 됩니다.

 

다시 조건부 독립으로 돌아와서, 타깃 value $V$에 대해서 개별 속성 $a_{1}$이 $a_{2}$와 조건부 독립인 경우 다음과 같이 표현할 수 있습니다. $P(a_{1}, a_{2} | V) = P(a_{1}|a_{2}, V)P(a_{2}|V) = P(a_{1}|V)P(a_{2}|V)$ 조건부 독립을 가정하지 않았을 경우보다 계산의 양이 많이 줄어들었음을 알 수 있습니다.

즉, n개의 attributes가 있고 각 예측변수들이 서로 독립적이라고 한다면 $P(a_{1}, a_{2}, ... , a_{n} | V_{j}) = P(a_{1}|V_{j})\cdot P(a_{2}|V_{j}) ... P(a_{n}|V_{j}) = \prod_{j}P(a_{i}|V_{j})$ 와 같이 계산될 수 있습니다.

 

따라서 나이브 베이즈 분류모형은 아래와 같이 계산하게 됩니다.

$V_{NB} = \underset{V_{j}\in V}{argmax} P(V_{j}|a_{1},a_{2}, ..., a_{n})$
$= \underset{V_{j}\in V}{argmax} P(a_{1},a_{2}, ..., a_{n}|V_{j})\cdot P(V_{j})$
$= \underset{V_{j}\in V}{argmax} P(a_{1}|V{j})\cdot P(a_{2}|V{j}) ... P(a_{n}|V{j})\cdot P(V_{j})$
$= \underset{V_{j}\in V}{argmax} \prod_{i}P(a_{i}|V_{j})$

 

이제 나이브 베이즈 분류기 계산 방식에 대해서 다루었으니 예시와 함께 확인해 보겠습니다.

 

예시 데이터

사전정보로 위와 같은 예시 데이터가 주어진다고 했을 때, Outlook = Sunny, Temperature = Cool, Humidity = High, Wind = Strong 인 새로운 레코드에 대해서 어떤 클래스로 분류할지를 판단해 보겠습니다.

잠시 위의 식을 사용해서 적어보자면, $V_{NB} = \underset{V_{j}\in \left\{Yes, No \right\}}{argmax} P(Outlook = Sunny|V{j})\cdot P(Temperature = Cool|V{j})\cdot P(Humidity = High|V{j})\cdot P(Wind = Strong|V{j})\cdot P(V_{j})$ 입니다. 중간 계산 과정은 생략하겠습니다.

$P(Sunny|Yes)\cdot P(Cool|Yes)\cdot P(High|Yes)\cdot P(Strong|Yes)\cdot P(Yes)$ = (9/14)x(2/9)x(3/9)x(3/9)x(3/9) = (18/3402) = 0.0053

$P(Sunny|No)\cdot P(Cool|No)\cdot P(High|No)\cdot P(Strong|No)\cdot P(No)$ = .0206 입니다.

따라서 $V_{NB}$ = No 로 분류하게 됩니다.

 

나이브 베이즈 분류 방식의 장점은 단순성, 계산효율성과 좋은 분류성능이라고 할 수 있습니다. 일단 이해하기 쉽고 계산 코스트가 적기 때문에 빠르다고 할 수 있습니다. 다만 그 한계도 명확히 존재하는데, 변수간 독립성을 가정하고 있지만 실제 데이터 상에서는 항상 독립성이 보장되지 않습니다. 또한 좋은 결과를 얻기 위해서는 매우 많은 수의 데이터가 필요합니다. 중요한 단점 중 하나가 예측변수의 범주가 학습용 데이터에서 존재하지 않는 경우 나이브 베이즈는 이러한 예측변수의 범주를 갖는 새로운 레코드는 0의 확률값을 갖는다고 가정하게 된다는 것입니다.

 

지금까지 나이브 베이즈 분류모형(Naive Bayes Classifier)에 대해서 알아보았습니다. 통계 이론에 대한 기본 지식이 어느 정도 필요하지만 천천히 알아가다보면 크게 어렵지 않은듯 합니다. 추가적으로 R이나 파이썬에서의 코드 예제는 따로 포스팅 할 예정입니다. 감사합니다.

'이론' 카테고리의 다른 글

클라우드 컴퓨팅 - 1  (0) 2022.07.30
개인화를 넘어서 '초개인화'  (0) 2022.07.23
[DB] Relation의 키(key)  (0) 2022.05.07
MapReduce  (0) 2022.04.30
[DB] 데이터베이스 개념  (0) 2022.04.23