본문 바로가기

Machine Learning

중학생도 쉽게 이해하는 Gaussian Naive Bayes Classifier

ML을 이용해서 데이터를 예측하는 과정은 크게 세단계로 이루어집니다.

  1. training data 분석
  2. Feature Engineering
  3. model 선정 및 data feed & test data를 이용한 데이터 예측

그 중 세번째 단계, 즉 model 선정에서 선택할 수 있는 model은 굉장히 다양합니다. 간단히 나열해보자면,

  • Logistic Regression
  • Support Vector Machines (Linear and Radial)
  • Random Forest
  • K-Nearest Neighbors
  • Naive Bayes
  • Decision Tree

등이 있죠!

이번 포스트에서는 이 많은 model 중 Naive Bayes, 그 중에서도 Gaussian Naive Bayes classifier에 대해 알아보겠습니다.

Naive Bayes는 확률을 이용해서 가장 합리적인 예측값을 계산하는 방식입니다.

우선 이 모델이 기반으로 삼고 있는 Bayes theorem에 대해 알아봅시다.

그 전에 잠깐! 중학생 여러분 또는 아직 확률에 대해 잘 모르시는 분은 아래의 '더보기'를 눌러 확률에 대해 먼저 살펴보고 가세요~ :)

더보기

Bayes theorem을 이해하려면 기본적인 확률의 개념을 알아야 합니다.

어떤 사건 $A$가 일어날 확률을 $P(A)$라고 나타냅니다.

그런 어떤 사건 $B$가 일어날 확률은?

네, $P(B)$이겠죠? ^^

자, 여기서 어떤 사건 $B$가 일어났을때 다른 사건 $A$가 일어날 확률은?

이러한 개념을 $B$가 주어졌을때의 $A$의 조건부 확률이라 하며, $P(A|B)$ 로 나타냅니다.

그럼 $P(A|B)$를 어떻게 계산할 수 있을까요?

조금만 생각해보면, $P(A|B) = \frac{P(A\cap B)}{P(B)}$ 임을 알 수 있습니다.

여기서 우리는 새로운 공식을 만들어낼 수 있습니다.

$P(A \cap B) = P(A|B)P(B)$

바로 이런 공식이죠.

이 사실을 잘 기억해둡시다!

 

Bayes theorem은 두 확률 변수 $A, B$ 사이의 관계를 이용해 $P(A|B)$를 구하는 방법에 관한 theorem입니다.

식으로 살펴보자면, 다음과 같습니다.

$ A_1 \cup A_2 = A $이고 $ A_1 \cap A_2 = \varnothing$이면서 $A \supset B$일때,

$ P(A_1 |B) = \frac{P(B \cap A_1}{P(B)} $

$ = \frac{P(B|A_1 )P(A_1 )}{P(B)} $

$ = \frac{P(B|A_1 ) P(A_1 ) }{P(B|A_1 ) P(A_1 ) + P(B|A_2 )P(A_2 )} $

그냥 $\frac{P(A \cap B)}{P(B)}$로 쉽게 구하면 되지 않느냐구요?

하지만 세상을 살다보면 $P(B|A)$를 구하기는 쉬운데 $P(A \cap B)$를 구하기는 여건상 어려운 경우가 존재한답니다...

바로 ML을 이용해 데이터 예측을 할 때와 같은 상황이죠!

사람의 키에 대한 정보가 주어지고 그 사람의 성별을 예측하는 상황을 생각해봅시다.

이 때 사람이 남자일 확률을 $P(A_1 )$, 여자일 확률을 $P(A_2 )$라 할 수 있고

사람의 키가 $x$일 확률을 $P(B=x)$라 할 수 있습니다.

이 때, 예측값을 계산하는 경우는 키가 주어진 상태에서 그 사람이 남자일 확률 또는 여자일 확률을 구하는 것이기 때문에 우리가 구하고자 하는 값은 $P(A_1 |B)$와 $P(A_2 | B)$입니다. 하지만 $P(A_1 \cap B)$나 $P(A_2 \cap B)$와 같은 값을 쉽게 구할 수 있을까요? training data를 이용해서 구할 수 있는 확률의 종류에는 한계가 있답니다.. 더군다나 확률변수 $B$가 취할 수 있는 값이 연속적일 경우에는 더더욱 그러하죠.ㅎㅎ 우선 그래도 간단히 Naive Bayes 모델의 원리를 이해하기 위해 아래 예시를 살펴봅시다!

다음과 같은 training set이 주어져 있습니다.

성별 신장 (feet) 무게 (lbs) 발의 크기 (inches)
남성 6 180 12
남성 6 180 11
남성 6 170 9
남성 5 150 9
여성 5 100 6
여성 5 140 7
여성 5 140 7
여성 6 150 9

우리의 목표는 아래 challenge data가 주어졌을 때 성별을 예측하는 것입니다.

신장 (feet) 무게 (lbs) 발의 크기 (inches)
5 150 9

간단하죠? 위의 데이터에서 성별이 남자일 확률이 $P(A_1 )$, 여자일 확률이 $P(A_2 )$이며 신장, 무게, 발의 크기가 각각 확률변수 $P(B_1 ), P(B_2 ), P(B_3 )$이라 생각해주면 됩니다.

그렇다면 주어진 test data에서 성별이 남자일 확률을 구하기 위해서는

$ P(A_1 |B_1 = 5, B_2 = 150, B_3 = 9) = \frac{P(B_1 = 5, B_2 = 150, B_3 = 9|A_1 )P(A_1 )}{P(B_1 = 5, B_2 = 150, B_3 = 9)} $

를 계산하면 됩니다.

이 때, $B_1$, $B_2$, $B_3$가 각각 서로 독립적인 사건이라 가정하면, 위 식은 다음과 같이 표현됩니다.

$ P(A_1 |B_1 = 5, B_2 = 150, B_3 = 9) = \frac{P(B_1 = 5|A_1)P(B_2 = 150|A_1)P(B_3 = 9|A_1)P(A_1 )}{P(B_1 = 5, B_2 = 150, B_3 = 9)} \cdots ①$

test data의 사람이 여자일 경우도 마찬가지 식으로 표현할 수 있죠.

$ P(A_2 |B_1 = 5, B_2 = 150, B_3 = 9) = \frac{P(B_1 = 5|A_2)P(B_2 = 150|A_2)P(B_3 = 9|A_2)P(A_2 )}{P(B_1 = 5, B_2 = 150, B_3 = 9)} \cdots ② $

이 때, 두 계산식의 분모는 동일하므로 분자만 계산해서 대소를 비교해보면 됩니다.

그리고 $P(A_1 ) = P(A_2 ) = 0.5$로 합리적으로 가정해줄 수 있습니다.

그렇다면 주어진 training set에서,

$P(B_1 = 5|A_1 ) = 0.25, P(B_2 = 150|A_1 ) = 0.25, P(B_3 = 9|A_1 ) = 0.50$이므로

①에서 분자값을 계산해주면, 0.15626입니다.

마찬가지로 ②에서는 분자값이 0.0234375로 계산되어집니다.

따라서, 주어진 test data에 해당하는 사람은 여자일 확률이 더 높기에, 예측값을 '여자'로 정할 수 있습니다.

이것이 Naive Bayes classifier의 원리입니다.

그렇다면 Gaussian Naive Bayes model은 무엇일까요?

기본 원리는 같습니다만,

training set의 attribute들이 모두 Gaussian Distribution 즉, 정규분포를 따른다고 가정하고 $P(B|A)$를 정규분포에서의 확률밀도 계산 식으로 구하는 방식이 추가될 뿐입니다.

정규분포를 따르는 어떤 값 또는 요소가 있을때 특정 값이 표본집단에 속하지 않더라도 그 값이 모집단에서 존재할 확률을 수식을 통해 계산해낼 수 있습니다.

Gaussian Distribution에 대한 더 자세한 내용은 아래 '더보기'를 눌러 참고해주세요 :)

더보기

정규분포는 2개의 변수, 평균 $\mu$와 분산 $\sigma ^2$에 의해 그 모양이 결정되고 이러한 분포를 $N(\mu, \sigma ^2 )$로 표기합니다.

$N(\mu, \sigma ^2 )$를 따르는 확률변수 $P(X)$가 있을 때, 확률변수 $X$가 값 $x$를 가질 확률 $P(X=x)$는 다음과 같은 식으로 계산됩니다.

$P(X=x) = \frac{1}{\sqrt{2\pi \sigma ^2}}exp(- \frac{(x-\mu )^2}{2 \sigma ^2 }) $

이번 포스팅에서 살펴본 Gaussian Naive Bayes model에서는 어떤 방식으로 활용될까요?

종전에 예를 들었던 예시에서 우리는 $ P(B_1 = 5.5 | A_1 )$ 과 같은 값을 구할 수 있습니다.

우선 $B_1 | A_1$이 정규분포를 따르는 하나의 확률변수라 생각해봅시다.

그렇다면 이 확률변수에서 $\mu = 5.75, \sigma ^2 = 0.1875$ 입니다.

위의 확률밀도 공식에서,

$P(B_1 = 5.5 | A_1 ) = \frac{1}{\sqrt{2\pi\cdot 0.1875}} exp(- \frac{(5.5 - 5.75)^2}{2 \cdot 0.1875}) = 0.7799$

임을 구해낼 수 있습니다.

 

'Machine Learning' 카테고리의 다른 글

컴퓨터의 시각 인식에 대해 알아보자  (0) 2019.10.28
Boosting과 친해져보자!  (0) 2019.10.27
Ensemble의 기법  (1) 2019.10.23
Supervised Learning Models  (1) 2019.10.22
Epoch, Batch, Iteration 용어 정리  (0) 2019.10.16