일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 인공 신경망
- 머신 러닝
- q-러닝
- 머신러닝
- CNN
- 활성화 함수
- 교차 검증
- 최적화
- 인공지능
- GRU
- Deep learning
- 딥러닝
- 강화 학습
- 자연어 처리
- 강화학습
- 데이터 전처리
- python
- LSTM
- 손실 함수
- Q-Learning
- 정규화
- Machine Learning
- 차원 축소
- 지도 학습
- 과적합
- rnn
- 신경망
- 회귀
- AI
- reinforcement learning
- Today
- Total
move84
머신러닝 기초 - 나이브 베이즈 분류기 (Naive Bayes Classifiers)와 응용 본문
😀 나이브 베이즈 분류기란?
나이브 베이즈(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와 같은 다른 형태의 나이브 베이즈 모델을 적용하는 것이 좋다. 데이터 전처리와 특성 선택이 모델 성능에 큰 영향을 미치므로, 이를 신중하게 다루어야 한다.
📌 실제 응용 분야와 전망
나이브 베이즈 분류기는 텍스트 기반 응용 분야에서 특히 강력하다. 스팸 메일 필터링, 뉴스 기사 분류, 감성 분석, 추천 시스템 등 다양한 분야에서 사용된다.
또한, 의료 진단, 금융 리스크 평가 등에서 기본 모델로 활용되며, 빠른 학습 속도와 낮은 계산 복잡도로 인해 대규모 데이터셋에도 효과적으로 적용된다. 앞으로 자연어 처리 기술과 결합되어 더 정교한 모델로 발전할 것으로 기대된다.
📌 결론 및 요약
나이브 베이즈 분류기는 베이즈 정리를 기반으로 한 간단하면서도 강력한 분류 알고리즘이다. 모든 특성이 독립이라는 가정을 통해 계산을 단순화하여 빠른 학습과 예측을 가능하게 하며, 특히 텍스트 분류와 스팸 필터링에서 우수한 성능을 보인다. 이 블로그에서는 나이브 베이즈의 기본 원리, 수학적 배경, 파이썬 코드 예제를 통해 모델의 작동 방식을 설명했다. 초보자들도 이 글을 통해 베이즈 정리와 관련 핵심 용어의 의미를 이해하고, 실제 데이터에 나이브 베이즈 분류기를 적용하는 방법을 익힐 수 있다. 나이브 베이즈는 그 단순함에도 불구하고 다양한 응용 분야에서 효과적인 결과를 제공하며, 데이터 전처리와 특성 추출 기법과 결합하면 더욱 뛰어난 모델을 구축할 수 있다.
키워드: #나이브베이즈 #머신러닝기초 #텍스트분류 #파이썬예제
'머신러닝' 카테고리의 다른 글
머신러닝 기초 – 이상치 탐지(Outlier Detection) 기법 (0) | 2025.02.20 |
---|---|
머신러닝 기초 - ML 파이프라인에서 누락 데이터 처리 (Handling Missing Data) (0) | 2025.02.20 |
머신러닝 기초 - K-최근접 이웃 (K-Nearest Neighbors) : 거리 측정 방법 (0) | 2025.02.20 |
머신러닝 기초 - 서포트 벡터 머신과 커널 기법 (0) | 2025.02.20 |
머신러닝 기초 - 그라디언트 부스팅 머신 (1) | 2025.02.20 |