나이브 베이즈 ( naive bayes ) 분류기는 앞에서 설명한 선형 모델과 매우 유사하다.
LogisticRegression 이나 LinearSVC 같은 선형 분류기보다 훈련 속도가 빠른 편이지만 , 그 대신 일반화 성능이 조금 느리다.
나이브 베이즈 분류기가 효과적인 이유는 각 특성을 개별로 취급해 파라미터를 학습하고 ,
각 특성에서 클래스별 통계를 단순하게 취합하기 때문이다 .
scikit-learn에 구현된 나이브 베이즈 분류기는 GaussianNB , BernoulliNB , MultinomialNB 이렇게 세가지이다.
GaussianNB는 연속적인 어떤 데이터에도 적용할 수 있고 BernoulliNB는 이진 데이터
MultinomialNB는 카운트 데이터 ( 특성이 어떤 것을 헤아린 정수 카운트로 , 예를 들면 문장에 나타난 단어의 횟수 ) 에 적용 된다 .
BernoulliNB , MultinomialNB는 대부분 텍스트 데이터를 분류할 때 사용한다 .
BernoulliNB 분류기는 각 클래스의 특성 중 0이 아닌 것이 몇 개인지 센다.
예를 보면 쉽게 이해할 수 있다.
import numpy as np
X = np.array([[0, 1, 0, 1],
[1, 0, 1, 1],
[0, 0, 0, 1],
[1, 0, 1, 0]]
)
y = np.array([0, 1, 0, 1])
이진 특성을 4개 가진 데이터 포인트가 4개 있다 .
클래스는 0과 1 두개이다.
출력 y의 클래스가 0인 경우 ( 첫 번째와 세 번쨰 데이터 포인트 )
첫 번째 특성은 0이 두 번이고 , 0이 아닌 것은 한 번도 없다.
두 번째 특성은 0이 한 번이고 1도 한 번이다.
같은 방식으로 두 번째 클래스에 해당하는 데이터 포인트에 대해서도 계산한다.
클래스별로 0이 아닌 원소를 세는 과정을 요약한다면 다음과 같다 .
counts = {}
for label in np.unique(y):
# 클래스마다 반복
# 특성마다 1이 나타난 횟수를 센다.
counts[label] = X[ y == label].sum(axis=0)
print("attributes Count : \n{}".format(counts))
결과값은 다음과 같다 .
attributes Count :
{0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}
다른 두 나이브 베이즈 모델 MultinomialNB와 GaussianNB는 계산하는 통계 데이터의 종류가 조금 다르다.
MultinomialNB는 클래스별로 특성의 평균을 계산하고
GaussianNB는 클래스별로 각 특성의 표준편차와 평균을 저장한다 .
예측할 땐 데이터 포인트를 클래스의 통계 값과 비교해서 가장 잘 맞는 클래스를 예측값으로 한다.
MultinomialNB와 BernoulliNB의 예측 공식은 선형 모델과 형태가 같다.
장단점과 매개변수
MultinomialNB와 BernoulliNB는 모델의 복잡도를 조절하는 alpha 매개변수 하나를 가지고 있다.
alpha가 주어지면 알고리즘이 모든 특성에 양의 값을 가진 가상의 데이터 포인트를 alpha 개수만큼 추가한다.
이는 통계 데이터를 완만하게 만들어 준다 .
alpha가 크면 더 완만해지고 모델의 복잡도는 낮아진다.
alpha에 따른 알고리즘 성능 변동은 비교적 크지 않아서 , alpha 값이 성능 향상에 크게 기여하지 않는다 .
그러나 , 이 값을 조정하면 어느 정도는 정확도를 높일 수 있다.
GaussianNB는 대부분 매우 고차원인 데이터셋에 사용하고 , 다른 두 나이브 베이즈 모델은 텍스트 같은 희소한
데이터를 카운트하는데 사용한다 .
MultinomialNB는 보통 0이 아닌 특성이 비교적 많은 데이터셋에서 BernoulliNB보다 성능이 높다.
나이브 베이즈 모델과 선형 모델의 장단점은 비슷하다 .
훈련과 예측 속도가 빠르며 , 훈련 과정을 이해하기 쉽다.
희소한 고차원 데이터에서 잘 작동하며 , 비교적 매개변수에 민감하지 않다.
선형 모델로는 학습 시간이 너무 오래 걸리는 매우 큰 데이터셋에는 나이브 베이즈 모델을
시도해볼 만 하다 .
'학부공부 > 빅데이터기술' 카테고리의 다른 글
기획이란 무엇인가 (0) | 2019.05.27 |
---|---|
가중치 ( weight ) (0) | 2019.04.09 |
라쏘 (Lasso) (0) | 2019.04.08 |
릿지 ( Lidge ) (0) | 2019.04.08 |
최소제곱법 ( ordinary least squares ) - based on Extended_Boston datasets (0) | 2019.04.07 |
#IT #먹방 #전자기기 #일상
#개발 #일상