logo

Naiwny algorytm klasyfikatora Bayesa

  • Naiwny algorytm Bayesa to algorytm uczenia się nadzorowanego, który opiera się na Twierdzenie Bayesa i wykorzystywane do rozwiązywania problemów klasyfikacyjnych.
  • Stosowany jest głównie w klasyfikacja tekstu który zawiera wielowymiarowy zbiór danych szkoleniowych.
  • Naiwny klasyfikator Bayesa to jeden z prostych i najskuteczniejszych algorytmów klasyfikacji, który pomaga w budowaniu szybkich modeli uczenia maszynowego, które umożliwiają szybkie przewidywanie.
  • Jest to klasyfikator probabilistyczny, co oznacza, że ​​przewiduje na podstawie prawdopodobieństwa wystąpienia obiektu.
  • Oto kilka popularnych przykładów naiwnego algorytmu Bayesa filtrowanie spamu, analiza sentymentów i klasyfikacja artykułów .

Dlaczego nazywa się to Naiwnym Bayesem?

Algorytm Naïve Bayesa składa się z dwóch słów Naïve i Bayes, które można opisać jako:

    Naiwny: Nazywa się to naiwnym, ponieważ zakłada, że ​​wystąpienie pewnej cechy jest niezależne od wystąpienia innych cech. Na przykład, jeśli owoc identyfikuje się na podstawie koloru, kształtu i smaku, wówczas czerwony, kulisty i słodki owoc jest rozpoznawany jako jabłko. Zatem każda cecha indywidualnie przyczynia się do rozpoznania, że ​​jest to jabłko, nie będąc od siebie zależnym.Bayesa: Nazywa się to Bayesem, ponieważ zależy od zasady twierdzenia Bayesa.

Twierdzenie Bayesa:

  • Twierdzenie Bayesa jest również znane jako Reguła Bayesa Lub Prawo Bayesa , który służy do określenia prawdopodobieństwa hipotezy przy wcześniejszej wiedzy. To zależy od prawdopodobieństwa warunkowego.
  • Wzór na twierdzenie Bayesa jest podany jako:
Naiwny algorytm klasyfikatora Bayesa

Gdzie,

blokuj reklamy YouTube na Androidzie

P(A|B) to prawdopodobieństwo późniejsze : Prawdopodobieństwo hipotezy A dotyczące obserwowanego zdarzenia B.

P(B|A) to prawdopodobieństwo wiarygodności : Prawdopodobieństwo dowodu przy założeniu, że prawdopodobieństwo hipotezy jest prawdziwe.

P(A) to prawdopodobieństwo wcześniejsze : Prawdopodobieństwo hipotezy przed obserwacją dowodów.

P(B) to prawdopodobieństwo krańcowe : Prawdopodobieństwo dowodu.

Działanie naiwnego klasyfikatora Bayesa:

Działanie naiwnego klasyfikatora Bayesa można zrozumieć na poniższym przykładzie:

Załóżmy, że mamy zbiór danych warunki pogodowe i odpowiadająca zmienna docelowa ' Grać '. Korzystając z tego zbioru danych, musimy zdecydować, czy powinniśmy grać danego dnia, czy nie, w zależności od warunków pogodowych. Aby rozwiązać ten problem, musimy wykonać poniższe kroki:

  1. Przekonwertuj podany zbiór danych na tabele częstości.
  2. Wygeneruj tabelę prawdopodobieństwa, znajdując prawdopodobieństwa danych cech.
  3. Teraz użyj twierdzenia Bayesa do obliczenia prawdopodobieństwa późniejszego.

Problem : Jeśli pogoda jest słoneczna, to Gracz powinien grać, czy nie?

Rozwiązanie : Aby rozwiązać ten problem, najpierw rozważ poniższy zbiór danych:

Perspektywy Grać
0 Deszczowy Tak
1 Słoneczny Tak
2 Pochmurny Tak
3 Pochmurny Tak
4 Słoneczny NIE
5 Deszczowy Tak
6 Słoneczny Tak
7 Pochmurny Tak
8 Deszczowy NIE
9 Słoneczny NIE
10 Słoneczny Tak
jedenaście Deszczowy NIE
12 Pochmurny Tak
13 Pochmurny Tak

Tabela częstotliwości dla warunków pogodowych:

Pogoda Tak NIE
Pochmurny 5 0
Deszczowy 2 2
Słoneczny 3 2
Całkowity 10 5

Warunki pogodowe w tabeli prawdopodobieństwa:

wzór projektowy metody fabrycznej
Pogoda NIE Tak
Pochmurny 0 5 5/14 = 0,35
Deszczowy 2 2 4/14 = 0,29
Słoneczny 2 3 5/14 = 0,35
Wszystko 4/14 = 0,29 10/14 = 0,71

Stosowanie twierdzenia Bayesa:

P(Tak|Słonecznie)= P(Słonecznie|Tak)*P(Tak)/P(Słonecznie)

P(Słonecznie | Tak) = 3/10 = 0,3

P(Słonecznie) = 0,35

P(Tak) = 0,71

Zatem P(Tak|Słonecznie) = 0,3*0,71/0,35= 0,60

P(Nie|Słonecznie)= P(Słonecznie|Nie)*P(Nie)/P(Słonecznie)

sortowanie listy tablic w Javie

P(Słonecznie | NIE) = 2/4 = 0,5

P(Nie)= 0,29

P(Słonecznie) = 0,35

Zatem P(Nie|Słonecznie)= 0,5*0,29/0,35 = 0,41

Jak więc widzimy z powyższych obliczeń, że P(Tak|Słonecznie)>P(Nie|Słonecznie)

Stąd w słoneczny dzień Gracz może grać w grę.

Zalety naiwnego klasyfikatora Bayesa:

  • Naïve Bayes to jeden z szybkich i łatwych algorytmów ML do przewidywania klasy zbiorów danych.
  • Można go używać do klasyfikacji binarnych i wieloklasowych.
  • Dobrze sprawdza się w przewidywaniach wieloklasowych w porównaniu z innymi algorytmami.
  • Jest to najpopularniejszy wybór problemy klasyfikacji tekstu .

Wady naiwnego klasyfikatora Bayesa:

  • Naiwny Bayes zakłada, że ​​wszystkie cechy są niezależne lub niepowiązane, więc nie może nauczyć się zależności między cechami.

Zastosowania naiwnego klasyfikatora Bayesa:

  • To jest używane do Punktacja kredytowa .
  • Jest używany w klasyfikacja danych medycznych .
  • Można go używać w prognozy w czasie rzeczywistym ponieważ naiwny klasyfikator Bayesa jest chętnym uczniem.
  • Jest używany w klasyfikacji tekstu, np Filtrowanie spamu I Analiza sentymentów .

Rodzaje naiwnego modelu Bayesa:

Istnieją trzy typy naiwnego modelu Bayesa, które podano poniżej:

    Gaussa: Model Gaussa zakłada, że ​​cechy mają rozkład normalny. Oznacza to, że jeśli predyktory przyjmują wartości ciągłe zamiast dyskretnych, wówczas w modelu zakłada się, że wartości te są próbkowane z rozkładu Gaussa.Wielomian: Wielomianowy naiwny klasyfikator Bayesa jest używany, gdy dane mają rozkład wielomianowy. Stosowany jest przede wszystkim w przypadku problemów z klasyfikacją dokumentów, oznacza to, że konkretny dokument należy do kategorii, takiej jak sport, polityka, edukacja itp.
    Klasyfikator wykorzystuje częstotliwość słów do predyktorów.Bernoulliego: Klasyfikator Bernoulliego działa podobnie do klasyfikatora wielomianowego, ale zmiennymi predykcyjnymi są niezależne zmienne logiczne. Na przykład, jeśli określone słowo występuje w dokumencie lub nie. Model ten słynie również z zadań klasyfikacji dokumentów.

Implementacja Pythona naiwnego algorytmu Bayesa:

Teraz zaimplementujemy naiwny algorytm Bayesa przy użyciu języka Python. W tym celu użyjemy „ dane użytkownika ' zbiór danych , którego użyliśmy w naszym innym modelu klasyfikacji. Dzięki temu możemy łatwo porównać model Naive Bayesa z innymi modelami.

Kroki do wdrożenia:

  • Etap wstępnego przetwarzania danych
  • Dopasowanie Naive Bayesa do zbioru treningowego
  • Przewidywanie wyniku testu
  • Sprawdź dokładność wyniku (Tworzenie macierzy zamieszania)
  • Wizualizacja wyniku zestawu testowego.

1) Etap wstępnego przetwarzania danych:

Na tym etapie będziemy wstępnie przetwarzać/przygotowywać dane, abyśmy mogli je efektywnie wykorzystać w naszym kodzie. Jest to podobne jak w przypadku wstępnego przetwarzania danych. Kod do tego podano poniżej:

 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) 

W powyższym kodzie załadowaliśmy zbiór danych do naszego programu za pomocą ' zbiór danych = pd.read_csv('dane_użytkownika.csv') . Załadowany zbiór danych dzielimy na zbiór uczący i testowy, a następnie skalujemy zmienną cechy.

Dane wyjściowe zbioru danych są podawane jako:

Naiwny algorytm klasyfikatora Bayesa 1

2) Dopasowanie naiwnego Bayesa do zbioru uczącego:

Po etapie wstępnego przetwarzania dopasujemy teraz model Naive Bayesa do zbioru szkoleniowego. Poniżej znajduje się jego kod:

c sformatowany ciąg
 # Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train) 

W powyższym kodzie użyliśmy metody Klasyfikator GaussaNB aby dopasować go do zbioru danych szkoleniowych. Możemy również użyć innych klasyfikatorów zgodnie z naszymi wymaganiami.

Wyjście:

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

3) Przewidywanie wyniku zestawu testowego:

Teraz będziemy przewidywać wynik zestawu testowego. W tym celu utworzymy nową zmienną predykcyjną y_pred i użyje funkcji przewidywania do wykonania przewidywań.

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

Wyjście:

Naiwny algorytm klasyfikatora Bayesa 2

Powyższe dane wyjściowe pokazują wynik wektora predykcji y_pred i prawdziwy wektor y_test. Widzimy, że niektóre przewidywania różnią się od wartości rzeczywistych, co jest błędnymi przewidywaniami.

4) Tworzenie macierzy zamieszania:

Teraz sprawdzimy dokładność klasyfikatora Naive Bayesa za pomocą macierzy Confusion. Poniżej znajduje się jego kod:

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

Wyjście:

Naiwny algorytm klasyfikatora Bayesa 3

Jak widać z powyższego wyniku macierzy zamieszania, istnieje 7+3= 10 błędnych przewidywań i 65+25=90 prawidłowych przewidywań.

5) Wizualizacja wyniku zestawu treningowego:

Następnie zwizualizujemy wynik zbioru uczącego za pomocą natywnego klasyfikatora Bayesa. Poniżej znajduje się jego kod:

 # 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() 

Wyjście:

Naiwny algorytm klasyfikatora Bayesa 4

Na powyższym wyjściu widać, że natywny klasyfikator Bayesa posegregował punkty danych za pomocą cienkiej granicy. Jest to krzywa Gaussa, jaką stosowaliśmy GaussaNB klasyfikator w naszym kodzie.

6) Wizualizacja wyniku zestawu testowego:

 # 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() 

Wyjście:

Naiwny algorytm klasyfikatora Bayesa 5

Powyższe wyjście jest ostatecznym wyjściem dla danych zestawu testowego. Jak widzimy, klasyfikator utworzył krzywą Gaussa, aby podzielić zmienne „zakupione” i „niezakupione”. Istnieje kilka błędnych przewidywań, które obliczyliśmy w macierzy zamieszania. Ale nadal jest to całkiem dobry klasyfikator.