본문 바로가기
머신러닝

Naive Bayes Classifier

by 볼록티 2020. 10. 18.
728x90
반응형

 

나이브 베이즈는 확률기반 분류 보델 중에 하나이다. 그 중 단순한 축에 속한다. 알고리즘 이름에서 유추할 수 있듯이 Bayes' theorem 을 활용한다.

Bayes' theorem 는 아래와 같다.

Bayes' theorem

확률 변수 A와 B를 볼 수 있다. 그리고 P(A), P(B)를 각각 A에 대한 prior, B에 대한 prior 라고 한다. A,B에 대한 정보가 서로 없는 상태에서의 확률을 의미한다.

조건부확률 P(A|B) 는 B가 일어난다 가정했을 때, A가 일어날 확률이다. 그리고 분자에 P(B|A)는 A가 일어났다는 가정하에서 B가 일어날 확률이다. 

 위의 식은 아래와 같이 조건부확률로 쉽게 전개할 수 있다.

 

이러한 단순한 베이즈 이론을 어디에 쓸 수 있는가? 반대의 경우에 사용한다. P(A|B) 가 있으면 역으로 A가 일어났을 때 B가 일어났을 확률 같은걸 말한다.

 

 

아래의 예시를 보고 확실하게 이해를 해보자. 이 예시는 약물을 먹었는지를 탐지하는 실험으로 실제 약물을 먹었는지 안먹었는지를 판단한 실험 결과이다.

99%의 민감도와 99%의 특이도가 있다고 가정하자. 먼저 민감도(sensitivity)는 실제로 positive인 사람들중에서 예측을 positive다 라고 한 비율이며 이 값이 99% 라고 한다.

그리고 특이도(specificity)는 실제로 negative인 사람들 중에서 예측을 negative라고 한 비율이며 이값 또한 99% 라고 한다.

그리고 실제로 약물을 먹은 사람은 전체 사람들 중에 0.5 % 의 비율이다.

 아래의 그림은 좀 더 보기 쉽게 도식화한 그림이다.

 + 가 의미하는 것은 양성반응(positive)이고, - 가 의미하는 것은 음성반응(negative)이다. U 는 양성판정 받은 사람을 말하고, U' 는 음성판정 받은 사람을 말한다. 

 민감도와 특이도는 아래의 그림으로 보면 각각 P(+|U), P(-|U') 이다.

 

 

Q) 만약에 임의로 한명을 뽑아 검사하니 positive 양성 반응이 나왔을 때, 그 사람이 실제로 약물을 먹었을 확률은?

 

 

 우리는 민감도와 특이도를 알고 있다. 즉 양성을 잡아낼 수 있는 확률, 음성을 잡아낼 수 있는 확률을 말하는데,

이 문제는 P(U|+)를 계산해야 한다.

 우선 P(U)와 P(+|U)는 문제에 이미 주어져 있기 때문에 5%라는 것과 99%라는 값을 집어 넣으면 된다. 그렇다면 P(+) 는 어떻게 구할까? 여기서 P(+)를 민감도와 헷갈리면 안된다. 그냥 positive인 확률이라고 생각해버리기 십상이기 때문이다.

 

전확률 법칙을 활용한다.

 

전확률법칙

A라는 사건이 일어날 확률은 A라는 사건이 있기전에 있을 수 있는 모든 사건들을 고려해야한다고 생각하면 된다. 위의 P(+)를 생각해보면, 실제 약물은 먹은 사람이 양성이거나 실제 약물은 안먹은 사람이 양성인 모든 경우의 수를 고려하란 말이다.

 

 이후에 죽죽죽 계산을 하게 되면 33.2 %라는 다소 낮은 답을 얻게 되는데, 우리는 처음에 민감도 99%, 특이도 99% 라는 높은 확률을 얻었지만 왜 이렇게 낮지? 라는 의문이 들 수 있다. 

 인구 중에 실제로 약물을 먹은 사람의 비율 자체가 0.5%로 매우 낮기 때문이다.

확장해보면 희귀병 같은 경우에는 실제로 양성판정을 내렸을 지라도 오판일 가능성이 꽤 높아 여러번 검사하는 경우도 있다.

 

 

 

베이즈 이론에 대해 알아보았으니 나이브 베이즈 분류기를 위한 조건부 확률 모델을 살펴보자. 

나이브 베이즈 분류기는 모든 class에 대한 확률을 계산하게 된다.

 

아래를 보면 $C_{k}$ 는 class label 중에 k 번째 class를 말하고, $x_{i}$는 각 독립변수를 말한다. $\mathbf{x}$는 벡터로 표현한 것. 즉 좌항은 각 변수가 일어날 때 class k일 확률을 말한다.

모든 k에 대한 $\mathbf{x}$를 구했으면, 그 중에서 가장 가능성이 높은 class k로 할당하면 된다. 여기서는 그냥 한 클래스 k에 대한 확률을 구하는 것을 나타낸다.

 아무튼 우리가 모델링을 해야하는 것은 $p(C_{k}|x)$ 이다.

그렇기 때문에  $p(C_{k}|x)$ 식을 다시 베이즈 이론을 통해서 나타내면 아래의 식처럼 표현이 가능하다. 

그리고 위의 각 term 들은 아래의 이름으로 불리게 된다. 한글로 하면 $사후확률 = \frac{사전확률 \times 가능도}{증거}$ 와 같다.

사전확률은 input에 대한 정보가 없을 때, 개별 클래스에 대한 분포라고 생각하면 된다. 예를 들어 어떤 a클래스에서 ㄱ는 60%의 분포를 가진다, ㄴ는 20%의 분포를 가진다, ㄷ는 20%의 분포를 가진다  뭐 이렇게 해서 0.6, 0.2, 0.2 이런식의 확률이 사전확률이 된다.

 likelihood(우도, 가능도)는 뭐냐면은, 특정 확률 분포가 고정되어 있을 때, 어떤 데이터를 관찰하게 되는 확률이다. 확률 기반의 분류 문제에서 가정하고 있는 것은 개별 클래스마다 분포가 있다는 것이다. class a에서 분포, class b에서의 분포 등이 주어졌을 때, 특정 class 이다 라는 것이 주어진 상황에서 어떤 $\mathbf{x}$를 보게 되는 가능성이다.

 evidendce(증거, marginal distrubution)은 특정 $\mathbf{x}$를 보게 될(샘플을 보게 될) 확률을 말한다.

 사전확률은 $\mathbf{x}$에 대한 정보가 없는 상황에서의 확률을 의미하는 것이고, 사후확률은 어떤 증거를 관찰($\mathbf{x}$)했으면, 여러개의 클래스가 분포가 다르다고 하면 클래스 별로 특정 $\mathbf{x}$를 보게될 가능성(가능도)도 달라질 것이고, $\mathbf{x}$를 관찰하는 순간 개별클래스에 대한 확률도 달라지게 된다. 그래서 어떤 증거를 관찰한 이후에 클래스에 대한 확률이라고 해서 사후확률이라고 한다.

 

class k에 할당할 확률 $p(C_{k}|\mathbf{x})$는 $\mathbf{x}$를 관찰해서 클래스 분포를 보고 가장 확률이 높은 클래스를 할당하게 된다고 했다. 위에 베이즈 이론으로 사후확률을 다시 정리했는데, 왜 여기서 evidence가 빠졌냐 하면, 클래스를 결정하는데 영향을 주지 않기 때문이다. 모든 클래스에 대해서 동일한 값으로 나누어 주기 때문이다.

 

그래서 evidence를 빼고 나서 보면 우리는 원래 좌항에 있는 사후확률을 알고 싶었고, 결과적으로는 우항에 있는 값을 계산하는 문제로 변형이 된다.

 

요 아래식을 전개함으로써 $P(C_{k}) P(\mathbf{x}|C_{k})$ 가 join probability $P(C_{k}, x_{1},...,x_{p})$를 계산하는 것과 동일하다.

 

결과적으로  $P(C_{k}, x_{1},...,x_{p})$를 모델링 하면 $P(C_{k}) P(\mathbf{x}|C_{k})$ 를 아는 것과 동일해지게 된다.

 

그리하여 Chain Rule에 의해서 조건부확률의 곱으로 정리할 수 있다.

 

 

여기까지는 모든 join probability에 대해서느 항상 참이다. 어떤 가정이 필요없고, 항상 chain rule에 의해서 조건부확률 곱으로 표현이 된다.

이렇게 조건부 확률로 표현이 되는데, 나이브 분류기가 여기서 가정을 하게 된다.

모든 설명변수들은 전부 독립이다. 독립이면 나타나는 특징은 P(A,B) = P(A)P(B)가 있고, 또 P(A|B) = P(A)가 있다.

이 가정을 놓고 보면 위에 Chain rule에서 복잡했던 부분이 대폭 축소될 수 있다. 

 

나이브 베이즈 분류기 가정

 

 

아래는 join probability가 조건부확률의 연쇄작용으로 계속 조건부확률과 prior probability의 곱으로 쪼개지는 과정을 거쳐 분해될 수 있는 식을 보여주는 것이다.

 

 

나이브 베이즈 분류기의 가정을 가져오면 아래의 식처럼 길었던 $C_{k}$의 뒤에 확률변수들이 없어진 것을 볼 수 있다.  없어지게 되면 각각 조건부확률은 전체 결합확률에 비해 추정해야하는 파라미터의 수가 줄어든다. 쉽게 말해 결합확률을 구하는 식을 줄여준다. 

 모든 설명변수들이 클래스에만 영향을 받도록 단순하게 만든다. product 를 활용해 간단해진 것을 볼 수 있다.

 

 

나이브베이즈 가정을 이용한 joint probability의 simply

우리가 가지고 있는 데이터 셋을 가지고 위의 식대로 각 class별로 모든 변수들과의 확률을 구해서 해당 class의 확률을 뽑아 내게 되면 새로운 샘플이 들어왔을 때, 해당 x에다가 넣으면 class 별로 확률 값을 알 수 있고, 그 확률 값들 중 가장 큰 값을 가진 class를 새로운 샘플에 할당하면 된다.

 

베이지안 분류기 클래스 할당 하는 방법.

 

어떤 형태의 모양의 함수인지는 이제 결정이 되었고, 다른 알고리즘과 마찬가지로 데이터를 기반으로 가장 알맞은 함수를 찾아주어야 한다. 그래서 parameter estimation 과정을 거치게 된다.

나이브 베이즈 분류기는 prior를 추정하게 된다. 

 

그래서 하나의 class에 대한 prior를 세팅하는데 두가지 방법이 있다.

먼저 equiprobable classes로써 $p(C_{k}) = 1/K$로 하는 방법과 학습 데이터 셋으로부터의 class의 확률에 대한 추정으로써 $p(C_{k}) = n_{k} / n )$ 이 있다. 

 여기서 $n_{k}$는 $n$이라는 데이터 개수에 대한 class의 비율값이다.

 

 세팅이 끝나면, $p(c_{i}|C_{k})$ 에 대한 적절한 확률 분포를 골라야 한다. 양적 변수의 경우 가우시안 분포, 범주형 변수들에 대해서는 multinomial 분포가 주로 사용된다.

 

 그런다음 parameter를 추정한다. 

 

j번째 샘플에 대한 posterior를 구하고,

전부다 계산 한다음에 이 확률을 최대화한다. 그리고 가장 max인 class를 할당하면 된다.

 

 

예를 들어, 만약 변수가 이산형이고 class가 2개이면 베르누이 분포를 추정하면 된다.

 multivariate Bernoulli 모델의 경우 모든 변수들은 서로 독립이다.

 베르누이 나이브 베이즈는 모든 설명 변수가 이진변수인 경우에 사용이 된다. 아래의 확률은 베르누이 확률 값을 사용하는 것을 알 수 있다.

Bernoulli Naive Bayes model' likelihood 
prior probability

 

최종적으로 posterior probability는 아래와 같은 비례식이 성립하게 된다.

 

그리고 아래의 수식처럼 전체 n개에 대한 likelyhood function을 최대화 한다. likelyhood function에 로그를 취함. 이 후에 p

 

 

 

각 class별로 각 변수별로 1을 보게될 $p_{ki}$를 구하면 된다. 이것은 미분을 통해서 구하게 된다. 전체 로그 가능도에서 파라미터별로 편미분을해서 0이되도록 셋팅을 하면 된다. 

 

k 샘플들을 가져오고 i 번째 변수들 중에서 1인 데이터의 개수를 세서 비를 구하면 된다. 이를 예제를 통해 보면 아래와 같다.

 

먼저 k가 0인 $C_{k}$에 대해 추정을 하고 싶다면, 0번 클래스에 대한 것을 선택한다(빨간박스). class별(0과 1)로 1의 개수 비를 구하고 1에서 뺀 값을 나머지 class의 확률로 추정하느 ㄴ것이다. 

 

이번에는 multinomial 분포를 사용해야하는 경우, Discrete random variables를 보면 outcome이 여러개이기 때문에 여기서는 outcome이 High, Mid, Low일 확률을 각각 구하면 된다.

0 번 class에 대한 데이터만 있기 때문에 특정 변수가 3개 이상의 카테고리를 가지고 있다. 그러면 전과 마찬가지로 각 해당 class에 해당하는 카테고리를 하나씩 가져와 개수 비를 구해주면 된다.

 

 

 

 

 

 

 

728x90
반응형

'머신러닝' 카테고리의 다른 글

Support Vector Machine(1)  (0) 2020.10.18
Graphical Model  (0) 2020.10.18
Ridge and Lasso Regression  (0) 2020.10.17
regression  (0) 2020.10.17
Clustering  (0) 2020.10.17

댓글