나이브 베이즈(Naive Bayes)는 서로 조건부 독립인 피처를 가정하고, 베이즈 이론을 기반으로 하는 머신러닝 알고리즘입니다.
베이즈 정리란 두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나타내는 정리입니다.
즉, 어떤 사건이 서로 배반하는 원인 둘에 의해 일어난다고 할 때 실제 사건이 일어났을 때 이것이 두 원인 중 하나일 확률을 구하는 정리를 베이즈의 정리라고 합니다.
공식은 다음과 같습니다.
베이즈 확률론 해석에 따르면 베이즈 정리는 사전확률로부터 사후확률을 구할 수 있습니다.
이러한 베이즈 정리는 불확실성 하에서 의사결정 문제를 수학적으로 다룰 때 사용됩니다.
예를 들어 다음과 같이 날씨에 따라 축구를 진행했는지 여부를 나타내는 데이터를 나이브 베이즈를 이용해 분류해 봅시다.
빈도 수를 나타내는 Frequency Table를 기반으로 Likelihood Table 1은 날씨 Feature에 대한 사전 확률이고,
Likelihood Table 2는 날씨 Feature에 대한 사후 확률입니다.
먼저 축구 진행 확률에 대하여 알아보겠습니다.
[사전 확률]
P(Overcast) = Overcast 수 / 전체 날씨 수 = 4 / 14
P(Yes) = 9 / 14
[사후 확률]
P(Overcase | Yes) = 4 / 9 = 0.44
베이즈 정리에 따라
P(Yes | Overcast) = P(Overcast | Yes)P(Yes) / P(Overcast) = 0.44 * 0.64 / 0.29 = 0.98
다음으로 축구를 진행하지 않을 확률은 다음과 같습니다.
[사전 확률]
P(Overcast) = 4 / 14 = 0.29
P(No) = 5 / 14 = 0.36
[사후 확률]
P(Overcast | No) = 0 / 5 = 0
베이즈 정리에 따라
P(No | Overcast) = P(Overcast | No)P(No) / P(Overcast) = 0 * 0.36 / 0.29 = 0
축구를 진행할 확률 0.98, 축구를 진행하지 않을 확률 0 중 축구를 진행할 확률이 더 높기때문에
나이브 베이즈 분류기는 Overcaset일 때 축구를 진행할 것이라고 판단합니다.
정리하면, 베이즈 정리를 기반으로 Yes, No의 확률을 각각 구하고 이 중 높은 확률을 선택하는것이
나이브 베이즈 알고리즘입니다.
나이브 베이즈는 간단하고 빠르며 노이즈와 누락 데이터를 잘 처리하는 장점이 있습니다.
실습은 sklearn GaussianNB를 이용하여 와인 데이터를 분류해 보겠습니다.
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import recall_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
# 데이터 불러오기
raw_wine = datasets.load_wine()
# 피쳐, 타겟 데이터 지정
X = raw_wine.data
y = raw_wine.target
# 트레이닝/테스트 데이터 분할
X_tn, X_te, y_tn, y_te=train_test_split(X,y,random_state=0)
# 데이터 표준화
std_scale = StandardScaler()
std_scale.fit(X_tn)
X_tn_std = std_scale.transform(X_tn)
X_te_std = std_scale.transform(X_te)
# 나이브 베이즈 학습
clf_gnb = GaussianNB()
clf_gnb.fit(X_tn_std, y_tn)
# 예측
pred_gnb = clf_gnb.predict(X_te_std)
print(pred_gnb)
# 리콜
recall = recall_score(y_te, pred_gnb, average='macro')
print(recall)
# confusion matrix 확인
conf_matrix = confusion_matrix(y_te, pred_gnb)
print(conf_matrix)
# 분류 레포트 확인
class_report = classification_report(y_te, pred_gnb)
print(class_report)
'AI > Machine Learning' 카테고리의 다른 글
[Machine Learning] 서포트 벡터 머신 (Support Vector Machine, SVM) (1) | 2023.05.31 |
---|---|
[Machine Learning] 의사결정나무 (Decision Tree) (0) | 2023.05.25 |
[Machine Learning] 로지스틱 회귀 (Logistic Regression) (1) | 2022.09.29 |
[Machine Learning] 라쏘, 릿지, 엘라스틱넷 (Ridge, Lasso, ElasticNet) (0) | 2022.09.28 |
[Machine Learning] 선형 회귀 (Linear Regression) (0) | 2022.09.28 |