logo

나이브 베이즈 분류기 알고리즘

  • Naïve Bayes 알고리즘은 다음을 기반으로 하는 지도 학습 알고리즘입니다. 베이즈 정리 분류 문제를 해결하는 데 사용됩니다.
  • 그것은 주로에서 사용됩니다 텍스트 분류 여기에는 고차원 교육 데이터 세트가 포함됩니다.
  • Naïve Bayes Classifier는 빠른 예측을 할 수 있는 빠른 기계 학습 모델을 구축하는 데 도움이 되는 간단하고 가장 효과적인 분류 알고리즘 중 하나입니다.
  • 확률적 분류기입니다. 즉, 객체의 확률을 기반으로 예측하는 것을 의미합니다..
  • Naive Bayes 알고리즘의 유명한 예는 다음과 같습니다. 스팸 필터링, 감성 분석, 기사 분류 .

Naive Bayes라고 불리는 이유는 무엇입니까?

Naïve Bayes 알고리즘은 Naïve와 Bayes라는 ​​두 단어로 구성되며 다음과 같이 설명할 수 있습니다.

    순진한: 특정 특징의 발생이 다른 특징의 발생과 무관하다고 가정하기 때문에 Naïve라고 합니다. 예를 들어 색깔, 모양, 맛을 기준으로 과일을 식별하면 빨간색, 구형 및 달콤한 과일이 사과로 인식됩니다. 따라서 각 특징은 서로 의존하지 않고 개별적으로 사과임을 식별하는 데 기여합니다.베이즈: 베이즈 정리(Bayes' Theorem)의 원리를 바탕으로 하기 때문에 베이즈라고 불린다.

베이즈 정리:

  • 베이즈 정리는 다음과 같이 알려져 있습니다. 베이즈의 법칙 또는 베이즈의 법칙 , 이는 사전 지식을 바탕으로 가설의 확률을 결정하는 데 사용됩니다. 조건부 확률에 따라 다릅니다.
  • 베이즈 정리의 공식은 다음과 같습니다.
나이브 베이즈 분류기 알고리즘

어디,

P(A|B)는 사후 확률입니다. : 관찰된 사건 B에 대한 가설 A의 확률입니다.

P(B|A)는 우도 확률입니다. : 가설의 확률이 참일 때 증거의 확률입니다.

P(A)는 사전 확률입니다. : 증거를 관찰하기 전 가설의 확률입니다.

P(B)는 한계 확률입니다. : 증거의 확률.

Naive Bayes의 분류기 작동:

Naïve Bayes의 분류기 작동은 아래 예를 통해 이해할 수 있습니다.

우리가 기상 조건 및 해당 대상 변수 ' 놀다 '. 따라서 이 데이터 세트를 사용하여 기상 조건에 따라 특정 날짜에 플레이할지 여부를 결정해야 합니다. 따라서 이 문제를 해결하려면 다음 단계를 따라야 합니다.

  1. 주어진 데이터세트를 빈도표로 변환합니다.
  2. 주어진 특징의 확률을 찾아 가능성 테이블을 생성합니다.
  3. 이제 베이즈 정리를 사용하여 사후 확률을 계산해 보겠습니다.

문제 : 날씨가 좋으면 플레이어가 플레이해야 할까요, 말아야 할까요?

해결책 : 이 문제를 해결하려면 먼저 아래 데이터세트를 고려하세요.

시야 놀다
0 비오는 날
1 화창한
2 흐린
흐린
4 화창한 아니요
5 비오는 날
6 화창한
7 흐린
8 비오는 날 아니요
9 화창한 아니요
10 화창한
열하나 비오는 날 아니요
12 흐린
13 흐린

기상 조건에 대한 빈도표:

날씨 아니요
흐린 5 0
비오는 날 2 2
화창한 2
10 5

가능성 테이블 기상 조건:

리눅스용 gzip
날씨 아니요
흐린 0 5 5/14= 0.35
비오는 날 2 2 4/14=0.29
화창한 2 5/14=0.35
모두 4/14=0.29 10/14=0.71

베이즈 정리 적용:

P(예|써니)= P(써니|예)*P(예)/P(써니)

P(써니|예)= 3/10= 0.3

P(써니)= 0.35

P(예)=0.71

따라서 P(예|써니) = 0.3*0.71/0.35= 0.60

Java 메소드의 배열

P(아니요|써니)= P(써니|아니요)*P(아니요)/P(써니)

P(맑음|NO)= 2/4=0.5

P(아니오)= 0.29

P(써니)= 0.35

따라서 P(No|Sunny)= 0.5*0.29/0.35 = 0.41

그럼 위의 계산에서 알 수 있듯이 P(예|써니)>P(아니오|써니)

따라서 화창한 날에도 Player는 게임을 할 수 있습니다.

나이브 베이즈 분류기의 장점:

  • Naïve Bayes는 데이터 세트 클래스를 예측하는 빠르고 쉬운 ML 알고리즘 중 하나입니다.
  • 이진 분류 및 다중 클래스 분류에 사용할 수 있습니다.
  • 다른 알고리즘에 비해 다중 클래스 예측에서 잘 수행됩니다.
  • 가장 인기있는 선택입니다. 텍스트 분류 문제 .

나이브 베이즈 분류기의 단점:

  • Naive Bayes는 모든 기능이 독립적이거나 관련이 없다고 가정하므로 기능 간의 관계를 학습할 수 없습니다.

나이브 베이즈 분류기의 응용:

  • 그것은에 사용됩니다 신용 점수 .
  • 그것은에서 사용됩니다 의료 데이터 분류 .
  • 그것은에서 사용될 수 있습니다 실시간 예측 Naïve Bayes Classifier는 열성적인 학습자이기 때문입니다.
  • 다음과 같은 텍스트 분류에 사용됩니다. 스팸 필터링 그리고 감성분석 .

Naive Bayes 모델의 유형:

Naive Bayes 모델에는 다음 세 가지 유형이 있습니다.

    가우스: 가우시안 모델은 특징이 정규 분포를 따른다고 가정합니다. 이는 예측자가 이산형 값 대신 연속형 값을 취하는 경우 모델은 이러한 값이 가우스 분포에서 샘플링된 것으로 가정함을 의미합니다.다항식: 다항 Naïve Bayes 분류기는 데이터가 다항 분포일 때 사용됩니다. 주로 문서 분류 문제에 사용되며, 특정 문서가 스포츠, 정치, 교육 등과 같은 범주에 속하는 것을 의미합니다.
    분류기는 예측 변수에 대한 단어의 빈도를 사용합니다.베르누이: Bernoulli 분류기는 다항 분류기와 유사하게 작동하지만 예측 변수는 독립 부울 변수입니다. 예를 들어 문서에 특정 단어가 있는지 여부 등이 있습니다. 이 모델은 문서 분류 작업으로도 유명합니다.

Naïve Bayes 알고리즘의 Python 구현:

이제 Python을 사용하여 Naive Bayes 알고리즘을 구현하겠습니다. 따라서 이를 위해 ' 사용자 데이터 ' 데이터세트 , 우리는 다른 분류 모델에서 사용했습니다. 따라서 Naive Bayes 모델을 다른 모델과 쉽게 비교할 수 있습니다.

구현 단계:

  • 데이터 전처리 단계
  • 훈련 세트에 Naive Bayes 피팅
  • 테스트 결과 예측
  • 결과의 정확성 테스트(혼란행렬 생성)
  • 테스트 세트 결과 시각화.

1) 데이터 전처리 단계:

이 단계에서는 데이터를 코드에서 효율적으로 사용할 수 있도록 데이터를 사전 처리/준비합니다. 이는 데이터 사전 처리에서 했던 것과 유사합니다. 이에 대한 코드는 다음과 같습니다.

 Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd # Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test) 

위 코드에서는 '를 사용하여 데이터 세트를 프로그램에 로드했습니다. 데이터 세트 = pd.read_csv('user_data.csv') . 로드된 데이터 세트는 학습 세트와 테스트 세트로 구분된 후 특성 변수의 크기를 조정했습니다.

데이터 세트의 출력은 다음과 같이 제공됩니다.

나이브 베이즈 분류기 알고리즘 1

2) Naive Bayes를 훈련 세트에 맞추기:

사전 처리 단계가 끝나면 이제 Naive Bayes 모델을 훈련 세트에 맞추겠습니다. 아래는 그에 대한 코드입니다:

자바 교체
 # Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train) 

위의 코드에서는 GaussianNB 분류기 훈련 데이터 세트에 맞추는 것입니다. 요구 사항에 따라 다른 분류자를 사용할 수도 있습니다.

산출:

 Out[6]: GaussianNB(priors=None, var_smoothing=1e-09) 

3) 테스트 세트 결과 예측:

이제 테스트 세트 결과를 예측하겠습니다. 이를 위해 새로운 예측변수를 생성하겠습니다. y_pred , 예측 기능을 사용하여 예측을 수행합니다.

 # Predicting the Test set results y_pred = classifier.predict(x_test) 

산출:

나이브 베이즈 분류기 알고리즘 2

위 출력은 예측 벡터에 대한 결과를 보여줍니다. y_pred 그리고 실수 벡터 y_test. 일부 예측은 실제 값과 다르며 이는 잘못된 예측임을 알 수 있습니다.

4) 혼동 행렬 만들기:

이제 Confusion Matrix를 사용하여 Naive Bayes 분류기의 정확성을 확인하겠습니다. 아래는 그에 대한 코드입니다:

 # Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) 

산출:

나이브 베이즈 분류기 알고리즘 3

위의 혼동 행렬 출력에서 ​​볼 수 있듯이 7+3= 10개의 잘못된 예측과 65+25=90개의 올바른 예측이 있습니다.

5) 훈련 세트 결과 시각화:

다음으로 Nave Bayes Classifier를 사용하여 훈련 세트 결과를 시각화하겠습니다. 아래는 그에 대한 코드입니다:

 # Visualising the Training set results from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

산출:

나이브 베이즈 분류기 알고리즘 4

위 출력에서 ​​Nave Bayes 분류기가 데이터 포인트를 미세한 경계로 분리했음을 알 수 있습니다. 우리가 사용한 가우시안 곡선입니다. 가우시안NB 우리 코드의 분류자.

6) 테스트 세트 결과 시각화:

 # Visualising the Test set results from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

산출:

나이브 베이즈 분류기 알고리즘 5

위 출력은 테스트 세트 데이터의 최종 출력입니다. 보시다시피 분류기는 '구매함' 변수와 '구매하지 않음' 변수를 나누기 위해 가우스 곡선을 만들었습니다. 혼동 행렬에서 계산한 몇 가지 잘못된 예측이 있습니다. 하지만 여전히 꽤 좋은 분류기입니다.