나이브 베이즈 분류기(Naive Bayes Classifier)



 나이브 베이즈 분류기는 베이즈 정리를 기반으로 한 분류기이다

베이즈 정리(Bayes Rule)

두 확률변수의 사전확률과 사후확률의 관계를 나타내는 정리

특정한 사건이 일어날 확률과 기존의 데이터를 이용하여 새 데이터가 들어왔을때 사건이 일어날 확률을 계산할 수 있다

나이브 베이즈는 특징값들이 서로 독립이라는 가정을 세운 베이즈 분류기이다. 즉, 사과의 특징인 빨갛다, 둥글다, 지름 10cm등의 특징들이 성호 연관이 없고 사과일 확률에 각각 독립적으로 기여하는 경우를 뜻한다. 

 분류기 자체가 나이브 베이즈를 모델로 삼고 있기 때문에 나이브 베이즈 분류기는 조건부 확률 모델이다. N개의 특징을 갖는 입력값을 벡터로 표현할 수 있으며, k개의 클래스중 하나로 분류할 확률을 다음과 같이 나타낼 수 있다.

위의 식은 조건부 확률로 아래와 같이 나타낼 수 있다

베이즈 정리에 의해 분자부분이 결합확률 모델임을 알 수 있다. 각 특징들은 서로 독립적이므로 다음과 같이 정리할 수 있다.

나이브 베이즈에서의 조건부 독립성

이로써 각 입력값에 대해 특정 클래스에 속할 확률을 구할 수 있다. 위의 식을 이용하여 분류기를 만드는 것은 간단하다. 확률이 가장 큰 값을 갖는 클래스를 선택하면 되므로 분류기는 아래와 같이 표현할 수 있다

아래의 예제는 실제 데이터셋을 가지고 학습을 시키는 예제이다


import numpy as np
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn import cross_validation

from utilities import visualize_classifier

input_file = 'data_multivar_nb.txt'
data = np.loadtxt(input_file, delimiter=',')
x,y = data[:,:-1], data[:,-1]
#분류기 생성
classifier = GaussianNB()

#분류기 학습
classifier.fit(x,y)

#학습한 분류기로 예측한 결과 구하기
pred = classifier.predict(x)

#정확도 계산
accuracy = 100 * (y == pred).sum()/x.shape[0]
print("Accuracy = ",accuracy)
visualize_classifier(classifier,x,y)

실제로 학습 모델의 정확도를 판별하기 위해서는 교차검증을 해야 맞지만 본 예제에서는 생략하도록 한다


'파이썬으로 배우는 인공지능' 카테고리의 다른 글

K-평균 알고리즘  (1) 2018.12.19
의사결정 트리(Decision Trees)  (0) 2018.12.17
서포트 벡터 머신(Support Vector Machine)  (1) 2018.12.16
로지스틱 회귀 분류기  (0) 2018.11.24
데이터 전처리  (0) 2018.11.22

WRITTEN BY
텐초
딥러닝 관련 논문들과 코드를 완벽분석 합니다

,