나이브 베이즈 분류기를 사용한 데이터셋 분석

이 기사에서는 다음을 포함하여 Naive Bayes 분류기와 관련된 몇 가지 사항에 대해 설명합니다.
  • Naive Bayes 소개.
  • Scikit-Learn을 사용하는 Naive Bayes.

  • 1. 나이브 베이즈 소개.



    Naive Bayes 분류기는 기계 학습의 분류 알고리즘이며 감독 학습에 포함됩니다. 이 알고리즘은 Thomas Bayes가 만든 Bayes Theorem을 기반으로 합니다. 따라서 나이브 베이즈 분류기를 사용하기 전에 먼저 베이즈 정리를 이해해야 합니다.

    베이즈 정리의 핵심은 조건부 확률입니다. 조건부 확률은 어떤 일이 이미 발생했을 때 어떤 일이 일어날 확률입니다. 조건부 확률을 사용하여 이전 이벤트에 대한 지식이 주어졌을 때 이벤트가 발생할 확률을 알아낼 수 있습니다.


  • P(A|B) = 사후 확률, B의 값이 주어진 A의 확률.
  • P (B|A) = 주어진 A가 참인 B의 우도.
  • P(A) = 사전 확률, 사건 A의 확률.
  • P(B) = 한계 확률, 사건 B의 확률.

  • 베이즈 정리의 기초를 사용하여 나이브 베이즈 분류기 공식은 다음과 같이 작성할 수 있습니다.


  • P (y | x1, … , xj) = 사후 확률(Posterior Probability), xj까지 특징이 x1인 클래스 y에 포함된 데이터의 확률.
  • P (x1, … , xj | y) = 해당 클래스가 y인 경우 기능 값의 가능성.
  • P(y) = 사전 확률.
  • P(x1, … , xj) = 한계 확률.

  • 순진한 베이즈 분류기의 계산에서 한계 확률은 항상 동일하게 유지되므로 한계 확률 계산을 무시할 수 있습니다. Naive Bayes 분류기에서 우리는 가장 큰 사후 확률 값을 기반으로 데이터 포인트의 클래스를 결정합니다.

    2. Scikit-Learn을 사용한 Naive Bayes.



    이제 Naive Bayes 분류기 알고리즘을 수동으로 계산하는 방법을 알았으므로 Scikit-learn을 쉽게 사용할 수 있습니다. Scikit-learn은 기계 학습 구현에 사용되는 Python 라이브러리 중 하나입니다. 저는 여기에서 Gaussian Naive Bayes Classifier를 사용하고 있으며 제가 사용하는 데이터 세트는 글래스 분류이며 이 문서의 끝에서 다운로드할 수 있습니다.

    Naive Bayes 분류기를 사용하여 분류 문제를 해결하는 단계는 다음과 같습니다.
  • 라이브러리 로드
  • 데이터 세트 로드
  • 데이터 시각화
  • 누락된 값 처리
  • 탐색적 데이터 분석(EDA)
  • 모델링

  • 1. 이 경우 작업에 사용할 여러 Python 라이브러리를 로드합니다.

     import pandas as pd
     import numpy as np
     import matplotlib.pyplot as plt
     import seaborn as sns
     from sklearn.naive_bayes import GaussianNB
     from sklearn.metrics import accuracy_score
     from sklearn.model_selection import train_test_split
     import warnings
     warnings.filterwarnings('ignore')
    

    2. 이 사례 작업에 사용할 데이터 세트를 로드합니다. 사용된 데이터 세트는 유리 데이터 세트입니다.

      glass=pd.read_csv("glass.csv")
    

    3. 데이터의 일반 정보를 살펴보고 일반적으로 데이터의 특성을 파악합니다.

      #Top five of our data
      glass.head()
    


    :

      #Last five of our data
      glass.tail() 
    


    :

      #Viewing the number of rows (214) and number of columns / 
      features (10)
      glass.shape
    



    4. 데이터에서 누락된 값이 있으면 처리하고, 없으면 다음 단계로 진행할 수 있습니다.

      #Data is clean and can continue to the Explorary Data 
      Analysis stage
      glass.isnull().sum()
    



    5. 데이터의 특성에 대해 자세히 알아보기 위한 탐색적 데이터 분석:

     #Univariate analysis Type (Target features).
     sns.countplot(df['Type'], color='red')
    



    6. Scikit-Learn의 Gaussian Naive Bayes로 데이터 모델링:

    #Create a Naive Bayes object
    nb = GaussianNB()
    #Create variable x and y.
    x = glass.drop(columns=['Type'])
    y = glass['Type']
    #Split data into training and testing data 
    x_train, x_test, y_train, y_test = train_test_split(x, y, 
    test_size=0.2, random_state=4)
    #Training the model
    nb.fit(x_train, y_train)
    #Predict testing set
    y_pred = nb.predict(x_test)
    #Check performance of model
    print(accuracy_score(y_test, y_pred))
    



    정확도 점수에서 값이 48%임을 알 수 있으며 제 생각에는 여전히 다시 개선해야 합니다.
    내 분석에 따르면 Naive Bayes 모델의 정확도 값이 이렇게 낮은 이유는 불균형한 데이터 때문입니다. 따라서 모델의 정확도를 개선하기 위해 사용할 방법 중 하나는 데이터 균형 조정입니다.

    데이터세트 링크: https://www.kaggle.com/uciml/glass/download

    좋은 웹페이지 즐겨찾기