나이브 베이즈 (Naive Bayes) 란?
- 확률에 기반한 머신러닝 알고리즘
- 베이즈 정리를 기반으로 하는 통계적 분류 기법
- 나이브 라는 이름이 붙은 이유는 각 특징(feature) 이 독립적이라고 가정하기 때문
- 주로 텍스트 분류 문제에서 널리 사용
- 데이터가 특정 클래스에 속할 확률을 계산하는 분류 모델임
나이브 베이즈의 주요 개념
1. 베이즈 정리:
나이브 베이즈는 베이즈 정리를 기반으로 동작합니다. 베이즈 정리는 다음과 같은 수식으로 표현됩니다:
- P(X|C) : 클래스 C 가 주어졌을 때, 데이터 X 가 나타날 확률 (우도, Likelihood)
- P(C) : 클래스 C 가 나타날 확률 (사전 확률, Prior Probability)
- P(X) : 데이터 X 가 나타날 확률 (증거, Evidence)
2. 조건부 독립 가정:
- 나이브 베이즈는 "조건부 독립 가정(Conditional Independence Assumption)"을 전제로 합니다.
- 이는 각 특성(feature)이 클래스 에 대해 서로 독립적이라고 가정합니다.
- 예를 들어, 이메일에서 단어 "offer"와 "free"가 등장한다고 해서 두 단어가 서로 영향을 미치지 않는다고 간주합니다.
- 이 가정 덕분에 계산이 간단해지지만, 현실에서는 항상 성립하지 않을 수 있습니다.
3. 확률 계산:
조건부 독립 가정에 따르면, 가 여러 특성으로 구성된 경우:
4. 클래스 예측:
나이브 베이즈는 를 최대화하는 클래스를 선택합니다:
나이브 베이즈의 종류
- 가우시안 나이브 베이즈(Gaussian Naive Bayes):
- 연속형 데이터에서 사용됩니다.
- 특성이 정규분포(가우시안 분포)를 따른다고 가정합니다.
2. 멀티노미얼 나이브 베이즈(Multinomial Naive Bayes):
- 텍스트 데이터와 같이 이산형 특성(예: 단어 빈도수, 단어 등장 횟수)에서 사용됩니다.
3. 베르누이 나이브 베이즈(Bernoulli Naive Bayes):
- 이진 데이터(예: 단어의 존재 여부)에서 사용됩니다.
나이브 베이즈의 장점
- 간단하고 빠름:
- 계산량이 적고, 대규모 데이터셋에서도 빠르게 동작합니다.
- 적은 데이터로도 효과적:
- 작은 데이터셋에서도 높은 성능을 보일 수 있습니다.
- 스팸 필터링과 텍스트 분류에서 유용:
- 텍스트 데이터를 다룰 때 특히 좋은 성능을 보입니다.
- 다중 클래스 분류 지원:
- 여러 클래스를 동시에 처리할 수 있습니다.
나이브 베이즈의 단점
1. 조건부 독립 가정의 한계
- 현실 데이터에서 특성들이 종종 상관관계를 가지므로, 조건부 독립 가정이 성립하지 않을 수 있다
- 이로인해 성능이 떨어질 수 있습니다.
2. 데이터 희소성 문제
- 특정 클래스에서 어떤 값이 한 번도 등장하지 않으면, 해당 확률이 0 이되어 전체 확률 계산에 영향을 줍니다.
이를 해결하기 위해 라플라스 스무딩(Laplace Smoothing) 을 사용합니다.
3. 연속형 데이터 처리 제한
- 가우시안 나이브 베이즈 외의 변형에서는 연속형 데이터를 처리하기 어렵습니다.
나이브 베이즈의 활용 사례
- 텍스트 분류:
- 스팸 이메일 필터링, 감정 분석, 주제 분류 등.
- 의료 진단:
- 특정 증상을 기반으로 질병을 예측.
- 추천 시스템:
- 사용자 행동을 기반으로 콘텐츠 추천.
- 이상 탐지:
- 금융 거래에서 사기 탐지.
예시
- 데이터 로드 및 전처리
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 데이터 로드
data = load_breast_cancer()
X = data.data
y = data.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 데이터 스케일링
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
- 모델 학습
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
# 모델 생성 및 학습
model = GaussianNB()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")
'AI > ML' 카테고리의 다른 글
[ML] 비지도학습 - 군집화모델 (K-means Clustering) (0) | 2024.12.29 |
---|---|
[ML] 지도학습 - 분류모델 (의사결정나무) (2) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (KNN) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (SVM) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (로지스틱 회귀) (3) | 2024.12.29 |