나이브 베이즈 분류기 (Naive Bayes Classifier, NBC)
뭐하는 모델인가?
- 새 데이터가 어느 클래스일지 확률로 판단하고, 가장 큰 확률의 클래스를 고르는 분류기
- 아이디어 : 베이즈 규칙 + "클래스가 주어지면 각 특징은 서로 독립" 이라는 단순 가정
왜 Naive인가?
- 실제론 특징들이 완전히 독립이 아니지만, 그렇게 가정하면 계산이 매우 쉬워지고 빨라짐
- 특히 고차원, 희소 데이터(텍스트)에서 강력
학습, 예측 흐름
- 사전확률 P(y) : 학습 데이터에서 각 클래스의 비중으로 계산
- 조건부확률 P(특징|y) :
- 범주형/단어 카운트 > 빈도 기반
- 연속형 > 가우시안(평균,분산) 등으로 모델링
- 스무딩(Laplace/Lidstone) : 한 번도 안 나온 값의 0 확률 문제를 방지 (분자, 분모에 작은 상수 더함)
- 예측 : 각 클래스의 로그확률 합을 비교하고 최대인 클래스를 선택
- 곱셈 대신 로그를 쓰면 언더플로우 방지 + 더 빠름
- P(y|x1,...,xn) ∝ P(y) * Π P(xi|y) (독립 가정, 비교 시 분모 생략)
Laplace: (count + 1) / (total + f) (f=가능한 값 개수)
대표 변형 (데이터 타입에 맞춰 선택)
- Multinomial NB : 단어 카운트/TF(또는 TF-IDF) 같은 횟수 기반 텍스트
- Bernoulli NB : 단어 존재/부재 같은 이진 특징
- Gaussian NB : 키, 몸무게, 온도 등 연속형 특징 (정규분포 가정)
- Complement NB : 불균형 텍스트 분류에서 Multinomial보다 안정적일 때가 많음
장단점
- 장점
- 빠름 (학습, 추론 둘 다), 데이터 적어도 잘 동작
- 멀티클래스 자연 지원, 고차원 희소 데이터에 특히 강함
- 단점
- 독립 가정이 강함 > 상관이 큰 특징들에선 성능 하락
- 스무딩 미적용 시 0확률로 모델이 붕괴
- 확률 추정이 다소 편향적일 수 있음 (점수 해석엔 주의)
언제 사용하면 좋은가?
- 스팸/뉴스/감성 같은 텍스트 분류의 베이스라인
- 고차원, 희소, 적은 데이터
- 빠르게 기준 성능을 만들고 다른 모델과 비교/앙상블 할 때
체크리스트 (실무 팁)
- 텍스트 토큰화 > 정제 > (Count/TF-IDF) > NB 파이프라인
- 항상 스무딩 사용 (a=1 기본, 데이터 따라 조정)
- 로그확률로 계산 (언더플로 방지)
- 클래스 불균형이면 사전확률 조정 (균형 샘플링/가중치)
- 평가는 정확도 + PR/ROC, F1로 같이 확인
- 특징 간 상관이 크면 특징 선택/차원축소로 독립성 위반 완화