최종 수정 일자: 2020-06-14 15:35
해당 카테고리에 작성되는 글은 Introduction to Machine Learning with Python(파이썬 라이브러리를 활용한 머신 러닝)을 기반으로 작성되었습니다.
나이브 베이즈(Naïve Bayes) 분류는 linear model과 유사한 분류기의 모음이며, linear model에 비해 더 빠르다는 장점이 있지만 일반화 성능이 떨어진다는 단점이 있습니다. 나이브 베이즈 모델이 학습을 효율적으로 하는 이유는 개별 특성에 대해서 학습을 진행하며 각 특성에서 단순한 통계적 데이터를 수집하여 학습하기 때문입니다.
scikit-learn 패키지에서 제공하는 나이브 베이즈 분류에는 GaussianNB, BernoulliNB, MultinomialNB 세 가지가 있습니다. Gaussian NB는 연속적인 데이터에 적용 가능하며 BernoulliNB는 이진 데이터에 적용 가능합니다. MultinomialNB는 각 특성이 어떤 것의 개수를 나타내는 정수값을 가질 때 사용합니다. BernoulliNB와 MultinomialNB는 대부분 텍스트 자료 분류에 사용됩니다.
BernoulliNB 분류기는 각 class의 모든 특성에서 0이 아닌 횟수를 셉니다. 다음의 예를 봅시다.
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]) counts = {} for label in np.unique(y): # iterate over each class # count (sum) entries of 1 per feature counts[label] = X[y == label].sum(axis=0) print("Feature counts:\n{}".format(counts)) |
결과)
Feature counts: {0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])} |
네 개의 데이터 포인트는 각각 네 개의 특성을 갖고 있으며 값이 0 또는 1인 이진 형식입니다. class도 마찬가지로 0과 1이 있습니다. class 0에 대해 첫 번째 특성의 0은 두 번 나타나며 0이 아닌 값은 나타나지 않습니다. 두 번째 특성이 0인 데이터는 하나, 0이 아닌 데이터도 하나 입니다. 이런 방식으로 각 데이터 포인트에 대해 다음 클래스에도 이뤄집니다. 결과인 Feature counts를 보시면 class 0의 경우 각 특성이 0이 아닌 값으로 등장하는 횟수가 나타나며 마찬가지로 class 1의 경우 각 특성이 0이 아닌 값으로 등장하는 횟수가 나타납니다.
다른 두 나이브 베이즈 모델은 사용하는 통계적 방식이 조금 다릅니다. MultinomialNB는 각 class에 대해 각 특성의 평균값을 고려합니다. GaussianNB는 평균뿐 만 아니라 각 특성의 표준편차도 고려합니다.
모델이 예측을 할 때는 각 클래스에 대한 통계적 분석이 비교되면서 가장 잘 맞는 class가 라벨링됩니다. 흥미롭게도 MultinomialNB와 BernoulliNB는 모두 linear model과 같은 예측 공식으로 나타납니다. 그러나 나이브 베이즈 모델의 coef_는 linear model과는 다른 의미를 갖습니다.
장점, 단점, 매개변수
Gaussian NB는 높은 차원을 가진 데이터에 대개 사용합니다. 다른 두 나이브 베이즈 모델은 텍스트와 같이 sparse count data에 사용됩니다. MultinomialNB가 BinaryNB에 비해 더 성능이 좋으며 특히, 상대적으로 많은 수의 0이 아닌 특성을 가진 데이터 셋에서 더욱 그러합니다.
나이브 베이즈 모델은 linear model과 장단점을 많이 공유합니다. 학습과 예측이 빠르고 학습 과정이 이해하기 쉽다는 장점이 있습니다. 높은 차원의 sparse date에서 잘 작동하며 매개 변수에 따라 크게 성능이 달라지지는 않습니다.
MultinomialNB와 BernoulliNB는 매개변수로 alpha값을 이용하며 앞서 등장한 다른 모델에서의 alpha와 마찬가지로 모델 복잡도를 조절합니다. alpha를 키우면 통계적 분석이 부드럽게(?) 이뤄지며 덜 복잡한 모델을 만들게 됩니다. 알고리즘의 성능은 alpha의 설정에 상대적으로 그렇게 영향을 많이 받지는 않습니다. 그러나 어쨌든 모델의 튜닝으로 정확도를 어느정도 올릴 수 있다는 것이 중요합니다.
'Python-머신 러닝 > Python-지도 학습 알고리즘' 카테고리의 다른 글
2. 지도 학습 알고리즘 (5) Ensembles of Decision Trees (Random Forest) (0) | 2020.06.14 |
---|---|
2. 지도 학습 알고리즘 (4) Decision Trees (0) | 2020.06.14 |
2. 지도 학습 알고리즘 (2) Linear Model (0) | 2020.06.14 |
2. 지도 학습 알고리즘 (1) k-Nearest Neighbors (k-NN) (0) | 2020.06.14 |
2. 지도 학습 알고리즘-데이터 셋 다루기 (0) | 2020.06.13 |