- Algoritmus Naïve Bayes je algoritmus učení pod dohledem, který je založen na Bayesova věta a používá se pro řešení klasifikačních problémů.
- Používá se především v klasifikace textu který zahrnuje vysokorozměrnou trénovací datovou sadu.
- Naïve Bayes Classifier je jedním z jednoduchých a nejúčinnějších klasifikačních algoritmů, který pomáhá při vytváření rychlých modelů strojového učení, které dokážou rychle předpovídat.
- Některé populární příklady naivního Bayesova algoritmu jsou filtrace spamu, sentimentální analýza a klasifikace článků .
Proč se tomu říká Naivní Bayes?
Algoritmus Naïve Bayes se skládá ze dvou slov Naïve a Bayes, které lze popsat jako:
Bayesova věta:
- Bayesova věta je také známá jako Bayesovo pravidlo nebo Bayesův zákon , který se používá k určení pravděpodobnosti hypotézy s předchozími znalostmi. Záleží na podmíněné pravděpodobnosti.
- Vzorec pro Bayesovu větu je dán takto:
Kde,
P(A|B) je zadní pravděpodobnost : Pravděpodobnost hypotézy A o pozorovaném jevu B.
když jinak když jinak java
P(B|A) je pravděpodobnost pravděpodobnosti : Pravděpodobnost důkazu za předpokladu, že pravděpodobnost hypotézy je pravdivá.
P(A) je předchozí pravděpodobnost : Pravděpodobnost hypotézy před pozorováním důkazů.
P(B) je mezní pravděpodobnost : Pravděpodobnost důkazu.
Fungování klasifikátoru Naïve Bayes:
Fungování klasifikátoru Naïve Bayes lze pochopit pomocí níže uvedeného příkladu:
Předpokládejme, že máme datovou sadu povětrnostní podmínky a odpovídající cílová proměnná ' Hrát si '. Takže pomocí této datové sady se musíme rozhodnout, zda v konkrétní den hrát nebo ne podle povětrnostních podmínek. Abychom tento problém vyřešili, musíme provést následující kroky:
- Převeďte danou datovou sadu do frekvenčních tabulek.
- Vygenerujte pravděpodobnostní tabulku nalezením pravděpodobností daných vlastností.
- Nyní použijte Bayesovu větu k výpočtu zadní pravděpodobnosti.
Problém : Pokud je slunečné počasí, měl by hráč hrát nebo ne?
Řešení : Chcete-li to vyřešit, nejprve zvažte následující datovou sadu:
Výhled | Hrát si | |
---|---|---|
0 | Deštivý | Ano |
1 | Slunný | Ano |
2 | Zatažený | Ano |
3 | Zatažený | Ano |
4 | Slunný | Ne |
5 | Deštivý | Ano |
6 | Slunný | Ano |
7 | Zatažený | Ano |
8 | Deštivý | Ne |
9 | Slunný | Ne |
10 | Slunný | Ano |
jedenáct | Deštivý | Ne |
12 | Zatažený | Ano |
13 | Zatažený | Ano |
Tabulka četností pro povětrnostní podmínky:
Počasí | Ano | Ne |
Zatažený | 5 | 0 |
Deštivý | 2 | 2 |
Slunný | 3 | 2 |
Celkový | 10 | 5 |
Pravděpodobné povětrnostní podmínky tabulky:
Počasí | Ne | Ano | |
Zatažený | 0 | 5 | 5/14 = 0,35 |
Deštivý | 2 | 2 | 4/14 = 0,29 |
Slunný | 2 | 3 | 5/14 = 0,35 |
Všechno | 4/14 = 0,29 | 10/14 = 0,71 |
Použití Bayesova teorému:
P(ano|slunečno)= P(slunečno|ano)*P(ano)/P(slunečno)
P(slunečno|ano)= 3/10= 0,3
P(slunečno)= 0,35
P(Ano)=0,71
Takže P(Ano|Slunečno) = 0,3*0,71/0,35= 0,60
import skeneru java
P(ne|slunečno)= P(slunečno|ne)*P(ne)/P(slunečno)
P(slunečno|NE)= 2/4=0,5
P(Ne)= 0,29
P(slunečno)= 0,35
Takže P(Ne|slunečno)= 0,5*0,29/0,35 = 0,41
Jak tedy vidíme z výše uvedeného výpočtu, že P(Ano|Slunečně)>P(Ne|Slunečno)
Za slunečného dne tedy může hráč hru hrát.
Výhody klasifikátoru Naïve Bayes:
- Naïve Bayes je jedním z rychlých a snadných algoritmů ML pro predikci třídy datových sad.
- Lze jej použít pro binární i vícetřídní klasifikace.
- Ve srovnání s jinými algoritmy funguje dobře v předpovědích více tříd.
- Je to nejoblíbenější volba pro problémy s klasifikací textu .
Nevýhody klasifikátoru Naïve Bayes:
- Naive Bayes předpokládá, že všechny funkce jsou nezávislé nebo nesouvisející, takže se nemůže naučit vztah mezi funkcemi.
Aplikace klasifikátoru Naïve Bayes:
- Používá se pro Credit Scoring .
- Používá se v klasifikace lékařských údajů .
- Lze jej použít v předpovědi v reálném čase protože Naïve Bayes Classifier je dychtivý student.
- Používá se při klasifikaci textu jako např Filtrování spamu a Analýza sentimentu .
Typy modelu Naïve Bayes:
Existují tři typy modelu Naive Bayes, které jsou uvedeny níže:
Klasifikátor používá frekvenci slov pro prediktory.
Implementace algoritmu Naïve Bayes v Pythonu:
Nyní budeme implementovat Naive Bayes Algorithm pomocí Pythonu. K tomu tedy použijeme ' uživatelská data ' datový soubor , který jsme použili v našem jiném klasifikačním modelu. Proto můžeme model Naive Bayes snadno porovnat s ostatními modely.
Kroky k implementaci:
- Krok předběžného zpracování dat
- Přizpůsobení Naive Bayes k tréninkové sadě
- Předpovídání výsledku testu
- Otestujte přesnost výsledku (Vytvoření matice zmatků)
- Vizualizace výsledku testovací sady.
1) Krok předběžného zpracování dat:
V tomto kroku data předzpracujeme/připravíme tak, abychom je mohli efektivně využít v našem kódu. Je to podobné jako u předzpracování dat . Kód pro to je uveden níže:
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)
Ve výše uvedeném kódu jsme načetli datovou sadu do našeho programu pomocí ' datová sada = pd.read_csv('user_data.csv') . Načtená datová sada je rozdělena na trénovací a testovací sadu a poté jsme škálovali proměnnou funkce.
Výstup pro datovou sadu je dán takto:
2) Přizpůsobení Naive Bayes k tréninkové sadě:
Po kroku předběžného zpracování nyní nasadíme model Naive Bayes do sady Training. Níže je pro něj uveden kód:
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train)
Ve výše uvedeném kódu jsme použili Gaussův NB klasifikátor aby se vešly do trénovací datové sady. Můžeme také použít jiné klasifikátory podle našich požadavků.
práce na počítači
Výstup:
Out[6]: GaussianNB(priors=None, var_smoothing=1e-09)
3) Predikce výsledku testovací sady:
Nyní předpovíme výsledek testovací sady. Za tímto účelem vytvoříme novou proměnnou prediktoru y_před a k předpovědi použije funkci predikce.
# Predicting the Test set results y_pred = classifier.predict(x_test)
Výstup:
Výše uvedený výstup ukazuje výsledek pro predikční vektor y_před a skutečný vektor y_test. Vidíme, že některé predikce se liší od skutečných hodnot, což jsou nesprávné predikce.
4) Vytvoření Confusion Matrix:
Nyní zkontrolujeme přesnost klasifikátoru Naive Bayes pomocí matice Confusion. Níže je pro něj uveden kód:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
Výstup:
Jak můžeme vidět na výše uvedeném výstupu matoucí matice, existuje 7+3= 10 nesprávných předpovědí a 65+25=90 správných předpovědí.
5) Vizualizace výsledku tréninkové sady:
Dále vizualizujeme výsledek tréninkové sady pomocí klasifikátoru Na�ve Bayes Classifier. Níže je pro něj uveden kód:
# 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()
Výstup:
Ve výše uvedeném výstupu můžeme vidět, že klasifikátor Na�ve Bayes oddělil datové body pomocí jemné hranice. Je to Gaussova křivka, jak jsme ji použili GaussianNB klasifikátor v našem kódu.
6) Vizualizace výsledku testovací sady:
# 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()
Výstup:
Výše uvedený výstup je konečným výstupem pro data testovací sady. Jak vidíme, klasifikátor vytvořil Gaussovu křivku pro rozdělení proměnných „zakoupené“ a „nekoupené“. Existuje několik chybných předpovědí, které jsme vypočítali v Matici zmatení. Ale přesto je to docela dobrý klasifikátor.