당당한 기계학습

나이브 베이즈 분류 (Naive Bayes Classification)

당당한하수 2021. 2. 2. 11:00

베이지안 분류기(Bayesian classifier)는 베이즈 정리(Bayes Theorem)를 기반으로 한 통계적 분류기이다.

 

그림. 베이지안 분류 예시

위의 예시와 같이 데이터가 주어지면, 각 클래스에 속할 확률을 계산한다. 그리고 주어진 데이터에 대해서 가장 높은 확률을 가지는 클래스로 분류한다.

 

베이즈 정리는 사후 확률(posterior probability)과 사전 확률(prior probability) 사이의 관계를 나타낸다.

  • $P(H|X) = { {P(X|H)P(H)} \over {P(X)}}$

위의 식은 베이즈 정리를 나타낸다.

X의 위치에는 일반적으로 데이터가 들어가고, H는 우리가 알고 싶어 하는 가설을 나타낸다.

  • 예시) P(부자일 것이다 | 자동차 = 람보르기니)

이때, P(부자일 것이다) 혹은 P(자동차=람보르기니)와 같이 조건이 없는 확률을 사전 확률이라고 하고,
P(부자일 것이다 | 자동차=람보르기니)와 같이 조건이 있는 확률을 사후 확률이라고 한다.

 

 

 

나이브 베이지안 분류기는 베이지안 분류기 중의 한 종류이다.

  • $P(C_i | X) > P(C_j | X) \ \ \ for \ 1 \leq j \leq m, j \neq i$
  • $m$은 class의 개수

위의 식은 앞에서 말한 것과 동일한 내용을 수식적으로 나타낸 것이다.

간단히 설명하면, 주어진 데이터 X에 대해 발생 확률이 가장 높은 클래스를 찾는 과정이라고 보면 된다.

 

아래와 같은 데이터가 주어지고,  P(부자이다 | 자동차 = 람보르기니)라는 확률을 계산해보자.

  부자인가?
자동차 아니오
현대차 10 20
람보르기니 30 0

베이즈 정리에 따라서, 우리는 세 개의 값을 알면 계산 가능한다. 

  • P(부자 | 람보르기니) = P(람보르기니 | 부자)*P(부자) / P(람보르기니)
  • P(부자)
  • P(람보르기니)
  • P(람보르기니|부자)

전체 60명 중에 부자는 40명이므로 P(부자) = 40/60 이 된다. 마찬가지로, 전체 60명 중에 람보르기니 차를 소유한 사람은 30명이므로 P(람보르기니) = 30/60이 된다. P(람보르기니 | 부자)는 부자(40명) 중에서 30명이 람보르기니를 가지고 있으므로 30/40이 된다.

위의 값을 사용하여 계산하면 P(부자 | 람보르기니) = 1이 된다.

 

 

 

데이터가 가지는 속성이 한 개 일 때는 쉽게 문제가 풀린다. 하지만 복수 개의 속성을 가지는 데이터에 대해서는 조금 더 고려할 사항이 있다.

  부자인가?
집의 소유 여부 아니오
자가 10 10
전세 30 10

 

만약에 데이터를 구성하는 속성이 두 개 이상을 가진다면, 속성 사이의 관계는 조건부 독립이라고 가정하고 아래와 같이 계산한다.(참조: 확률 연산)

  • $P(X|C_i) = \prod_{k=1}^n {P(x_k | C_i)}$
  • $=P(x_1 | C_i) \times P(x_2 | C_i) \times ... \times P(x_n | C_i)$

예를 들어 P(부자 | 전세, 현대차)를 계산한다고 해보자.

위 예시의 해석은 집이 전세이고 차는 현대차를 가지고 있는 사람이 부자일 확률을 의미한다.

 

마찬가지로, 베이즈 정리에 따라서 아래의 세 가지 값을 알면 확률을 계산할 수 있다.

  • P(전세, 현대차), P(부자), P(전세, 현대차 | 부자)

여기서, 우리가 결론적으로 알고자 하는 값은 (전세, 현대차)인 사람이 부자인지 아닌 지이다.
즉, P(부자이다 | 전세, 현대차)의 확률과 P(부자아니다 | 전세, 현대차) 확률 중에 더 큰 값을 가지는 클래스를 선택하면 된다.
그렇기 때문에, P(전세, 현대차)의 값은 계산할 필요가 없다. 왜냐하면 각 클래스에 대해 계산할 때, 동일하게 분모에 들어가는 값이므로 대소 비교에 영향을 주지 않는 상수로 볼 수 있다.

  • P(부자) -> 계산 가능
  • P(전세, 현대차) -> 모든 클래스에 대해서 동일한 값을 가지므로 대소 비교 시 의미가 없음. 상수이므로 계산 생략
  • P(전세, 현대차 | 부자) * P(부자)  vs. P(전세, 현대차 | 부자X) * P(부자X) 를 계산하여 대소 비교를 통해 클래스 추론 가능. 

P(전세, 현대차 | 부자)는 조건부 독립을 가정하므로 아래와 같이 계산 가능하다.

  • P(전세, 현대차 | 부자) = P(전세 | 부자) * P(현대차 | 부자)

계산은 표를 참조하면 간단히 가능하니 생략하려고 했으나, 귀찮을 수 있으니 해봅니다.

  • P(전세, 현대차 | 부자) * P(부자) = 0.19 * 0.67 = 0.13
    • P(전세, 현대차 | 부자) = P(전세|부자) * P(현대차|부자) = 30/40 * 10/40 = 0.19
    • P(부자) = 40/60 = 0.67
  • P(전세, 현대차 | 부자X) * P(부자X) = 0.5 * 0.33 = 0.17
    • P(전세, 현대차 | 부자X) = P(전세|부자X) * P(현대차|부자X) = 10/20 * 20/20 = 0.5
    • P(부자X) = 20/60 = 0.33

이므로, 위 데이터로 만든 분류기에서는 전세를 살면서 현대차를 타는 사람은 부자가 아니라고 분류된다.

 

 

* 추가로 알면 좋은 사항

라플라시안 스무딩(Laplacian smoothing)

P(부자X | 람보르기니, 자가)라는 값을 확률로 계산해보면,

P(람보르기니 | 부자X) * P(자가 | 부자X) 를 계산하게 되는데, 이때 부자가 아니면서 람보르기니를 타는 데이터가 없기 때문에 해당 확률 값은 0을 가진다. 다른 속성이 아무리 "부자가 아니다"라는 가설과 상관관계가 높다고 하더라도, 하나의 속성이 0 값을 가지게 되면 최종적으로 확률이 0이 되는 문제가 있다.
예) 빚이라는 속성이 있고, 그 값이 10억을 가진다고 하더라도 람보르기니가 있으면 부자가 아닐 확률은 0이 된다. 고로 빚이 많은 사람이 부자라고 분류되는 것이다. 

이러한 부분을 보정하기 위해서, 모든 속성의 값에 작은 값 $\alpha$를 더해주는데 이러한 과정을 라플라시안 스무딩이라고 한다.(일반적으로 1을 더해준다)

 

일반적인 장점과 단점

 

장점

  • 계산이 편하다.
  • 성능이 꽤 잘 나온다.
  • 큰 데이터에도 사용 가능하다.

단점

  • 속성이 상관관계를 가질 때는 사용하지 않는 것이 좋을 수 있다.