안녕하세요. 문범우입니다.
이번 포스팅에서는 나이브 베이즈 분류(Naive Bayesian Classification)에 대해서 알아보도록 하겠습니다.
나이브 베이즈 분류는 스팸 필터나 문서 분류등에서도 많이 사용되는 분류 방법으로써, 분류 문제에 있어서 현재도 많이 이용되는 방법입니다.
1. 확률 이론 - 조건부 확률
나이브 베이즈 분류에 대해서 알아보기 전에 확률 이론중 조건부 확률에 대해 알아야 합니다.
크게 어려운 내용은 아니니 간단하게 짚고 넘어가보도록 하겠습니다.
먼저 간단하게, 확률은 다음과 같이 나타냅니다.
위의 그림과 같이, 파란색 구슬3개, 빨간색 구슬 2개로 총 5개의 구슬이 있을때,
P(파란색 구슬) = 3/5
P(빨간색 구슬) = 2/5
입니다.
즉,
P( A ) = A 의 경우의 수 / 전체 경우의 수
로 생각할 수 있습니다.
그럼 바로, 조건부 확률에 대해서 알아보도록 하겠습니다.
조건부 확률에서는 몇가지 가정이 필요합니다.
A와 B라는 두 가지 경우(상황)가 있을때, 이 두 경우는 서로 영향을 미치지 않는 상황을 먼저 생각해 볼게요.
예시를 들어본다면, 제가 오늘 아침에 일어나서 바로 물을 마시는 확률과 저녁에 게임을 하는 확률로 생각할 수 있습니다.
이러한 두 상황은 서로에게 영향을 미치지는 않지만, 충분히 둘 다 발생하는 경우는 존재할 수 있습니다.
위와 같이, 파란색, A 경우의 확률은 10%이고 B의 경우는 50%라고 생각해 봅시다. 이때 다음과 같은 식으로 나타낼 수 있습니다.
P(A) = 0.1
P(B) = 0.5
P(A ∩ B) = P(A) * P(B) = 0.1 * 0.5 = 0.05
A ∩ B 는, A와 B가 동시에 일어날 확률이므로 서로의 확률을 곱해줌으로써 구해줄 수 있습니다. 그럼, 조건부 확률은 어떻게 나타내고, 어떻게 구할까요?
먼저 식으로 살펴보면 다음과 같습니다.
P(A|B) = P(A) = 0.1
P(B|A) = P(B) = 0.5
A|B 는 B의 경우에 A의 확률 입니다. 그런데 위의 식을 보면 P(A|B) = P(A) 로 되어 있습니다. 왜 그럴까요?
우리가 위에서, A와 B는 서로 영향을 미치지 않는다고 가정하였습니다.
즉, 오늘 제가 저녁에 게임을 하던 안하던, 아침에 일어나서 바로 물을 마실 확률은 그대로인 것입니다.
같은 개념으로, 그 반대인, P(B|A) = P(B) 로 도출됩니다.
그럼 조금 다른 가정을 생각해보도록 할게요.
만약에 A와 B가 서로에게 영향을 미치는 상황이라면 어떨까요?
그림은 위에서 사용한 동일한 그림을 이용하겠습니다.
이제는 A와 B가 서로에게 영향을 끼칩니다.
그러므로 조건부 확률의 식이 달라지게 되는데, 이때의 조건부 확률은 다음과 같습니다.
P(A|B) = P(A ∩ B) / P(A)
P(B|A) = P(A ∩ B) / P(B)
위와 같은 식을 이용하여 베이즈 정리를 통해 우리는 다양하게 변형 해볼 수 있습니다.
P(A ∩ B) = P(A|B) * P(A) = P(B|A) * P(B)
P(A|B) = P(B|A) * P(B) / P(A)
P(B|A) = P(A|B) * P(A) / P(B)
즉, 베이즈 정리는 위와 같이, 사전 확률(A경우에서의 B)를 통해 사후 확률(B경우에서의 A)을 알 수 있다는 것을 말합니다.
위와 같이 변형된 식들을 이용하면, 우리가 알고있는 정보를 통해 새로운 정보를 얻을 수 있습니다.
또한 본격적으로 알아볼 나이브 베이즈 분류에서 위의 개념들이 사용됩니다.
2. 나이브 베이즈 분류
(Naive Bayesian Classification)
그럼 실제로 나이브 베이즈 분류가 어떤 것인지 예제를 통해 알아보도록 하겠습니다.
처음에 말씀드렸듯이, 나이브 베이즈 분류는 스팸 필터에서도 많이 사용되는 분류기이기 때문에, 이와 같은 예제를 사용해보도록 하겠습니다.
우리가 사전에 알고 있는 정보는 다음과 같습니다.
총 이메일: 100개
(spam 이메일의 확률) = P(spam) = 30/100
(money라는 단어가 포함된 이메일의 확률) = P(money) = 50/100
(spam 이메일 중 money를 포함한 이메일의 확률) = P(money | spam) = 2/5
이러한 정보들을 바탕으로, 우리는 money를 포함한 이메일이 spam일 확률을 구하고 싶어합니다.
즉, P(spam | money) 의 값을 구하고 싶은 것이죠.
우리가 위에서 알아본 베이즈 정리를 통해 아래와 같은 수식으로 쉽게 구할 수 있습니다.
P(spam | money) = P(money | spam) * P(money) / P(spam)
=(2/5) * (50/100) / (30/100) = 2/3
위와 같이 쉽게 구할 수 있습니다.
하지만 위와 같은 예제는 아주 복잡한 상황을 매우 단순하게 축약했을 뿐 입니다.
실제로는 훨씬 더 복잡하기에 우리는 분류기 등을 실제로 설계하고 제작하여 사용합니다.
단순히 하나의 단어가 아니고, 수십개, 수백개의 단어를 통해 분류를 하기에 우리가 하나하나 손으로 계산하기가 불가능하다고 볼 수 있습니다.
'AI & BigData > 데이터분석 관련' 카테고리의 다른 글
Matplotlib 기초 정리 (3) | 2018.06.11 |
---|---|
pandas(판다스) 기초 정리 (13) | 2018.06.08 |
numpy(넘파이) 기초 정리 (12) | 2018.06.07 |