나이브 베이즈(Naive Bayes)는 이런 분류 문제를 확률로 접근하는 알고리즘이다.
수식이 간단하고 학습 속도가 빠르며, 텍스트 분류에서 놀랍도록 강력한 성능을 보인다.
이번 글에서는 나이브 베이즈의 이론적 기반부터 실제 계산 과정까지 단계별로 정리한다.
1. 나이브 베이즈란?
나이브 베이즈는 베이즈 정리(Bayes' Theorem)를 기반으로 한 분류 알고리즘이다. "나이브(Naive, 순진한)"라는 이름이 붙은 이유는 핵심 가정 때문이다. 바로 "모든 특성(feature)이 서로 독립이다"라고 가정한다는 것이다.
현실에서는 이 가정이 성립하지 않는 경우가 대부분이다. 예를 들어 이메일의 "무료"라는 단어와 "클릭"이라는 단어는 스팸에서 함께 나올 확률이 높으므로 독립이 아니다. 그런데 이렇게 단순한(순진한) 가정을 해도 실제 분류 성능이 매우 좋기 때문에 널리 사용된다.
키와 몸무게처럼 실제 세계의 특성들은 대부분 서로 연관되어 있다.
독립이라고 가정하는 것은 이 복잡한 관계를 무시하고 단순화하는 것이다.
그래서 순진하다고 부르지만, 이 단순함 덕분에 계산이 훨씬 쉬워지고, 실제로도 많은 분류 문제에서 강력한 성능을 발휘한다.
2. 베이즈 정리 — 나이브 베이즈의 출발점
나이브 베이즈를 이해하려면 먼저 베이즈 정리를 알아야 한다.
P(B | A): A가 주어졌을 때 B의 확률 (우도, Likelihood)
P(A): A의 사전 확률 (Prior) | P(B): B의 주변 확률 (Evidence)
분류 문제에 적용하면 이렇게 된다. 데이터 x = (x₁, x₂, …, xₙ)가 주어졌을 때, 클래스 y = cₖ일 확률을 계산한다.
모든 클래스에 대해 분모가 동일하므로, 클래스 비교 시 분모를 무시해도 순위가 바뀌지 않는다.
→ 실제 계산에서는 분모를 생략하고 분자만 비교한다.
3. 조건부 독립 가정 — "나이브"의 핵심
우도 P(x₁, x₂, …, xₙ | y = cₖ)를 계산하려면 n개 특성의 결합 확률이 필요한데, 이는 데이터가 많아질수록 계산이 매우 복잡해진다. 나이브 베이즈는 이 문제를 조건부 독립 가정으로 단순화한다.
조건부 독립 가정 y = cₖ가 주어지면 x₁, x₂, …, xₙ 은 서로 독립이다
→ "클래스를 알면 각 특성은 서로 관련이 없다"는 가정 단순화 결과 P(x₁, x₂, …, xₙ | y = cₖ) = P(x₁|y=cₖ) · P(x₂|y=cₖ) · … · P(xₙ|y=cₖ) → 결합 확률이 각 조건부 확률의 곱으로 분해된다
이 가정 덕분에 최종 분류 공식이 다음처럼 단순해진다.
최종 예측: argmax_cₖ [ P(y = cₖ) · Π P(xᵢ | y = cₖ) ]
4. 나이브 베이즈 분류 과정
나이브 베이즈는 다음 두 단계로 작동한다.
학습 단계 — 확률 추정
- 사전 확률 P(y = cₖ): 학습 데이터에서 각 클래스의 비율을 계산
- 우도 P(xᵢ | y = cₖ): 각 클래스에서 각 특성값이 나타나는 빈도를 계산
예측 단계 — 사후확률 비교
새 데이터가 들어오면 모든 클래스에 대해 P(y = cₖ) · Π P(xᵢ | y = cₖ)를 계산하고, 가장 큰 값의 클래스를 예측값으로 반환한다.
5. 단계별 계산 예시
다음 10개의 학습 데이터를 바탕으로, "맑음 & 바람 있음" 조건일 때 야외 운동을 할지(YES) 안 할지(NO)를 예측해보자.
바람: 없음 없음 없음 없음 있음 있음 있음 없음 있음 없음
운동(Y): YES YES YES YES NO NO YES NO YES NO
P(NO) = 4/10 = 0.4
P(맑음 | YES) = 3/6 = 0.5 P(맑음 | NO) = 2/4 = 0.5
[바람 = 있음]
P(있음 | YES) = 2/6 = 0.333 P(있음 | NO) = 2/4 = 0.5
= 0.6 × 0.5 × 0.333 = 0.100
P(NO | 맑음, 있음) ∝ P(NO) · P(맑음|NO) · P(있음|NO)
= 0.4 × 0.5 × 0.5 = 0.100
실제 사용 시 더 많은 데이터가 있으면 차이가 명확히 나타난다.
특성이 많아지면 매우 작은 확률들을 계속 곱하게 된다. 예를 들어 0.001을 100번 곱하면 컴퓨터에서 0으로 처리(언더플로우)될 수 있다.
이를 방지하기 위해 실제 구현에서는 확률 대신 로그 확률(log probability)을 사용한다.
→ 곱셈이 덧셈으로 바뀌어 수치적으로 안정적이다.
log P(y) + Σ log P(xᵢ | y)
6. 라플라스 스무딩 (Laplace Smoothing)
학습 데이터에서 한 번도 등장하지 않은 특성값이 있다고 하자. 예를 들어 학습 데이터에 "눈" 날씨가 없다면 P(눈 | YES) = 0이 된다. 이때 어떤 새 데이터에 눈이 포함되면 전체 곱이 0이 되어 분류가 불가능해진다.
V: 특성 xᵢ가 가질 수 있는 값의 종류 수 (어휘 크기)
→ 모든 경우에 α를 더해 확률이 0이 되는 것을 방지
P(눈 | NO) = (0 + 1) / (4 + 1×4) = 1/8 = 0.125
→ 0이 아닌 작은 양수로 보정되어 계산이 가능해진다
7. 나이브 베이즈의 종류
특성(feature)의 데이터 유형에 따라 우도 P(xᵢ | y)를 추정하는 방식이 달라진다.
| 종류 | 특성 유형 | 우도 추정 방식 | 주요 활용 |
|---|---|---|---|
| 가우시안 Gaussian NB |
연속형 수치 | 정규분포 가정 평균·분산으로 추정 |
센서 데이터, 수치형 피처 |
| 다항 Multinomial NB |
이산형 빈도 | 다항분포 단어 출현 횟수 활용 |
텍스트 분류, 문서 분류 |
| 베르누이 Bernoulli NB |
이진(0/1) | 베르누이분포 단어 존재 여부만 활용 |
스팸 분류, 감성 분석 |
| 보완 Complement NB |
이산형 빈도 | 다항 NB의 불균형 보완 | 불균형 데이터 텍스트 분류 |
8. 나이브 베이즈의 장단점과 활용
장점
- 매우 빠른 학습과 예측: 단순한 확률 계산만 하므로 대용량 데이터에도 빠르다
- 소규모 데이터에도 강함: 파라미터 수가 적어 과적합이 잘 일어나지 않는다
- 텍스트 분류에서 탁월: 스팸 필터, 감성 분석, 뉴스 카테고리 분류에서 강력한 성능
- 실시간 학습 가능: 새 데이터가 들어와도 확률만 업데이트하면 되므로 온라인 학습에 적합
- 다중 클래스 문제에 자연스럽게 확장: 이진 분류뿐 아니라 여러 클래스에도 바로 적용 가능
단점
- 독립 가정의 한계: 실제로 특성들이 독립이 아닌 경우가 많아 정확도가 떨어질 수 있다
- 제로 빈도 문제: 학습 데이터에 없는 특성값이 등장하면 확률이 0이 됨 (라플라스 스무딩으로 보완)
- 확률 추정의 신뢰성: 분류 자체는 잘하지만 실제 확률값의 정확도는 낮을 수 있다
- 연속형 데이터에서 정규분포 가정: 가우시안 NB는 연속형 데이터가 정규분포를 따른다고 가정하는데, 실제로는 그렇지 않을 수 있다
• 이메일 스팸 필터: 단어 출현 빈도로 스팸/정상 분류
• 뉴스 기사 카테고리 분류: 정치/경제/스포츠/문화 자동 분류
• 감성 분석: 리뷰가 긍정적/부정적인지 판단
• 의료 진단 보조: 증상(특성)의 조합으로 질병 가능성 추정
→ 텍스트처럼 특성 수(단어 수)가 매우 많고 데이터는 희소한 상황에서 특히 유리
독립 가정이 심하게 위배되는 경우, 예를 들어 특성들 사이에 강한 상관관계가 있다면 성능이 크게 떨어질 수 있다. 이런 경우에는 로지스틱 회귀나 랜덤 포레스트를 고려하자.
또한 출력된 확률값 자체를 신뢰하기보다 분류 결과(어느 클래스인지)를 활용하는 것이 안전하다.
📌 핵심 정리
- 나이브 베이즈: 베이즈 정리 + 조건부 독립 가정으로 분류하는 알고리즘
- 핵심 공식: P(y|x) ∝ P(y) · Π P(xᵢ|y) → 사전확률 × 우도의 곱
- "나이브"의 의미: 모든 특성이 서로 독립이라는 단순(순진한) 가정
- 학습: 각 클래스의 사전확률 P(y=cₖ)와 조건부 확률 P(xᵢ|y=cₖ) 추정
- 예측: 모든 클래스에 대해 비례값 계산 → 가장 큰 클래스 선택
- 라플라스 스무딩: 학습 데이터에 없는 값의 확률이 0이 되는 문제 방지
- 로그 확률: 작은 확률의 누적 곱 → 언더플로우 방지를 위해 덧셈으로 변환
- 종류: 가우시안(연속형) / 다항(빈도) / 베르누이(이진)
- 강점: 빠른 학습, 텍스트 분류, 소규모 데이터, 다중 클래스
- 한계: 독립 가정 위배 시 성능 저하, 제로 빈도 문제
'수학&통계학' 카테고리의 다른 글
| K-NN (0) | 2026.05.14 |
|---|---|
| 서포트 벡터 머신 (0) | 2026.05.14 |
| 교차 검증 (홀드아웃, K-폴드, 층화 K-폴드, LpOCV / LOOCV) (0) | 2026.05.13 |
| 모형 평가 지표 (회귀지표, 분류지표, 비지도학습 지표) (0) | 2026.05.13 |
| 카이제곱(χ²) 검정, F분포 ANOVA, 비모수 검정 (0) | 2026.05.13 |