본문 바로가기
프로그래밍/Scikit-Learn

[Scikit-Learn] 8. 나이브 베이즈(Naive Bayes) 분류기 학습하기(feat. GaussianNB, CategoricalNB, MultinomialNB)

by 부자 꽁냥이 2022. 6. 18.

이번 포스팅에서는 Scikit-Learn에서 나이브 베이즈 분류기(Naive Bayes Classifier)를 학습하는 방법에 대해서 알아본다. 나이브 베이즈 분류기(Naive Bayes Classifier)는 설명 변수가 범주형, 빈도수 그리고 연속형인지에 따라 다른 방법으로 학습한다. 각각 살펴보자.

 

1. 범주형 변수(CategoricalNB)

2. 빈도수(MultinomialNB)

3. 연속형 변수(GaussianNB)

 

나이브 베이즈 분류기(Naive Bayes Classifier)에 대한 개념은 아래 포스팅에 소개해놓았니 관심 있는 분들은 보시기 바란다.

 

[머신 러닝] 4. 나이브 베이즈 분류기(Naive Bayes Classifier) with Python

 

[머신 러닝] 4. 나이브 베이즈 분류기(Naive Bayes Classifier) with Python

이번 포스팅에서는 나이브 베이즈 분류기(Naive Bayes Classifier : NBC)에 대해서 알아보려고 한다. 먼저 나이브 베이즈 분류기를 알아보기 전에 베이즈 분류기에 대해서 알면 좋다. 왜냐하면 베이즈

zephyrus1111.tistory.com

 


   1. 범주형 변수(CategoricalNB)

마땅한 데이터가 없어서 Numpy를 통해 범주형 변수를 갖는 임시 데이터를 만들어 주었다. Scikit-Learn에서는 범주형 설명 변수가 있을 경우 CategoricalNB 클래스를 통해 나이브 베이즈 분류기(Naive Bayes Classifier)를 학습할 수 있다.

 

CategoricalNB 클래스는 alpha를 이용해 Laplace Smooting(Additive Smoothing)을 설정할 수 있다. 클래스를 생성하고 fit 메서드에 설명 변수 행렬 X와 라벨 y를 차례대로 넣어주면 된다. 더 자세한 설명은 여기를 참고하기 바란다.

 

import numpy as np
from sklearn.naive_bayes import CategoricalNB

rng = np.random.RandomState(100)

num_data=50
num_feature=10
X = rng.randint(5, size=(num_data, num_feature))
y = np.random.randint(6, size=num_data)

clf = CategoricalNB(
                alpha=0.8 ## Laplace Smoothing 파라미터
                ).fit(X, y)

 

학습이 끝나고 예측과 정확도 등을 계산할 수 있다.

 

## 예측
print(clf.predict(X)[:3]) 
print(clf.get_params()) ## CategoricalNB 클래스 인자 설정 정보
print('정확도 : ', clf.score(X,y)) ## 성능 평가 점수(Accuracy

 

sklearn 나이브 베이즈 분류기


   2. 빈도수(MultinomialNB)

여기서도 마땅한 데이터가 없어서 Numpy를 통해 빈도수 변수를 갖는 임시 데이터를 만들어 주었다. Scikit-Learn에서는 빈도수를 나타내는 설명 변수가 있을 경우 MultinomialNB 클래스를 통해 나이브 베이즈 분류기(Naive Bayes Classifier)를 학습할 수 있다.

 

MultinomialNB 클래스도 CategoricalNB과 마찬가지로 alpha를 이용해 Laplace Smooting(Additive Smoothing)을 설정할 수 있다. 클래스를 생성하고 fit 메서드에 설명 변수 행렬 X와 라벨 y를 차례대로 넣어주면 된다. 더 자세한 설명은 여기를 참고하기 바란다.

 

import numpy as np
from sklearn.naive_bayes import MultinomialNB

rng = np.random.RandomState(50)

num_data=50
num_feature=10
X = rng.randint(5, size=(num_data, num_feature))
y = np.random.randint(6, size=num_data)

clf = MultinomialNB(
                alpha=0.8 ## Laplace Smoothing 파라미터
                ).fit(X, y)

 

학습이 끝나고 예측과 정확도 등을 계산할 수 있다.

 

 

## 예측
print(clf.predict(X)[:3]) 
print(clf.get_params()) ## MultinomialNB 클래스 인자 설정 정보
print('정확도 : ', clf.score(X,y)) ## 성능 평가 점수(Accuracy

sklearn 나이브 베이즈 분류기


   3. 연속형 변수(GaussianNB)

여기서는 붓꽃 데이터를 이용하여 연속형 변수에 대한 나이브 베이즈 분류기(Naive Bayes Classifier)를 학습한다. Scikit-Learn에서 GaussianNB 클래스를 이용하여 학습할 수 있다. 여기에서는 인자를 따로 설정하진 않았다. 자세한 인자들이 궁금하신 분들은 여기를 참고하기 바란다.

 

import pandas as pd
import warnings
warnings.filterwarnings('ignore')
 
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
 
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = [iris.target_names[x] for x in iris.target]
 
X = df.drop('species', axis=1)
y = df['species']
 
clf = GaussianNB().fit(X,y)

 

학습이 끝나고 다음과 같이 예측, 성능을 평가 할 수 있다.

 

## 예측
print(clf.predict(X)[:3]) 
print(clf.get_params()) ## GaussianNB 클래스 인자 설정 정보
print('정확도 : ', clf.score(X,y)) ## 성능 평가 점수(Accuracy)

 

sklearn 나이브 베이즈 분류기


댓글


맨 위로