ML을 이용해서 데이터를 예측하는 과정은 크게 세단계로 이루어집니다.
- training data 분석
- Feature Engineering
- 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 |