나이브 베이즈(Naive Bayes)

혜쿰·2023년 11월 21일
1
post-thumbnail

나이브 베이즈(Naive Bayes)는 확률적 분류 방법 중 하나로, 베이즈 정리를 기반으로 한다. 이 방법은 지도 학습(Supervised Learning)에서 분류(Classification) 문제를 다루는 데에 사용된다. 주로 텍스트 분류, 스팸 필터링, 감정 분석 등의 분야에서 많이 활용된다.

📺 개념

🔈 베이즈 정리

베이즈 정리는 조건부 확률을 계산하는 정리로, 사전 확률(prior probability)과 새로운 증거가 주어졌을 때 사후 확률(posterior probability)을 계산하는 방법을 제공한다.

베이즈 정리 수식은 다음과 같다.

P(AB)=P(BA)P(A)P(B)P(A|B) = {{P(B|A)*P(A)}\over{P(B)}}

여기서,

  • P(A|B): 사후 확률(Posterior probability, B가 주어졌을 때 A의 확률)
  • P(B|A): 우도(Likelihood, A가 주어졌을 때 B의 확률)
  • P(A): 사전 확률(Prior probability, A의 확률)
  • P(B): 정규화 상수

🔉 나이브 베이즈 분류기

나이브 베이즈 분류기는 각각의 특성이 독립적이라고 가정하고 베이즈 정리를 적용한다. 이 때문에 "Naive"(순진한)이라는 이름이 붙었다. 현실 세계에서 모든 특성이 독립적이지 않지만, 나이브 베이즈 분류기는 계산이 간단하고 효과적이어서 실제로 많이 사용된다.

동작 원리

  1. 사전 확률 계산 : 각 클래스의 확률을 계산한다.
  2. 우도 계산 : 각 클래스에서 각 특성이 나타날 확률을 계산한다.
  3. 사후 확률 계산 : 베이즈 정리를 이용하여 새로운 데이터가 주어졌을 때 각 클래스에 속할 확률을 계산한다.
  4. 결정 : 가장 높은 확률을 가진 클래스를 선택하여 예측한다.

🔊 장단점

장점

  • 간단하고 빠르며, 매우 큰 데이터셋에도 잘 작동한다.
  • 상대적으로 작은 학습 데이터로도 효과적인 모델을 만들 수 있다.

단점

  • 독립 변수 간의 상호작용을 고려하지 않기 때문에 실제로는 독립적이지 않은 경우 성능이 떨어질 수 있다.
  • 연속형 변수나 순서가 있는 데이터에는 적합하지 않을 수 있다.

나이브 베이즈 분류기는 많은 경우에 효과적인 모델이지만, 데이터의 특성과 문제에 따라서 성능이 달라질 수 있다.

📺 실습

🔉 코드 예제

아래는 나이브 베이즈 분류기를 사용하여 간단한 데이터셋을 학습하고 예측하는 예제 코드이다.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report

# 데이터 로드
iris = load_iris()
X = iris.data
y = iris.target

# 데이터 분할
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)

# 평가
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)

print(f'정확도: {accuracy:.4f}')
print('분류 보고서:\n', report)

🔊 코드 리뷰

  • load_iris()를 사용하여 Iris 데이터셋을 불러왔다.
  • train_test_split() 함수를 사용하여 데이터를 학습용과 테스트용으로 분할했다.
  • GaussianNB()로 가우시안 나이브 베이즈 모델을 초기화하고, fit() 함수로 학습했다.
  • predict() 함수를 사용하여 테스트 데이터를 예측하고, accuracy_score()classification_report() 함수를 사용하여 모델의 성능을 평가했다.
  • accuracy_score()로 정확도를 계산하고, classification_report()로 분류 보고서를 출력했다.

이 코드는 단순한 예제이지만, 실제로 데이터를 로드하고 모델을 학습하여 예측하는 전체적인 프로세스를 보여준다. 이러한 기본적인 프로세스를 사용하여 다른 데이터셋에 나이브 베이즈 분류기를 적용할 수 있다.

0개의 댓글

관련 채용 정보