이번 포스팅에선 Naive Bayes, 나이브 베이즈 분류의 이론적인 면에 대해서 정리해보고자 한다. 참고한 자료는 수업시간에 배운 내용인데, 출처는 아래 책이다.
코드와 이미지 또한 출처가 명시되어 있지 않다면 책에서 제공하는 파이썬 코드를 사용했음을 명시한다.
Bayes 확률론

베이즈 정리는 고등학교 수학 시간에 조건부 확률을 배우면서 등장하는 이론이다. 수학자 베이즈가 정리한 이론이어서 이러한 이름이 붙었다. 워낙 유명해서 자세한 설명은 건너뛰고, Posterior 와 Prior 의 개념만 짚고 넘어가고 싶다. Posterior는 우리말로 사후 확률, Prior는 사전 확률을 의미한다. Bayes 확률론으로 어떤 데이터에 대해 분류를 실행하고 싶다면, 우선 데이터셋의 predictor들이 모두 categorical한 값인지 확인해주어야 한다. Numerical 한 변수들은 반드시 Data Binning 이란 작업을 거쳐서 categorical 하게 바꿔줘야 한다. Numerical 한 변수들을 확률로 처리하기가 불가능하기 때문이다.

Bayes 확률론으로 Classifier를 만들 때 생기는 문제
다음과 같은 데이터셋에서 Bayes 확률론을 통해 classifier를 만든다고 가정해보자.
delays_df = dmba.load_data('FlightDelays.csv')
delays_df.head()

현재는 variable이 반응 변수인 Flight Status를 제외하면 12개 정도가 된다. 이 중에서 유의미한 Predictor는 총 5개, 'DAY_WEEK', 'CRS_DEP_TIME', 'ORIGIN', 'DEST', 'CARRIER' 를 꼽을 수가 있다. 이 데이터셋을 Bayes 확률 정리를 통해 classifier를 만들었다고 가정하자. 이제 새로운 데이터셋 혹은 테스트셋으로 이 분류기를 테스트해보려고 한다. 그런데, Predictor의 순서대로 "11, 1540, IAD, JFK, OH" 를 분류하려는 순간, 이 5개 조건과 똑같은 데이터가 존재하지 않음을 발견했다. 조건부 확률을 따지는 베이즈 확률론의 특성상, 새로운 데이터가 갖고 있는 데이터셋에 일치하는 데이터가 없다면, Flight Status가 ontime 일지 delayed 일지 그 확률을 알려줄 수가 없다.
위 데이터셋에선 Predictor로 5개만 사용했지만, 만약 10개, 100개를 사용한다면? 그 수가 커지면 커질수록 정확하게 일치하는 경우를 찾기 힘들 것이다.
따라서 일반적인 Bayes 확률론이 아닌, Naive Bayes 확률론을 통하여 Classifier를 만드는 것이다. 그리고 일반적인 Bayes 확률론은 Exact Bayes 라고 부른다.
Naive Bayes 확률론과 Classifier
Naive Bayes 확률론을 설명하기 전, 아주 중요한 가정이 하나 있다. 바로 모든 Predictor 들은 서로 독립이어야 한다는 점이다. 서로 독립이 아니라면 선형 회귀의 Co-linearity, 즉 공분산성이 있을 때 성능 저하가 나타나는 것과 똑같은 안 좋은 현상이 나타날 수 있다.
그러면 이제 Naive Bayes 확률론이 무엇인지 살펴보자. 그 이름에서 짐작할 수 있듯, Naive Bayes는 대략적으로 그 결과를 추론한다는 점에서 Exact Bayes와 차이가 있다. 정확하게 Naive Bayes를 설명하려면 그 기초가 되는 단계별로 하나하나 짚고 넘어가는 것이 좋을 것 같다.
1단계
이미 갖고 있는 데이터셋 $(x_{i}, c_{i} ), i=1, …, n$ 에서 새로운 데이터가 하나 들어왔다고 가정하자. 그 데이터의 확률을 추론하기 위해 아래와 같은 Bayes 적인 접근을 시도할 수 있다.

여기서 MAP은 Maximum a Posterior를 의미하는고,
따라서 어떤 새로운 데이터를 분류할 때, 우리가 고려해야 하는 것은
2단계

1단계에서 Naive Bayes 의 가장 중요한 가정이 모든 Predictor들은 상호 독립어야 한다는 점을 짚고 넘어갔다. 여기서 독립인 점이 중요한 이유가 나온다.
핵심은, Exact Bayes와는 다르게
예제

짧은 예제 하나를 살펴보고 마치려 한다. 위와 같은 상황에서, $P(fraud | charges=y, size=small)
이번엔 Naive Bayes를 사용해서 확률을 구해보자.
따라서 최종적으로
이렇게 Naive Bayes를 이용해 계산상의 이점, 그리고 Predictor가 늘어날수록 Exact Bayes 에 비해 갖는 이점에 대해 알아보았다. 나중에 기회가 된다면 파이썬 코드로 직접 Naive Bayes Classifier를 사용해보려고 한다.
'머신러닝' 카테고리의 다른 글
클러스터링 정리 (K-Means, 계층적 군집화, DBSCAN) (0) | 2023.10.17 |
---|---|
머신러닝 - 분류모델 평가지표 (Precision, Recall, Accuracy) + 1종, 2종오류 정리 (0) | 2023.07.15 |
머신러닝 - Regularization 과 LASSO, Ridge 정리 (0) | 2023.06.09 |
머신러닝 - Bootstrap 정리 with 중심극한정리, R (2) | 2023.05.31 |
머신러닝 - 차원 축소와 PCA (3) (0) | 2023.04.15 |