move84

머신러닝 기초 - 나이브 베이즈 분류기 (Naive Bayes Classifiers)와 응용 본문

머신러닝

머신러닝 기초 - 나이브 베이즈 분류기 (Naive Bayes Classifiers)와 응용

move84 2025. 2. 20. 23:14
반응형

😀 나이브 베이즈 분류기란?
나이브 베이즈(Naive Bayes) 분류기는 베이즈 정리(Bayes Theorem)를 기반으로 한 확률 모델로, 각 특성이 서로 독립(Independent Assumption)이라는 단순한 가정을 전제로 한다. 이 간단한 가정 덕분에 계산이 빠르고, 데이터의 분포를 효율적으로 추정할 수 있어 텍스트 분류(Text Classification), 스팸 필터링(Spam Filtering), 감성 분석(Sentiment Analysis) 등 다양한 분야에서 활용된다.
나이브 베이즈는 "나이브(naive)"하다는 단어에서 알 수 있듯, 실제 데이터에서 특성들이 완전히 독립적이지 않더라도 실용적인 성능을 보여준다. 쉽게 말해, 이메일의 단어들이 서로 영향을 주지 않는다고 가정하고, 각 단어의 등장 빈도만 보고 스팸 여부를 판단하는 방식과 같다.


📈 나이브 베이즈의 수학적 원리
나이브 베이즈 분류기는 베이즈 정리를 기반으로 하며, 다음과 같은 공식으로 표현된다.

[ P(C|X) = \frac{P(X|C) \times P(C)}{P(X)} ]

여기서

  • ( P(C|X) ): 주어진 특성 ( X )에 대해 클래스 ( C )일 조건부 확률 (Posterior Probability)
  • ( P(X|C) ): 클래스 ( C )일 때 특성 ( X )가 나타날 확률 (Likelihood)
  • ( P(C) ): 클래스 ( C )의 사전 확률 (Prior Probability)
  • ( P(X) ): 특성 ( X )가 관측될 전체 확률 (Evidence)

나이브 베이즈에서는 각 특성이 서로 독립이라고 가정해 ( P(X|C) )를 개별 특성들의 곱으로 분해할 수 있다. 이 단순화 덕분에 계산 복잡도가 낮아지고, 대규모 데이터셋에서도 빠르게 학습할 수 있다.


💻 파이썬 코드 예제: 아이리스 데이터셋을 활용한 나이브 베이즈 분류
아래 코드는 사이킷런(scikit-learn)의 GaussianNB를 사용하여 아이리스(Iris) 데이터셋에 대해 나이브 베이즈 분류기를 학습하고 평가하는 예제다. 아이리스 데이터셋은 세 종류의 붓꽃(iris-setosa, iris-versicolor, iris-virginica)으로 구성되어 있어, 나이브 베이즈 분류기의 기본 개념을 익히기에 적합하다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 아이리스 데이터셋 로드
iris = load_iris()
X = iris.data  # 특징: sepal length, sepal width, petal length, petal width
y = iris.target  # 클래스: 0, 1, 2

# 데이터를 훈련 세트와 테스트 세트로 분할 (70% 훈련, 30% 테스트)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# GaussianNB 모델 생성 및 학습
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)

# 테스트 데이터에 대한 예측 수행
y_pred = nb_model.predict(X_test)

# 모델 평가: 정확도, 혼동 행렬, 분류 보고서 출력
accuracy = accuracy_score(y_test, y_pred)
print("정확도:", accuracy)
print("혼동 행렬:\n", confusion_matrix(y_test, y_pred))
print("\n분류 보고서:\n", classification_report(y_test, y_pred))

# 간단한 시각화를 위한 예시: 첫 두 특징(sepal length, sepal width)만 사용
plt.figure(figsize=(8, 6))
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap='viridis', edgecolor='k', s=80)
plt.xlabel("Sepal Length (꽃받침 길이)")
plt.ylabel("Sepal Width (꽃받침 너비)")
plt.title("GaussianNB 분류 결과")
plt.show()

이 코드는 아이리스 데이터셋을 불러와 훈련과 테스트 데이터로 나눈 후, Gaussian Naive Bayes 분류기를 학습시켜 예측 결과를 평가한다. 분류 정확도, 혼동 행렬(Confusion Matrix), 그리고 분류 보고서(Classification Report)를 통해 모델의 성능을 확인할 수 있다. 간단한 2차원 시각화를 통해 결과를 직관적으로 이해할 수 있다.


🌟 초보자를 위한 실생활 예시
나이브 베이즈 분류기는 이메일 스팸 필터링에 자주 사용된다. 이메일의 각 단어(특성)가 서로 독립적으로 등장한다고 가정하고, 특정 단어들이 스팸 메일에 자주 등장한다면 해당 이메일이 스팸일 확률이 높다고 판단한다.
또 다른 예로, 뉴스 기사를 주제별로 분류할 때 각 단어의 빈도수로 기사의 주제를 결정할 수 있다. 예를 들어, "스포츠", "정치", "엔터테인먼트"와 같이 서로 다른 주제로 분류할 때, 각 기사의 단어들을 독립적으로 고려해 가장 높은 사후 확률을 가진 주제로 분류하는 것이다. 이처럼 나이브 베이즈는 단순하지만, 텍스트 데이터에서 매우 효과적인 성능을 발휘한다.


📚 중요 용어 정리 (Key Terms)

  • 베이즈 정리 (Bayes Theorem): 사전 확률과 우도(likelihood)를 사용해 사후 확률(posterior probability)을 계산하는 확률 이론의 기본 원리.
  • 사전 확률 (Prior Probability): 데이터를 관측하기 전에 특정 클래스가 나타날 확률.
  • 우도 (Likelihood): 특정 클래스일 때 주어진 데이터가 관측될 확률.
  • 사후 확률 (Posterior Probability): 관측된 데이터를 바탕으로 업데이트된, 클래스가 나타날 확률.

📊 모델 평가와 성능 개선
나이브 베이즈 분류기는 주로 정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1 스코어(F1 Score) 등의 지표로 평가한다. 혼동 행렬을 통해 모델이 어느 클래스에서 오분류되는지 확인할 수 있으며, 텍스트 분류와 같은 응용 분야에서는 TF-IDF와 같은 특성 추출 기법과 함께 사용하면 더욱 좋은 성능을 얻을 수 있다.
또한, 데이터의 분포가 정규분포를 따르지 않는 경우 MultinomialNB나 BernoulliNB와 같은 다른 형태의 나이브 베이즈 모델을 적용하는 것이 좋다. 데이터 전처리와 특성 선택이 모델 성능에 큰 영향을 미치므로, 이를 신중하게 다루어야 한다.


📌 실제 응용 분야와 전망
나이브 베이즈 분류기는 텍스트 기반 응용 분야에서 특히 강력하다. 스팸 메일 필터링, 뉴스 기사 분류, 감성 분석, 추천 시스템 등 다양한 분야에서 사용된다.
또한, 의료 진단, 금융 리스크 평가 등에서 기본 모델로 활용되며, 빠른 학습 속도와 낮은 계산 복잡도로 인해 대규모 데이터셋에도 효과적으로 적용된다. 앞으로 자연어 처리 기술과 결합되어 더 정교한 모델로 발전할 것으로 기대된다.


📌 결론 및 요약
나이브 베이즈 분류기는 베이즈 정리를 기반으로 한 간단하면서도 강력한 분류 알고리즘이다. 모든 특성이 독립이라는 가정을 통해 계산을 단순화하여 빠른 학습과 예측을 가능하게 하며, 특히 텍스트 분류와 스팸 필터링에서 우수한 성능을 보인다. 이 블로그에서는 나이브 베이즈의 기본 원리, 수학적 배경, 파이썬 코드 예제를 통해 모델의 작동 방식을 설명했다. 초보자들도 이 글을 통해 베이즈 정리와 관련 핵심 용어의 의미를 이해하고, 실제 데이터에 나이브 베이즈 분류기를 적용하는 방법을 익힐 수 있다. 나이브 베이즈는 그 단순함에도 불구하고 다양한 응용 분야에서 효과적인 결과를 제공하며, 데이터 전처리와 특성 추출 기법과 결합하면 더욱 뛰어난 모델을 구축할 수 있다.

키워드: #나이브베이즈 #머신러닝기초 #텍스트분류 #파이썬예제

반응형