** Naive Bayes Classifier란?
나이브 베이즈 분류기는 각 사건 특성들이 독립이라는 가정 하에 베이즈 정리(Bayes’ theorem)를 적용한 간단한 확률 기반 분류기다. 이는 일반적으로 결과의 확률을 추정하기 위해 많은 속성을 고려해야 하는 문제에 가장 적합하다.
베이즈 분류기는 아래와 같은 목적으로 사용된다.
- 이메일 필터링과 같은 문서 분류, 저자 식별이나 주제 분류
- 해커 검출이나 컴퓨터 네트워크에서 이상 행동 검출
- 관찰된 증상을 바탕으로 질병 진찰 등
베이즈 정리(Bayes’ Theorem)
P(A∣B)=P(B∣A)⋅P(A)P(B)
위의 식은 조건부 확률을 계산할 때 사용되는 베이즈 정리로 잘 알려져 있습니다. 여기서 P(A)는 사건 B가 발생하기 전에 사건 A에 대해 가지고 있던 사전확률입니다. 만약 사건 B가 발생한다면, 이 정보를 반영하여 사전확률 P(A)는 P(A|B)로 변경되며, 이를 B가 주어졌을 때 A가 일어날 조건부 확률, 또는 사후확률이라고 합니다. 즉 베이즈 정리는 사전확률과 사후확률 사이의 관계를 설명하는 정리입니다.
간단한 예를 들어보겠습니다. 주사위를 던졌을 때 숫자 6이 나올 확률을 묻는다면, 대부분 1/6이라고 할 것입니다. 그러나 의심 많은 어떤 이는 주사위가 특수하게 제작되어(실제로 주사위는 완벽한 정육면체라고 가정합니다) 숫자 6이 나올 확률이 1/2라고 생각할 수도 있습니다. 이를 기존 통계에서는 가설, 베이즈 통계에서는 사전확률이라고 합니다. 이를 확인하기 위한 실험으로 주사위를 600번 굴렸더니 숫자 6이 97번 나왔습니다. 즉 1/6 확률에 가까운 결과가 나왔으므로, 기존 통계에서는 숫자 6이 나올 확률이 1/2이라는 가설을 기각할 것입니다.
하지만 베이즈 방식에서는 사전확률을 기각하는 대신, 얻은 데이터를 이용해 사전확률을 수정합니다. 즉, 1/2이라고 생각했던 사전확률은 숫자 6이 나온 횟수(97번/총 600번)를 이용해 수정되어 사후확률이 됩니다. 만약 추가적인 주사위 굴리기를 시행한다면 이 사후확률은 다음 실험을 위한 사전확률로 사용됩니다. 주사위 실험을 계속할수록 사후확률은 1/6에 가까워질 것입니다.
이처럼 베이즈 정리의 핵심은 이전에 알고 있던 정보에 관찰을 통해 새로운 정보를 획득하면, 이를 조합해 사후확률을 업데이트한다는 것입니다.
베이즈 정리의 의미 : https://angeloyeo.github.io/2020/01/09/Bayes_rule.html
-----------------------------------------------------------------------------------------------------------------
확 률 설 명
-----------------------------------------------------------------------------------------------------------------
P(A)P(A) 사건 AA의 사전 확률. 사건 BB에 대한 정보가 아무것도 없는 상태.
P(B)P(B) 사건 BB의 사전 확률.
P(A∣B)P(A∣B) 사건 BB가 일어났다는 가정 하에 원인이 사건 AA일 확률(사후 확률).
P(B∣A)P(B∣A) 사건 AA가 일어났다는 가정 하에 사건 BB가 일어날 조건부 확률. (Likelihood)
------------------------------------------------------------------------------------------------------------------
두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나타낸다. 어떤 사건에 대한 정보가 증가할 수록 확률값이 수정되고 정제되는 과정을 거친다.
나이브 베이즈 분류기에서는 각각의 특징 간에 서로 아무런 상관관계가 없다는 가정, 즉 특징들이 서로 조건부 독립(conditional independent)이라는 가정을 하게 된다. 만약 서로 다른 두 특징 A, B 간에 조건부 독립이 성립한다면, 다음 수식이 성립한다.
나이브 베이즈 분류기의 특징
장점
- 결과 도출을 위해 조건부 확률(우도, 사후확률)만 계산하면 되므로, 간단하고 계산량이 적어 빠른 모델이다.
- 큰 데이터셋에 적합하지만, 작은 데이터셋으로도 충분히 훈련시킬 수 있다.
- 다중 클래스(multiple class) 예측을 위해서도 사용할 수 있다.
단점
- 나이브 가정을 만족하기 위해선 특징 간의 독립성이 어느 정도는 있어야 한다.
- 연속형보다 이산형 데이터에서 성능이 좋다. (ex. 스팸 vs 일반)
우도(가능도, likelihood) : https://cafe.daum.net/flowlife/RlkF/60
조건부 확률(베이지안)의 이해를 위한 예제 및 풀이 https://www.synapsoft.co.kr/blog/6002/
빈도주의자(frequentist)와 베이즈주의자(Bayesian) https://gujoron.com/xe/517401
# Heart 데이터나이브 분류모델 경험하기
# Heart 데이터는 미국의 흉부외과 환자 303명을 관찰한 임의 데이터임
# 각 환자의 나이, 성별, 검진 정보 컬럼 13개와 AHD 칼럼에 각 환자들이 심장병 여부가 기록되어 있다.
#install.packages("e1071")
library(e1071)
df <- read.csv('http://www-bcf.usc.edu/~gareth/ISL/Heart.csv')
str(df)
library(caret)
set.seed(1234)
imsi <- createDataPartition(y=df$AHD, p=0.7, list=FALSE) #학습을 위한 train 셋과 test셋으로 구분
train <- df[imsi, ]
test <- df[-imsi, ]
#모델 객체를 호출할 경우 사전 확률과, 각 변수에서 관측된 결과에 따른 (여기서는 심장병 여부가 기록된 AHD)에 대한 사후 확률을 확인할 수 있다.
nb_model <- naiveBayes(AHD ~ ., data = train)
nb_model
nbpred <- predict(nb_model, test, type='class')
confusionMatrix(nbpred, test$AHD)