- Naïve Bayes 알고리즘은 다음을 기반으로 하는 지도 학습 알고리즘입니다. 베이즈 정리 분류 문제를 해결하는 데 사용됩니다.
- 그것은 주로에서 사용됩니다 텍스트 분류 여기에는 고차원 교육 데이터 세트가 포함됩니다.
- Naïve Bayes Classifier는 빠른 예측을 할 수 있는 빠른 기계 학습 모델을 구축하는 데 도움이 되는 간단하고 가장 효과적인 분류 알고리즘 중 하나입니다.
- Naive Bayes 알고리즘의 유명한 예는 다음과 같습니다. 스팸 필터링, 감성 분석, 기사 분류 .
Naive Bayes라고 불리는 이유는 무엇입니까?
Naïve Bayes 알고리즘은 Naïve와 Bayes라는 두 단어로 구성되며 다음과 같이 설명할 수 있습니다.
베이즈 정리:
- 베이즈 정리는 다음과 같이 알려져 있습니다. 베이즈의 법칙 또는 베이즈의 법칙 , 이는 사전 지식을 바탕으로 가설의 확률을 결정하는 데 사용됩니다. 조건부 확률에 따라 다릅니다.
- 베이즈 정리의 공식은 다음과 같습니다.
어디,
P(A|B)는 사후 확률입니다. : 관찰된 사건 B에 대한 가설 A의 확률입니다.
P(B|A)는 우도 확률입니다. : 가설의 확률이 참일 때 증거의 확률입니다.
P(A)는 사전 확률입니다. : 증거를 관찰하기 전 가설의 확률입니다.
P(B)는 한계 확률입니다. : 증거의 확률.
Naive Bayes의 분류기 작동:
Naïve Bayes의 분류기 작동은 아래 예를 통해 이해할 수 있습니다.
우리가 기상 조건 및 해당 대상 변수 ' 놀다 '. 따라서 이 데이터 세트를 사용하여 기상 조건에 따라 특정 날짜에 플레이할지 여부를 결정해야 합니다. 따라서 이 문제를 해결하려면 다음 단계를 따라야 합니다.
- 주어진 데이터세트를 빈도표로 변환합니다.
- 주어진 특징의 확률을 찾아 가능성 테이블을 생성합니다.
- 이제 베이즈 정리를 사용하여 사후 확률을 계산해 보겠습니다.
문제 : 날씨가 좋으면 플레이어가 플레이해야 할까요, 말아야 할까요?
해결책 : 이 문제를 해결하려면 먼저 아래 데이터세트를 고려하세요.
시야 | 놀다 | |
---|---|---|
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 알고리즘의 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') . 로드된 데이터 세트는 학습 세트와 테스트 세트로 구분된 후 특성 변수의 크기를 조정했습니다.
데이터 세트의 출력은 다음과 같이 제공됩니다.
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)
산출:
위 출력은 예측 벡터에 대한 결과를 보여줍니다. 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)
산출:
위의 혼동 행렬 출력에서 볼 수 있듯이 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()
산출:
위 출력에서 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()
산출:
위 출력은 테스트 세트 데이터의 최종 출력입니다. 보시다시피 분류기는 '구매함' 변수와 '구매하지 않음' 변수를 나누기 위해 가우스 곡선을 만들었습니다. 혼동 행렬에서 계산한 몇 가지 잘못된 예측이 있습니다. 하지만 여전히 꽤 좋은 분류기입니다.