나이브 베이즈 (Naive Bayes)¶
난이도: 초급~중급
선수 지식: 확률론 기초 (조건부 확률, 베이즈 정리)
관련 문서: 선형 모델 | 정규화 이론 | 앙상블 방법
개요¶
나이브 베이즈(Naive Bayes)는 베이즈 정리(Bayes' Theorem)에 기반한 확률적 분류기이다. "나이브(Naive)"라는 이름은 특성들이 주어진 클래스 내에서 조건부 독립이라는 강한(그리고 거의 항상 틀린) 가정에서 유래한다.
이 단순한 가정에도 불구하고, 나이브 베이즈는 텍스트 분류, 스팸 필터링 등에서 놀랍도록 좋은 성능을 보이며, 훈련과 예측이 매우 빠르고 적은 데이터로도 동작한다.
핵심 개념¶
1. 베이즈 정리 기초¶
| 항 | 이름 | 의미 |
|---|---|---|
| \(P(C \| \mathbf{x})\) | 사후 확률 (Posterior) | 데이터가 주어졌을 때 클래스의 확률 |
| \(P(\mathbf{x} \| C)\) | 우도 (Likelihood) | 해당 클래스에서 데이터가 나올 확률 |
| \(P(C)\) | 사전 확률 (Prior) | 클래스의 사전 확률 |
| \(P(\mathbf{x})\) | 증거 (Evidence) | 정규화 상수 (모든 클래스에 동일) |
2. 나이브(Naive) 가정¶
조건부 독립 가정:
이 가정 덕분에 결합 확률 대신 각 특성의 개별 조건부 확률만 추정하면 된다.
결정 규칙¶
실제 구현에서는 언더플로(underflow) 방지를 위해 로그 확률을 사용:
3. 변형들 (Variants)¶
가우시안 나이브 베이즈 (Gaussian Naive Bayes)¶
- 연속형 특성에 적합
- 각 클래스별로 평균 \(\mu_C\)과 분산 \(\sigma_C^2\)를 훈련 데이터에서 추정
- 특성이 대략 정규분포를 따를 때 효과적
다항 나이브 베이즈 (Multinomial Naive Bayes)¶
- 카운트 데이터에 적합 (단어 빈도, TF-IDF)
- 텍스트 분류의 표준 모델
- \(\alpha\): 라플라스 스무딩 파라미터
베르누이 나이브 베이즈 (Bernoulli Naive Bayes)¶
- 이진 특성(존재/부재)에 적합
- 특성의 부재도 명시적으로 페널티 부여
- 다항 NB와 달리 특성이 0일 때도 확률에 기여
보완 나이브 베이즈 (Complement Naive Bayes)¶
- 불균형 데이터셋을 위한 변형
- 해당 클래스가 아닌 보완 클래스에서 추정치를 계산
flowchart TD
A[특성 유형은?] --> B{연속형?}
B -->|예| C[가우시안 NB]
B -->|아니오| D{이진형?}
D -->|예| E[베르누이 NB]
D -->|아니오| F{카운트 데이터?}
F -->|예| G[다항 NB]
F -->|불균형?| H[보완 NB] 4. 라플라스 스무딩 (Laplace Smoothing)¶
문제¶
훈련 데이터에서 특정 특성 값이 특정 클래스에서 한 번도 나타나지 않으면 \(P(x_i|C) = 0\)이 되어, 전체 사후 확률이 0이 됨.
해결¶
모든 카운트에 \(\alpha\)를 더함 (일반적으로 \(\alpha = 1\)):
효과¶
- 확률이 정확히 0이 되는 것을 방지
- 정규화(regularization)와 유사한 효과
- \(\alpha\)가 크면 균일 분포에 가까워지고, \(\alpha\)가 작으면 데이터에 더 의존
상세 내용¶
왜 "나이브" 가정이 틀린데도 잘 동작하는가?¶
이것은 나이브 베이즈에서 가장 중요하고 흥미로운 질문이다:
-
분류는 순서만 맞으면 된다: 정확한 사후 확률이 아니라, 클래스 간 확률의 순서(ordering)만 올바르면 정확한 분류가 가능하다.
-
오류가 상쇄된다: 개별 확률 추정의 오류가 클래스 간에 대칭적으로 분포하면 서로 상쇄된다 (Dominguez & Pazzani, 1997).
-
Zero-One 손실에 최적: 확률 추정이 부정확하더라도 Zero-One 손실(정확한 분류 여부)에서는 최적일 수 있다 (Zhang, 2004).
-
높은 편향, 낮은 분산: 강한 가정은 편향을 증가시키지만, 적은 파라미터로 인해 분산이 매우 낮다. 데이터가 적을 때 이 트레이드오프가 유리하다.
확률 보정 (Probability Calibration)¶
나이브 베이즈의 확률 출력은 보정이 잘 되어 있지 않다 (극단적인 값으로 치우침). 정확한 확률이 필요한 경우 Platt Scaling이나 Isotonic Regression으로 보정해야 한다.
언제 사용하는가¶
| 상황 | 추천 여부 |
|---|---|
| 텍스트 분류 (스팸 필터링, 감성 분석) | 매우 적합 (다항 NB) |
| 실시간 예측이 필요한 경우 | 적합 (O(1) 예측) |
| 데이터가 매우 적은 경우 | 적합 (적은 파라미터) |
| 베이스라인 모델이 필요한 경우 | 적합 |
| 다중 클래스, 클래스가 매우 많은 경우 | 적합 |
| 특성 간 상호작용이 중요한 경우 | 부적합 |
| 정확한 확률 추정이 필요한 경우 | 부적합 (보정 필요) |
| 연속형 특성이 정규분포를 따르지 않는 경우 | 가우시안 NB 부적합 |
흔한 오해와 함정¶
1. "나이브 베이즈는 너무 단순해서 쓸모없다"¶
- 텍스트 분류에서는 복잡한 모델과 비슷하거나 더 나은 성능을 보이는 경우가 많다. 특히 데이터가 적을 때 유리하다.
2. "특성이 독립이 아니면 나이브 베이즈를 쓸 수 없다"¶
- 독립 가정이 틀려도 분류 정확도는 높을 수 있다. 중요한 것은 확률의 절대값이 아니라 클래스 간 순서이다.
3. "다항 NB와 베르누이 NB는 같다"¶
- 다항 NB는 단어의 빈도를 사용하고, 베르누이 NB는 단어의 존재/부재만 사용한다. 짧은 문서에서는 베르누이가, 긴 문서에서는 다항이 유리할 수 있다.
4. "라플라스 스무딩은 무조건 1로 설정한다"¶
- \(\alpha\)는 하이퍼파라미터이며, 교차 검증으로 최적값을 찾아야 한다. 특히 불균형 데이터에서 중요하다.
다른 주제와의 연결¶
- 선형 모델: 로지스틱 회귀와의 비교 (판별 모델 vs 생성 모델)
- 정규화 이론: 라플라스 스무딩의 정규화 효과
- 앙상블 방법: 나이브 베이즈를 앙상블의 기본 학습기로 활용
- 과적합과 과소적합: 높은 편향-낮은 분산의 대표적 모델
NB 변형 비교표¶
| 속성 | 가우시안 | 다항 | 베르누이 |
|---|---|---|---|
| 특성 유형 | 연속형 | 카운트 | 이진 |
| 분포 가정 | 정규분포 | 다항분포 | 베르누이분포 |
| 대표 사용처 | 일반 분류 | 텍스트 분류 | 짧은 텍스트 |
| 부재 특성 처리 | 해당 없음 | 무시 | 명시적 페널티 |
| 스무딩 | 해당 없음 | 라플라스 | 라플라스 |
자주 묻는 면접 질문¶
- 나이브 베이즈가 잘못된 가정에도 동작하는 이유는?
-
분류는 확률 순서만 맞으면 되고, 독립 가정의 오류가 클래스 간에 상쇄되기 때문
-
텍스트 분류에서 다항 NB vs 베르누이 NB?
-
다항: 단어 빈도 사용, 긴 문서에 유리. 베르누이: 존재 여부만, 짧은 문서에 유리
-
훈련 데이터에 없는 특성 값을 어떻게 처리하는가?
-
라플라스 스무딩(Laplace Smoothing): 모든 카운트에 \(\alpha\) 추가
-
나이브 베이즈가 더 복잡한 모델보다 나은 경우는?
- 데이터가 매우 적거나, 특성 수가 매우 많거나, 실시간 예측이 필요하거나, 빠른 프로토타이핑이 목적일 때
코드 예시¶
from sklearn.naive_bayes import (
GaussianNB, MultinomialNB, BernoulliNB, ComplementNB
)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
# 가우시안 NB (연속 특성)
gnb = GaussianNB()
gnb.fit(X_train, y_train)
# 다항 NB (텍스트 분류)
text_clf = Pipeline([
('tfidf', TfidfVectorizer()),
('nb', MultinomialNB(alpha=1.0)) # alpha: 라플라스 스무딩
])
text_clf.fit(texts_train, y_train)
# 베르누이 NB (이진 특성)
bnb = BernoulliNB(alpha=1.0, binarize=0.5)
bnb.fit(X_train, y_train)
# 보완 NB (불균형 데이터)
cnb = ComplementNB(alpha=1.0)
cnb.fit(X_train, y_train)
용어 정리¶
| 영어 | 한국어 |
|---|---|
| Naive Bayes | 나이브 베이즈 |
| Bayes' Theorem | 베이즈 정리 |
| Prior | 사전 확률 |
| Posterior | 사후 확률 |
| Likelihood | 우도 (가능도) |
| Conditional Independence | 조건부 독립 |
| Laplace Smoothing | 라플라스 스무딩 |
| Generative Model | 생성 모델 |
| Discriminative Model | 판별 모델 |
참고 자료¶
- Zhang (2004) - "The Optimality of Naive Bayes"
- Dominguez & Pazzani (1997) - "On the Optimality of the Simple Bayesian Classifier under Zero-One Loss"
- McCallum & Nigam (1998) - "A Comparison of Event Models for Naive Bayes Text Classification"
- Rennie et al. (2003) - "Tackling the Poor Assumptions of Naive Bayes Text Classifiers"