쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification)

    ※ 베이즈 정리를 모르는 분들은 나이브 베이즈를 알기에 앞서 베이즈 정리에 대해서 먼저 이해해야 한다.

     

    확률의 함정을 간파, 베이즈 정리(Bayes' Theorem)

     

    확률의 함정을 간파, 베이즈 정리(Bayes' Theorem)

    베이즈 정리는 일반인들이 알고 있던 통계의 지식을 무너트리는 역할을 한다. 물리학도가 양자역학의 개념을 배울 때 새로운 신세계가 열리는 것처럼 통계에서 베이즈가 그런 역할을 하는 것

    needjarvis.tistory.com

     

    나이브 베이즈(Naïve Bayes Classification)의 개념

    - 데이터가 각 클래스에 속할 특징 확률을 계산하는 조건부 확률 기반의 분류 방법이다.

    - 나이브(Naïve) : 예측한 특징이 상호 독립적이라는 가정 하에 확률 계산을 단순화, 나이브라는 의미는 순진하다라는 뜻을 담고 있으며 모든 변수(특징)들이 동등하다는 것을 의미한다.

    - 베이즈(Bayes) : 입력 특징이 클래스 전체의 확률 분포 대비 특정 클래스에 속할 확률을 베이즈 정리를 기반으로 계산

    말이 거창해보이지만 쉽게 생각해서 사건 B가 주어졌을 때 사건 A가 일어날 확률인 P(A|B), 조건부 확률과 베이즈 정리를 이용한 분류기라 생각하면 된다. 이때 모든 변수는 동등한 값을 가지기 때문에 머신러닝에서 자주 활용되는 특징에 가중치를 주는 행위는 나이브 베이즈 알고리즘을 변형한 다른 알고리즘이라 생각하면 된다.

     

    나이브 베이즈의 장단점

    나이브 베이즈의 장점

    - 간단하고 빠르며 효율적인 알고리즘이다.
    - 잡음과 누락 데이터를 잘 처리한다.
    - 훈련을 할 때 데이터의 크기에 상관 없이 잘 동작한다.
    - 예측을 위한 추정 확률을 쉽게 얻을 수 있다.

     

     

    나이브 베이즈의 단점

    - 모든 특징이 동등하게 중요하고, 독립이라는 가정이 잘못된 경우가 자주 있다. (ex: 텍스트의 단어들, 일기예보를 할 때 습도와 같은 중요한 특징을 다른 특징과 동등하다 판단)
    - 수치 특징이 많은 데이터셋에는 이상적이지 않다. 
    - 추정된 확률이 예측된 클래스보다 덜 신뢰할만하다.

     

    모든 특징이 동등한 것이기 때문에 나이브란 말이 들어갔지만, 요즘에는 이런 약점들을 보완하고자 나이브 베이즈 특징에 가중치를 준 개념들이 나오게 된다. 그러나, 나이브라는 것이 내포한 의미가 동등하다, 독립적이다라는 것을 가지고 있기에 나이브 베이즈에 독립적과 동등하다의 개념을 빼버리고 만든 베이즈 분류기는 "나이브"가 빠진 다른 베이즈 알고리즘 명칭이 되어야 옳을 것이다.

    이 말은 마치 손님들에게 "매운 라면"을 내줬는데 손님들이 매운 라면이 왜 안 매워요?라고 물어보니 요리사 왈 "손님들이 매운 라면이 너무 맵다고 해서 매운 라면을 맵지 않게 했습니다"라고 하는 것과 같은 상황이라 생각한다. 그러나, 나이브 베이즈를 대체할만한 베이즈 분류기의 말이 딱히 떠오르지 않고 나이브 베이즈가 마치 대단한 머신러닝인것 마냥 일반인들이 들었을 때 있어 보이기 때문에 대체 용어가 없어 보인다.

    - 어디까지나 필자 생각 -

     

    나이브 베이즈의 활용 방안 (사용 예시)

    스팸 필터링

    - 대중적으로 나이브베이즈의 활용에 가장 많이 알려진 것이 스팸 필터링이다.

    - 이진 분류(binary classification)

     

    비정상적인 상황 감지

    - 컴퓨터 네트워크 침입이나 비정상 행위 등을 탐지

    - 이진 분류(binary classification)

     

    의학적 질병 진단

    - 종양의 크기, 환자의 나이 등등을 여부로 암 여부를 진단하는 등의 질병을 진단할 수 있음

    - 이진 분류(binary classification)

     

    문서 분류

    - 문서 데이터를 읽고, 스포츠, 정치, 연예 등의 문서로 분류

    - 다중 분류(multi-class classification)

     

     

    나이브 베이즈 보정

    라플라스 스무딩(Laplace Smoothing)

    특징이 무조건 있는 값에는 적용될리 없겠지만, 다중 분류 모델에서 값이 0이 되는 경우가 있다. 문서를 읽고 다중 분류를 한다고 가정을 해보자. 이때 class로 연예, 스포츠, 뉴스, 정치가 있는데 kpop이란 단어가 연예, 뉴스, 스포츠가 등장했지만 정치에 등장하지 않았다 가정해보자.

     

    특히, tf-idf 등을 써서 클래스별 단어의 중요도를 뽑게 되면 이러한 현상이 더욱 발생하게 된다. 그렇다고 클래스별 중요도를 무시하고 뽑는다면 아무런 의미없는 단어가 나올지도 모른다. 

     

    문제는 0이란 수는 모든 곱셈과 나눗셈을 무력화 시키는 값이라는 것이다. 그 전에 아무리 의미있는 값이 도출된다 하더라도 마지막에 0을 곱해버리면 값은 0이 나온다. 이런 경우가 상당히 빈번하기 때문에 값을 0이 아닌 최소값(1회 등장)으로 보정을 하게 되는데 이를 라플라스 스무딩이라 한다.

     

    언더플로우(Underflow) 현상

    확률이라는 것은 항상 1보다 작은 값을 갖고 나이브 베이즈는 이 모든 확률들을 곱하기 때문에 조건부 확률이 너무 작아져서 비교가 불가능한 현상이 발생하게 된다.

     

    예시

    0.00000000000134 * 0.00000000002341

    위와 같은 예시를 곱하게 되면 너무 낮은 숫자가 나오게 된다. 이를 방지하기 위해 값에다 로그를 취한 후 연산을 적용하기도 한다.

     

    즉, 라플라스 스무딩과 언더플로우 현상은 연산이 도저히 안되는 상황에 보정을 하는 것이다.

     

    나이브 베이즈의 알고리즘

    - N개의 특징(독립변수)을 나타내는 벡터 x = (x1,...,xn)로 표현되며, 나이브 베이즈 분류기는 이 벡터를 이용해서 k개의 가능한 확률적 결과를 구하는 의미이다. 

     

    대표적인 예제, 날씨별 테니스 가능여부

    no outlook temperature humidity windy play tennis
    1 sunny hot high False no
    2 sunny hot high True no
    3 overcast hot high False yes
    4 rainy mild high False yes
    5 rainy cool normal False yes
    6 rainy cool normal True no
    7 overcast cool normal True yes
    8 sunny mild high False no
    9 sunny cool normal False yes
    10 rainy mild normal False yes
    11 sunny mild normal True yes
    12 overcast mild high True yes
    13 overcast hot normal False yes
    14 rainy mild high True no

     

    위 예시는 머신러닝에서 많이 사용하는 예시로 날씨값에 따라 테니스가 가능한지 구하는 자료이다. 이 자료를 이용해서 테니스 여부를 판별해보자. 우선, 위 raw 데이터를 다음과 같이 통계형태로 압축을 한다.

     

     

    Temperature 벡터 예시

    우선 온도값을 기반으로 아래와 같이 빈도테이블을 만든다.

      Yes No
    Cool 3 1
    Hot 2 2
    Mild 4 2
    Total 9 5

    온도가 Cool이었지만 테니스를 칠 수 있던 것은 3번이고, Hot일때는 2번, Mild일때는 4번 테니스가 가능했고 각각 1,2,2회로 테니스를 칠 수 없었다. 테니스 시도 여부는 총 14회이었고, 날씨가 Cool이었던 상황은 4번, Hot도 4번 Mild는 6번이다. 

     

    사전 확률 (Temperature 별)

    P(Cool) : 4 / 14 = 0.29

    P(Hot) : 4 / 14 = 0.29

    P(Mild) : 6 / 14 = 0.43

     

    사전 확률 (Yes/No 별)

    P(No) : 5 / 14 = 0.36

    P(Yes) : 9 / 14 = 0.64

     

    우도 구하기

    P(Cool | Yes) : 3 /  9 = 0.33

    P(Cool | No) : 1 / 5 = 0.2

    P(Hot | Yes) : 2 / 9 = 0.22

    P(Hot | No) : 2 / 5 = 0.4

    P(Mild | Yes) : 4 / 9 = 0.44

    P(Mild | No) : 2 / 5 = 0.4

     

    사후 확률

    Cool이 발생했을 때 No가 발생할 사후 확률

    P(No | Cool) : P(No) P(Cool | No) / P(Cool)

    = (0.36 x 0.2) / 0.29 = 0.25

     

    Hot이 발생했을 때 No가 발생할 사후 확률

    P(No | Hot) : P(No) P(Hot | No) / P(Hot)

    = (0.36 x 0.4) / 0.29 = 0.5

     

    Mild가 발생했을 때 Yes가 발생할 사후 확률

    P(Yes | Mild) : P(Yes) P(Mild | Yes) / P(Mild)

    = (0.64 x 0.44) / 0.43 =  0.65

     

    이 포스팅에서는 temperature만 만들어 봤는데 모든 변수에 대해서 이와 같은 통계 테이블이 만들어져야 한다.

     

    문제 풀이

    Outlook = Rain, Temperature = Cool, Humidity = Normal인 경우 테니스를 칠 수 있는지 여부를 구하시오.

    나이브 베이즈는 분류별 값이 나오고 그 중 가장 높은 확률을 선택해야 한다. 위 3가지의 조건(Condition)들을 X 벡터라 하며 다음과 같이 진행을 한다.

     

    우도 계산

    P( X | No ) 

    우선 P(Temperature=Cool | No)는 위에 연산한 것처럼 0.2이고, P(Outlook=Rain | No)는 비가 왔을 때 No는 2번이기 때문에 2/5 = 0.4가 되며, P(Humidity=Normal | No)는 Normal일 때 No는 1번이기 때문에 1/5이 된다. 

    = P( X | No ) = P(Outlook=Rain | No) x P(Temperature=Cool | No) x P(Humidity=Normal | No)

    = P( X | No ) = 0.4 x 0.2 x 0.2 = 0.016

     

    P( X | Yes )

    No일때의 우도를 구했으면, Yes일때의 우도도 구해야 한다. P(Temperature=Cool | Yes)는 0.33이고, 비가 왔을 때 Yes는 3번이기 때문에 3/9 = 0.33이 되며, Humidity가 Normal일때 Yes는 6번이기 때문에 6/9 = 0.66이 된다.

    = P( X | Yes ) = P(Outlook=Rain | Yes) x P(Temperature=Cool | Yes) x P(Humidity=Normal | Yes)

    = P( X | Yes ) = 0.33 x 0.33 x 0.67 = 0.073

     

    사후 확률 계산

    사후확률 계산을 위해 우선 연산에 필요한 사전확률들을 구한다.
    P(No) = 0.36
    P(Yes) = 0.64
    P(Rain) = 0.36
    P(Cool) = 0.29
    P(Normal) = 0.5

    P( No | X )

    = P(No) P(X | No) / P(X) = 0.36 x 0.016 / (0.36 x 0.29 x 0.5)

    = 0.00576 / 0.052 = 0.1107

     

    P( Yes | X )

    = P(Yes) P(X | Yes) / P(X) = 0.64 x 0.073 / (0.36 x 0.29 x 0.5)

    = 0.04672 / 0.052 = 0.8985

     

    즉, X의 벡터를 나이브 베이즈 분류를 통해 연산을 한다면 테니스를 칠 수 있는 확률이 약 89%이고, 테니스를 칠 수 없는 확률이 약 11%가 되기 때문에 "테니스를 칠 수 있다"라고 말을 할 것이다.

     

    참고자료

    https://www.kdnuggets.com/2019/04/naive-bayes-baseline-model-machine-learning-classification-performance.html

    댓글

    Designed by JB FACTORY