본문 바로가기

딥러닝 & 머신러닝/머신러닝 지식

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

반응형

토마스 베이즈 (출처 : https://shcho1203.tistory.com/26)

 

이번 글에서는 나이브 베이즈 분류기(Naive Bayes Classifier)에 대한 이론적 지식을 알아보겠습니다. 베이즈 정리, 최대 우도 추정, 최대 사후확률 추정, 둘 간의 비교, '나이브'의 뜻, 라플라스 스무딩, 나이브 베이즈 분류기의 특징 순서로 정리하겠습니다.


 

1. 베이즈 정리

 

베이즈 정리(Bayes Theorm)는 이름에서도 알 수 있듯이, 나이브 베이즈 분류기의 근본이 되는 수학 정리입니다.

 

베이즈 정리는 두 사건 X, Y에 대한 조건부 확률(conditional probability) 간에 성립하는 확률 관계이며, 수식은 다음과 같습니다. 

 

 

수식 중 P(X|Y), P(Y|X)라는 것이 바로 조건부 확률을 나타내는 표현입니다. 예를 들어 P(A|B)라는 확률은 사건 B가 일어났다는 가정 하에 사건 A가 발생할 확률을 나타냅니다. 사건 A, B에 대한 조건부 확률 수식은 아래와 같습니다.

 

 

베이즈 정리 수식은 확률의 곱 규칙과 확률의 합 규칙으로부터 유도됩니다. 각각의 식은 다음과 같습니다.

 

 

즉, 확률의 곱 규칙은 두 사건 X, Y가 동시에 일어날 확률을 나타내며, 확률의 합 규칙은 두 사건 X, Y 중 하나만 일어날 확률을 나타냅니다. 두 규칙으로부터 베이즈 정리를 유도하는 과정은 아래와 같이 P(Y,X) = P(X,Y) 라는 사실에서 시작합니다.

 

 

베이즈 정리 수식을 구성하는 확률들에 대해서 알아보겠습니다.

 

P(Y|X) : 사후확률(Posterior)을 뜻합니다. 사후확률이란 사건 발생 후의 확률을 의미하는데, 정확히 말하자면 발생한 사건(X)이 특정 확률분포(Y)에서 나왔을 확률입니다. 머신러닝 관점에서는 관측된 특징(X)이 특정 클래스(Y)에서 나왔을 확률이라고도 할 수 있겠습니다.

 

P(X|Y) : 우도 또는 가능도(Likelihood)를 뜻합니다. 본문에선 우도라는 용어를 사용하겠습니다. 우도란 사후확률과 반대로, 특정 확률분포 or 클래스(Y)에서 특정 사건 or 특징(X)이 발생할 확률을 뜻합니다. 즉, 머신러닝 관점에서는 기존에 있는 데이터의 각 클래스 별로 특정 특징에 대한 분포를 의미합니다.

 

P(Y) : 사전확률(Prior)를 뜻합니다. 특정 특징 or 사건에 무관하게 미리 알 수 있는 확률입니다. 즉, 머신러닝 관점에서는 특징(X)가 관측되기 전부터 이미 정해져있던 클래스(Y)의 분포를 의미합니다.

 

P(X) : 증거(Evidence)를 뜻합니다. 머신러닝 관점에서는 특정 클래스(Y)의 분포에 상관없이 전체 클래스에서 특정 특징(X)이 관측될 확률을 뜻합니다.

 

2. 베이즈 정리 예시 & 최대 사후확률 추정 (Maximum a Posteriori)

 

간단한 예시를 통해서 베이즈 정리에 대해 좀 더 알아보겠습니다.

 

 

위 그림을 참고하세요. 먼저 주머니에서 숫자가 적힌 공 하나를 뽑아서 번호를 확인합니다. 그리고 1, 2, 3이라 표시된 병 중 카드 번호에 해당하는 병에서 공을 하나 꺼내 색을 말합니다. 꺼낸 숫자 공과 색깔 공은 꺼낸 곳에 다시 넣습니다. 번호와 색을 나타내는 확률변수를 각각 Y와 X라고 합시다.

 

우리가 베이즈 정리를 이용하면 다음 질문에 대한 답을 합리적으로 구할 수 있습니다.

 

"하얀 공(특징 X)이 나왔다는 사실만 알고 어느 병(클래스 Y)에서 나왔는지 모르는데, 어느 병(클래스 Y)인지 추정하라"

 

어느 병이든 가능성이 있으므로, 각 번호일 때의 사후 확률 P(Y=1|X=흰), P(Y=2|X=흰), P(Y=3|X=흰)을 구해서 가장 큰 값을 갖는 경우를 택해야 합니다. 이 전략을 수식으로 쓰면 다음과 같습니다.

 

 

즉, 하얀 공(X=흰)이 나왔을 때, 가장 큰 P(Y=?|X=흰) 값을 가지는 경우의 Y를 최종 클래스로 추론하겠다는 뜻입니다. 이때 Y_hat은 추정된 Y(클래스)를 의미합니다. 위 수식은 사후 확률을 최대화 하는 클래스 or 확률 분포의 모수(parameter, (평균, 표준편차 등)) Y를 찾는다는 의미에서 최대 사후확률 추정(Maximum a Posteriori, MAP)이라고 합니다.

 

예를 들어 P(Y=1|X=흰)를 먼저 구해보겠습니다.

 

 

P(X=흰)은 확률의 합 규칙으로 구할 수 있고,

P(X=흰|Y=1)은 1번 병에서 흰 공이 나올 확률이므로 총 12개의 공 중 흰 공의 갯수인 9개를 고려해서 구했을 때 9/12,

P(Y=1)은 주머니에서 1번 공이 나올 확률이므로 총 8개의 숫자 공 중 1번 공의 갯수 1개를 고려해서 구했을 때 1/8이 나옵니다.

 

위에서 구한 각 확률값들을 이용해서 "흰 공(X)이 뽑혔는데 그게 1번 병(Y=1)일 확률"인 P(Y=1|X=흰)을 구해보면 다음과 같습니다.

 

 

마찬가지로 P(Y=2|X=흰), P(Y=3|X=흰)을 구하면 다음과 같습니다.

 

 

따라서 3번 병에서 흰 공이 나왔을 때의 사후확률이 가장 크므로, 흰 공은 3번 병에서 나왔을 확률이 가장 큽니다. 즉, 위에서 살펴봤던 최대 사후확률 수식을 이용하면 다음과 같은 결과가 나옵니다.

 

 

사실 이 계산에서 분모에 있는 P(X=흰)은 생략해도 됩니다. P(X=흰)은 Y와 무관하여 세 계산식에서 같은 값을 가지는데, 우리가 궁극적으로 구하고자 하는 것은 "정확한" 사후확률이 아닌, "흰 공이 어느 병에서 나왔을 가능성이 가장 큰가?"에 대한 질문의 답이기 때문입니다. 다시 말해, 우리는 세 병의 "상대적인 우열"만 따지면 됩니다.

 

따라서 분모 값, 즉 증거를 고려하지 않는다면 특정 특징의 확률변수 X가 주어졌을 때의 사후확률은 우도와 사전확률의 곱에 비례하게 됩니다.

 

지금까지 베이즈 정리를 이용해 사후확률을 구하고, 그를 통해 어떤 사건 or 어떤 특징 X가 어떤 확률 분포 or 어떤 클래스 Y에서 어느 정도의 확률로 나왔을지를 추론할 수 있었습니다.

 

3. 최대 우도 추정 (Maximum Likelihood)

 

나이브 베이즈 분류기의 목표도 이와 같이 특정 특징(X)의 사후확률을 구하여 그 특징이 어떤 클래스(Y)에서 나왔을지를 추론하는 것입니다. 그리고 사후확률은 수식에서도 볼 수 있듯이 우도와 사전확률의 곱에 비례하게 됩니다. 그렇다면 우리에겐 우도와 사전확률을 정확하게 계산하는 것 또한 중요한 일이 됩니다. 그리고 우도를 계산하기 위해선 우도 값을 형성하는 데이터의 분포 또한 잘 알아야 합니다.

 

예를 들어 P(X=흰|Y=1) = 9/12 라는 우도 값은 "1번 병 안에 흰색 공 9개, 파란 공 3개"라는 데이터 분포에서 가장 형성되기 쉽습니다. 9/12라는 값은 12개의 공이 있는 병에서 복원 추출을 무한 번 시행했을 때 흰 공이 나올 확률을 말합니다.

 

하지만 사실 "1번 병 안에 흰색 공 1개, 파란 공 11개"라는 극단적인 데이터 분포에서도 9/12라는 우도값은 나올 수도 있습니다. 극단적인 데이터 분포에서 무한 번 복원 추출을 시행해도 아주 낮은 가능성으로 9/12라는 확률이 나올 수도 있습니다.

 

그러나 직관적으로, 당연히 "흰색 공 1개, 파란 공 11개"라는 데이터 분포보다는 "흰색 공 9개, 파란 공 3개"라는 데이터 분포에서 우도가 9/12일 확률이 가장 높아집니다.

 

 

특정 데이터 분포를 나타내는 모수(parameter)를 Y라고 할 때, 해당 모수에서 만들어진 데이터 분포로부터 특징 X가 발견될 확률인 우도 P(X|Y)를 최대화하는 Y인 Y_hat을 위와 같이 나타낼 수 있습니다.

 

수식의 뜻은 "특징 X가 주어졌을 때, X를 발생시켰을 가능성을 최대로 하는 모수를 찾아라"입니다. 이 같은 과정을 최대 우도 추정(Maximum Likelihood, MLE)이라고 합니다.

 

즉, 우리는 우도를 최대화하는 확률 모형을 만듦으로써 특정 클래스에 대한 특징 데이터의 분포를 더욱 정확하게 알 수 있고, 그로부터 보다 올바른 사후확률 값을 구해, 결국 나이브 베이즈 분류기의 목적을 달성할 수 있게 됩니다. 

 

결과적으로 나이브 베이즈 분류기의 학습 과정은 우도를 최대화하는 확률 모형을 만드는 과정이며, 다시 말하면 해당 확률 모형의 모수를 정확하게 추정하는 과정입니다.

 

4. 최대 사후확률 추정(MAP)과 최대 우도 추정(MLE) 비교

 

지금까지의 설명을 들어보면, 최대 사후확률 추정과 최대 우도 추정 모두 "어떤 특징 or 사건(X)"이 발생했을 때 그 사건의 발생 가능성을 최대화하는 "클래스 or 데이터 분포(Y)"를 추론한다는 점에서 어떤 차이점이 있는지 구분을 못할 수 있습니다.

 

말로만 들으면 둘 다 차이가 없어보이나, 가장 큰 차이점은 바로 각각의 계산과정 중 "사전확률(Prior)의 개입 유무"입니다. 즉, 우리가 미리 알고 있는 지식을 쓰느냐 안쓰느냐의 차이입니다. 최대 사후확률 추정은 사전확률이 반영되나, 최대 우도 추정은 그렇지 않습니다.

 

사전확률은 과거의 경험 또는 개인의 믿음에서 나오는 값입니다. 따라서 사전확률엔 분석가의 개입 여지가 있습니다. 즉, 같은 문제라도 서로 다른 사전 확률을 사용하여 접근할 수 있다는 의미가 됩니다. 하지만 사전확률을 모르는 경우가 대부분이기 때문에 단순하게 균등 분포로 놓는 경우가 많은데, 이 경우 최대 사후확률 추정은 최대 우도 추정과 같게 됩니다.

 

 

최대 사후확률 추정은 argmax P(Y|X) 이고, 최대 우도 추정은 argmax P(X|Y) 인데, 지금까지의 수식과 위 수식을 참고해보면 최대 사후확률 추정에서 분자의 P(Y)는 X가 어떤 경우(X1, X2, ...)라도 모두 같은 값을 가지므로 의미가 없어져 P(X|Y)만 남고, 분모의 P(X)는 처음부터 의미가 없었으므로 결국 argmax P(Y|X) = argmax P(X|Y)가 됩니다.

 

최대 사후확률 추정은 분석가가 미리 알고 있는 지식을 반영한다는 점에서 최대 우도 추정보다 더 합리적인 방법으로 여겨집니다. 단순히 관측 결과에만 의존하는 것보다 기존의 알고 있는 정보를 사용함으로써 실제 인간의 생각을 모사하기에 더 적절해보입니다.

 

반면 지금까지 봐왔듯이, 최대 사후확률 추정은 베이즈 정리를 기반으로 이루어집니다. 그러기 위해선 사전확률에 대해 잘 알아야하고, 따라서 사전확률의 분포에 대한 모델링이 필요합니다. 이 사전확률이 사후확률에 아주 큰 영향을 끼칩니다. 그러나 사전확률 분포의 모델링이 어렵다는 것이 문제점입니다.

 

예를 들어 사전에 우리가 [1번 병 : 흰 공 99개, 파란 공 1개], [2번 병 : 흰 공 1개, 파란 공 99개], [3번 병 : 흰 공 2개, 파란 공 98개] 라는 확률분포를 알고 있다고 합시다. 그렇다면 1번 병의 사전확률에 해당하는 P(Y) 크기는 "P(Y=흰) >> P(Y=파)"라는 것을 알 수 있습니다.

 

이땐 아무리 정확하게 우도 P(X|Y)를 구한다고 한들, 사전확률의 영향력이 매우 크기에 그 의미가 없습니다. 당연스럽게도, 어떤 병을 택해서 흰 공이 나왔다고 했을 때, 그 병이 1번 병일 확률이 가장 크다는 사실은 우도에 대한 계산 없이 사전확률만으로도 알 수 있습니다.

 

결론적으로, 최대 사후확률 추정은 최대 우도 추정과 다르게 사전확률까지 사용해서 어떤 데이터의 분포를 나타내는 모수 Y를 추론하므로 좀 더 정확하다는게 장점입니다. 반면에 사전확률의 영향을 많이 받고, 그 사전확률의 분포를 알아내는 것도 현실에선 어렵다는 것이 단점입니다.

 

5. '나이브(Naive)'의 뜻

 

앞선 예시에선 우리가 고려해야 할 특징이 파란 공과 흰 공만 있다고 했고, 각각은 서로 완전히 독립적입니다. 이는 마치 스팸 메일과 일반 메일같은 관계입니다. 그럼 특정 단어가 메일 내용에 있을 때, 그 단어를 고려해서 이 메일이 스팸인지 일반인지를 확인하려면 수식을 어떻게 써야할까요?

 

스팸 메일에 보통 들어있는 단어가 '대출', '오빠', '담보' 등등으로 총 N개가 있다고 합시다. 그런데 본래 자연에서는 각 단어, 즉 각 특징 사이에 어느 정도의 상관관계가 존재합니다. 이때 스팸 메일에서 베이즈 정리의 우도에 관한 식은 확률의 곱 규칙을 고려하여 다음과 같이 쓰입니다. (확률변수를 콤마(,)로 구분하는 표기)

 

 

그러나 나이브 베이즈 분류기에서는 각각의 특징 간에 서로 아무런 상관관계가 없다는 가정, 즉 특징들이 서로 조건부 독립(conditional independent)이라는 가정을 하게 됩니다. 만약 서로 다른 두 특징 A, B 간에 조건부 독립이 성립한다면, 다음 수식이 성립합니다.

 

 

이를 활용하면 스팸 메일의 각 단어를 고려한 우도를 표현한 이번 파트의 첫 번째 식은 다음과 같이 쓰일 수 있습니다.

 

 

이제 이것을 일반화 하면 우도는 다음과 같습니다.

 

 

즉, 나이브 가정하에선 조건부 독립인 확률변수가 가지는 확률들의 곱으로 우도가 표현됩니다. x1, x2, ... 는 각각 '대출', '오빠'처럼 특징을 나타내고, k는 스팸처럼 특정 분포 or 클래스를 나타냅니다. 파이 연산자는 수열의 곱을 나타내는 기호입니다. 마치 시그마 연산자가 수열의 합을 나타내는 기호인 것처럼 말입니다.

 

결론적으로, 나이브 가정 없이 베이즈 추론을 하려면 각 확률변수 사이의 상관관계도 고려해야 하기에 계산이 복잡해집니다. 그러나 실제로는 연관된 확률변수 간에 서로 독립이라는 가정을 함으로써 더 쉽게 베이즈 추론을 할 수 있게 됩니다. 이제 '나이브(Naive)'라는 단어를 왜 쓰는지 알 수 있습니다. 말 그대로 정석적인 베이즈 추론이 아닌, '좀 더 간편한' 베이즈 추론을 이용해서 클래스를 분류할 것이기 때문에 "나이브 베이즈 분류기"라는 단어를 사용합니다.

 

'나이브' 베이즈 정리를 다시 쓰면 다음과 같습니다.

 

 

학습용 데이터를 이용해 우도와 사전확률을 추론할 수 있으며, P(X)는 각 확률분포 or 클래스 Y에 따른 P(X|Y)P(Y)들의 합으로 구할 수 있습니다. 사실 2번 파트에서 설명한 것과 같이, 우열 비교만 하기 위해선 P(X) 계산이 필요없을 수도 있습니다.

 

6. 라플라스 스무딩 (Laplace Smoothing)

 

이제 우리가 스팸 메일과 일반 메일을 분류하는 나이브 베이즈 분류기를 만들고 훈련했다고 합시다. 이때 나이브 베이즈 분류기의 훈련에 사용된 데이터는 주로 '대출', '담보', '보험' 같은 금융 관련 단어가 많이 들어간 스팸 메일이라고 합시다.

 

이제 어떤 메일이 스팸인지 아닌지를 확인하기 위해 이 분류기에 그 내용을 넣어봤다고 합시다. 이 메일은 '오빠', '하루밤' 같은 성인 광고 관련 단어가 많이 들어간 스팸 메일입니다. 그럼 이 분류기는 해당 메일을 스팸이라고 분류할까요? 아마 아닐 가능성이 큽니다. 우리의 분류기는 주로 금융 스팸 메일로 훈련되었기 때문입니다. 그러나 그렇다고 해서 해당 메일이 정상 메일인 것도 아닙니다.

 

즉, 훈련에 주로 사용된 데이터가 들어왔을 땐 분류기가 잘 작동하지만, 훈련 데이터에 없던 값이 들어오거나 이상값이 들어올 경우 그에 대한 우도가 0이 되어, 정상적인 분류가 되지 않을 때가 있습니다. 이런 경우를 막기 위해 사용되는 방법이 라플라스 스무딩(Laplace smoothing)입니다. 라플라스 스무딩의 수식은 다음과 같습니다.

 

 

가중치 α를 이용하여 스무딩의 정도를 정합니다. α는 주로 0.5 또는 1을 사용합니다. 이 라플라스 스무딩을 이용하면 이제 특정 특징 X에 대한 우도가 0이 될 일이 없어집니다. 예를 들어 수식을 설명해보겠습니다.

 

훈련 데이터에 사용된 스팸 메일 중 '오빠'라는 단어가 들어간 메일이 있을 확률, 즉 우도는 다음과 같습니다.

 

 

이때, 위 상황은 훈련 데이터 중 '오빠'가 들어간 스팸 메일 수가 0이기 때문에 P(X=오빠|Y=spam) = 0이라는 것입니다. 여기에 라플라스 스무딩을 적용해보면 다음과 같습니다.

 

 

즉, 스팸 메일이든 일반 메일이든 상관없이 '오빠'라는 단어가 들어간 메일을 2α개 읽었다고 가정하는 것입니다. 그리고 그 메일은 스팸 메일 (ex. 오늘밤 '오빠'와 함께...) α개, 일반 메일 (ex. '오빠'가 오늘 사올 물건 목록...) α개로 구성되기 때문에 분자에는 α, 분모에는 2α가 더해집니다.

 

구체적인 숫자를 넣어서 생각하면 이해가 더 쉽습니다. 처음엔 P(X=오빠|Y=spam) = 0/98 = 0이라고 합시다. 이때 α=1인 라플라스 스무딩을 적용하면  P(X=오빠|Y=spam) = (0+1)/(98+2*1)=1/100 = 0.01이 됩니다.

 

그러나 라플라스 스무딩을 적용 후에도 우리의 나이브 베이즈 분류기는 '오빠'라는 단어가 들어간 메일이 스팸 메일일 확률이 0.01밖에 되지 않는다고 합니다. 그럼에도 불구하고 해당 메일이 스팸 메일이라고 분류될 가능성을 조금이라도 증가시킨다는 점에서 라플라스 스무딩은 사용 가치가 있습니다. 또한 실제 성인 광고 스팸 메일에선 '오빠'라는 단어 이외에도 더 많은 관련 단어가 사용되기에, 이를 고려하면 라플라스 스무딩은 나이브 베이즈 분류기 설계에 있어서 더욱 필요한 지식으로 생각됩니다.

 

7. 나이브 베이즈 분류기의 특징

 

지금까지 살펴본 나이브 베이즈 분류기의 특징은 다음과 같습니다. 

 

장점

- 결과 도출을 위해 조건부 확률(우도, 사후확률)만 계산하면 되므로, 간단하고 계산량이 적어 빠른 모델입니다.

- 큰 데이터셋에 적합하지만, 작은 데이터셋으로도 충분히 훈련시킬 수 있습니다.

- 다중 클래스(multiple class) 예측을 위해서도 사용할 수 있습니다. (ex. 2번 파트에서 살펴봤던 1,2,3번 병 예시)

 

단점

- 나이브 가정을 만족하기 위해선 특징 간의 독립성이 어느 정도 있어야 합니다.

- 연속형보다 이산형 데이터에서 성능이 좋습니다. (ex. 스팸 vs 일반)

 

참고 문헌

: 오일석, <기계 학습>, P.95-101, 한빛아카데미, 2018

https://ybigta-data-science.readthedocs.io/en/latest/6_Data_Science_from_Scratch/03_Naive%20Bayes%20Classifier/

https://exmemory.tistory.com/53

반응형