- 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.
- 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:
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:
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:
- Przekonwertuj podany zbiór danych na tabele częstości.
- Wygeneruj tabelę prawdopodobieństwa, znajdując prawdopodobieństwa danych cech.
- 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:
Klasyfikator wykorzystuje częstotliwość słów do predyktoró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:
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:
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:
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:
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:
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.