
📌 이 문서는 확률 이론에 기반한 머신러닝 분류 알고리즘인 나이브 베이즈(Naive Bayes)에 대해
강의를 들으며 따로 정리한 내용입니다. 개념이 간단한데도 실제로 성능이 좋아서 흥미로웠고,
특히 확률 기반으로 분류를 생각한다는 점이 직관적으로 와닿았다.
나이브 베이즈는 확률 이론, 특히 베이즈 정리에 기반해서
각 클래스에 대한 확률을 계산하고, 가장 확률이 높은 클래스로 분류하는 알고리즘입니다.
처음엔 "왜 이름이 '나이브'야?" 싶었는데,
모든 feature들이 서로 독립이라고 가정(naive assumption)하는 단순한 구조 때문이더라구요.
이 부분이 처음엔 좀 헷갈렸는데,
정리하자면 "A가 일어난 걸 알고 있을 때 B가 일어날 확률"을 의미합니다.
P(A | B) = P(A ∩ B) / P(B)

예시)
"비가 오는 날, 우산을 들고 나올 확률"
→ 우산과 비의 관계를 확률로 표현하는 방식
이건 나이브 베이즈의 핵심 공식:
P(C | X) = (P(X | C) * P(C)) / P(X)
| 항목 | 의미 |
|---|---|
| P(C | X) |
| P(X | C) |
| P(C) | C가 나올 확률 (사전 확률) |
| P(X) | X가 나올 전체 확률 (정규화 상수) |
→ 결국, 입력 X가 들어왔을 때 어떤 클래스가 더 그럴듯한가를 계산하는 구조입니다.
예시:
스팸메일 분류에서 단어들이 서로 독립이라고 가정
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = GaussianNB()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("정확도:", accuracy_score(y_test, y_pred))
→ 연속형 데이터(정규분포 가정)에 적합
→ 정말 빠르고 간단하게 분류됨
| 모델 | 특징 | 사용 예시 |
|---|---|---|
| GaussianNB | 연속형 변수, 정규분포 가정 | 센서 데이터, 수치 예측 |
| MultinomialNB | 단어 개수 기반 | 뉴스 분류, BoW 모델 |
| BernoulliNB | 이진 특성 | 스팸 여부, 클릭 여부 등 |