본문 바로가기
AI & 머신러닝 coding skill

머신러닝 분류 - 사이킷런을 활용한 나이브 베이즈 분류

by 호빵님 2022. 5. 24.
반응형

사이킷런을 활용한 나이브 베이즈 분류

이전 실습에서는 메일 내에서 스팸 및 정상 메일을 분류할 때,

  • X = ‘확인’ 키워드 유무(O or X)
  • Y = 메일 결과 (스팸 or 정상)

로, 입력값 X의 개수가 1개였습니다.

하지만, 만약 이메일에서 ‘확인’ 키워드 말고도 ‘.exe 첨부파일’을 보냈는지, 안보냈는지 혹은 메일 제목에 대괄호가 쓰였는지/안쓰였는지 등의 다양한 입력값이 추가되어 스팸메일을 분류한다면, 문제가 좀 더 복잡해 질 것 같습니다.

이러한 복잡한 문제 해결을 위하여 사이킷런에는 나이브 베이즈 분류 모델을 구현하여, 모듈 호출을 통해 간단히 나이브 베이즈 분류를 사용할 수 있도록 하였습니다.

이번 실습에서는 Wine 데이터를 활용하여 나이브 베이즈 분류 방법 중 하나인 가우시안 나이브 베이즈 모델을 학습시키고 분류가 잘 되었는지 확인해보겠습니다. ‘가우시안’은 ‘데이터들의 분포가 평균값을 중심으로 대칭적인’이라는 뜻입니다.

특히 가우시안 나이브 베이즈 모델은 ‘확인’키워드 유무(O or X)와 같은 이산적 데이터가 아닌 연속적인 값(예를 들어 3.14…)을 가진 데이터에 적용할 수 있다는 특징을 가지고 있습니다.


가우시안 나이브 베이즈를 위한 사이킷런 함수/라이브러리

  • sklearn.naive_bayes.GaussianNB : 가우시안 나이브 베이즈 모델을 불러 옵니다.
  • GaussianNB(): 가우시안 나이브 베이즈 모델을 정의합니다.
  • [Model].fit(X, y): (X, y) 데이터셋에 대해서 모델을 학습시킵니다.
  • [Model].predict(X): X 데이터를 바탕으로 예측되는 값을 반환합니다.

 

from sklearn.datasets import load_wine

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

"""
1. 데이터를 불러오고, 
   불러온 데이터를 학습용, 테스트용 데이터로 
   분리하여 반환하는 함수를 구현합니다.
   
   Step01. 사이킷런에 저장되어 있는 데이터를 
           (X, y) 형태로 불러옵니다.
   
   Step02. 불러온 데이터를 
           학습용 데이터와 테스트용 데이터로 분리합니다.
           
           학습용 데이터 : 80%, 테스트용 데이터 : 20%, 
           
           일관된 결과 확인을 위해 random_state를 
           0 으로 설정합니다.
"""
def load_data():
    
    X, y = load_wine(return_X_y = True)
    
    print("데이터 확인해보기 :\n", X[:1])
    
    train_X, test_X, train_y, test_y = train_test_split(X, y, test_size = 0.2, random_state = 0)
    
    return train_X, test_X, train_y, test_y
    
"""
2. 가우시안 나이브 베이즈 모델을 불러오고,
   학습을 진행한 후 테스트 데이터에 대한 
   예측값을 반환하는 함수를 구현합니다.
   
   Step01. 가우시안 나이브 베이즈 모델을 정의합니다.
   
   Step02. 학습용 데이터에 대해 모델을 학습시킵니다.
   
   Step03. 테스트 데이터에 대한 모델 예측을 수행합니다.
"""
def Gaussian_NB(train_X, test_X, train_y, test_y):
    
    model = GaussianNB()
    
    model.fit(train_X, train_y)
    
    predicted = model.predict(test_X)
    
    return predicted
    
# 데이터 불러오기, 모델 예측 결과를 확인할 수 있는 함수입니다.
def main():
    
    train_X, test_X, train_y, test_y = load_data()
    
    predicted = Gaussian_NB(train_X, test_X, train_y, test_y)
    
    ## 모델 정확도를 통해 분류 성능을 확인해봅니다.
    print("\nModel Accuracy : ")
    print(accuracy_score(test_y, predicted))

if __name__ == "__main__":
    main()

 

 

 

*본 포스팅은 DX기업교육 플랫폼인 Elice academy의 머신러닝 심화 과정에서 실습한 코드를 이용해서 작성되었습니다.

https://elice.io/

 
 
 

올인원 디지털 교육 플랫폼 - 엘리스

우리 모두를 위한 교실, 엘리스와 함께 더 나은 기회를 만들어보세요

elice.io

 

 

반응형