logo

Naivný Bayesov algoritmus klasifikátora

  • Algoritmus Naive Bayes je algoritmus učenia pod dohľadom, ktorý je založený na Bayesova veta a používa sa na riešenie klasifikačných problémov.
  • Používa sa hlavne v triedenie textu ktorý zahŕňa vysokorozmerný tréningový dátový súbor.
  • Naïve Bayes Classifier je jedným z jednoduchých a najefektívnejších klasifikačných algoritmov, ktorý pomáha pri vytváraní modelov rýchleho strojového učenia, ktoré dokážu robiť rýchle predpovede.
  • Je to pravdepodobnostný klasifikátor, čo znamená, že predpovedá na základe pravdepodobnosti objektu.
  • Niektoré populárne príklady naivného Bayesovho algoritmu sú filtrovanie spamu, sentimentálna analýza a klasifikácia článkov .

Prečo sa to volá Naive Bayes?

Algoritmus Naïve Bayes sa skladá z dvoch slov Naïve a Bayes, ktoré možno opísať ako:

    Naivný: Nazýva sa Naivný, pretože predpokladá, že výskyt určitého znaku je nezávislý od výskytu iných znakov. Napríklad, ak je ovocie identifikované na základe farby, tvaru a chuti, potom červené, guľovité a sladké ovocie je rozpoznané ako jablko. Preto každá vlastnosť samostatne prispieva k identifikácii toho, že ide o jablko bez toho, aby bola jedna na druhej závislá.Bayes: Volá sa Bayes, pretože závisí na princípe Bayesovej vety.

Bayesova veta:

  • Bayesova veta je známa aj ako Bayesovo pravidlo alebo Bayesov zákon , ktorý sa používa na určenie pravdepodobnosti hypotézy s predchádzajúcimi znalosťami. Závisí to od podmienenej pravdepodobnosti.
  • Vzorec pre Bayesovu vetu je daný takto:
Naivný Bayesov algoritmus klasifikátora

Kde,

jvm

P(A|B) je zadná pravdepodobnosť : Pravdepodobnosť hypotézy A o pozorovanom jave B.

P(B|A) je pravdepodobnosť pravdepodobnosti : Pravdepodobnosť dôkazu za predpokladu, že pravdepodobnosť hypotézy je pravdivá.

P(A) je predchádzajúca pravdepodobnosť : Pravdepodobnosť hypotézy pred pozorovaním dôkazov.

P(B) je marginálna pravdepodobnosť : Pravdepodobnosť dôkazu.

Fungovanie klasifikátora Naive Bayes:

Fungovanie klasifikátora Naïve Bayes je možné pochopiť pomocou nižšie uvedeného príkladu:

Predpokladajme, že máme súbor údajov poveternostné podmienky a zodpovedajúca cieľová premenná ' hrať '. Takže pomocou tohto súboru údajov sa musíme rozhodnúť, či v konkrétny deň hrať alebo nie podľa poveternostných podmienok. Aby sme tento problém vyriešili, musíme postupovať podľa nasledujúcich krokov:

  1. Preveďte daný súbor údajov do frekvenčných tabuliek.
  2. Vygenerujte tabuľku pravdepodobnosti nájdením pravdepodobnosti daných funkcií.
  3. Teraz použite Bayesovu vetu na výpočet zadnej pravdepodobnosti.

Problém : Ak je slnečné počasie, mal by hráč hrať alebo nie?

Riešenie : Ak to chcete vyriešiť, najprv zvážte nasledujúci súbor údajov:

Outlook hrať
0 Daždivé Áno
1 Slnečno Áno
2 Zatiahnuté Áno
3 Zatiahnuté Áno
4 Slnečno Nie
5 Daždivé Áno
6 Slnečno Áno
7 Zatiahnuté Áno
8 Daždivé Nie
9 Slnečno Nie
10 Slnečno Áno
jedenásť Daždivé Nie
12 Zatiahnuté Áno
13 Zatiahnuté Áno

Tabuľka frekvencií pre poveternostné podmienky:

Počasie Áno Nie
Zatiahnuté 5 0
Daždivé 2 2
Slnečno 3 2
Celkom 10 5

Pravdepodobný poveternostný stav tabuľky:

Madhubala
Počasie Nie Áno
Zatiahnuté 0 5 5/14 = 0,35
Daždivé 2 2 4/14 = 0,29
Slnečno 2 3 5/14 = 0,35
Všetky 4/14 = 0,29 10/14 = 0,71

Použitie Bayesovej vety:

P(Áno|Slnečno)= P(Slnečno|Áno)*P(Áno)/P(Slnečno)

P(slnečno|áno)= 3/10= 0,3

P(slnečno)= 0,35

P(áno)=0,71

Takže P(Áno|Slnečno) = 0,3*0,71/0,35= 0,60

P(nie|slnečno)= P(slnečno|nie)*P(nie)/P(slnečno)

P(slnečno|NIE)= 2/4=0,5

P(Nie)= 0,29

P(slnečno)= 0,35

Takže P(Nie|Slnečno)= 0,5*0,29/0,35 = 0,41

javascript najbližšie

Ako teda vidíme z vyššie uvedeného výpočtu, že P(Áno|Slnečno)>P(Nie|Slnečno)

Preto počas slnečného dňa môže hráč hrať hru.

Výhody klasifikátora Naive Bayes:

  • Naïve Bayes je jedným z rýchlych a jednoduchých algoritmov ML na predpovedanie triedy množín údajov.
  • Môže byť použitý pre binárne aj viactriedne klasifikácie.
  • Funguje dobre v predpovediach viacerých tried v porovnaní s inými algoritmami.
  • Je to najobľúbenejšia voľba pre problémy s klasifikáciou textu .

Nevýhody klasifikátora Naive Bayes:

  • Naive Bayes predpokladá, že všetky funkcie sú nezávislé alebo nesúvisiace, takže sa nemôže naučiť vzťah medzi funkciami.

Aplikácie klasifikátora Naive Bayes:

  • Používa sa na Credit Scoring .
  • Používa sa v klasifikácia medicínskych údajov .
  • Dá sa použiť v predpovede v reálnom čase pretože Naïve Bayes Classifier je dychtivý študent.
  • Používa sa pri klasifikácii textu ako napr Filtrovanie spamu a Analýza sentimentu .

Typy naivného Bayesovho modelu:

Existujú tri typy modelu Naive Bayes, ktoré sú uvedené nižšie:

    Gaussovský: Gaussov model predpokladá, že funkcie sledujú normálne rozdelenie. To znamená, že ak prediktory berú spojité hodnoty namiesto diskrétnych, potom model predpokladá, že tieto hodnoty sú vzorkované z Gaussovho rozdelenia.Multinomický: Klasifikátor Multinomial Naïve Bayes sa používa, keď sú údaje distribuované multinomicky. Primárne sa používa na problémy s klasifikáciou dokumentov, to znamená, že konkrétny dokument patrí do ktorej kategórie, ako je šport, politika, vzdelávanie atď.
    Klasifikátor používa pre prediktory frekvenciu slov.Bernoulli: Bernoulliho klasifikátor funguje podobne ako multinomický klasifikátor, ale prediktorové premenné sú nezávislé booleovské premenné. Napríklad, či konkrétne slovo je alebo nie je prítomné v dokumente. Tento model je známy aj úlohami klasifikácie dokumentov.

Implementácia algoritmu Naive Bayes v Pythone:

Teraz budeme implementovať Naive Bayes Algorithm pomocou Pythonu. Takže na to použijeme ' použivateľské dáta ' súbor údajov , ktorý sme použili v našom ďalšom klasifikačnom modeli. Preto môžeme model Naive Bayes ľahko porovnať s ostatnými modelmi.

Kroky na implementáciu:

  • Krok predbežného spracovania údajov
  • Prispôsobenie Naive Bayes k súprave Training
  • Predpovedanie výsledku testu
  • Otestujte presnosť výsledku (Vytvorenie matice zmätku)
  • Vizualizácia výsledku testovacej súpravy.

1) Krok predbežného spracovania údajov:

V tomto kroku dáta predspracujeme/pripravíme tak, aby sme ich mohli efektívne využiť v našom kóde. Je to podobné ako v prípade predbežného spracovania údajov. Kód na to je uvedený nižšie:

 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) 

Vo vyššie uvedenom kóde sme načítali súbor údajov do nášho programu pomocou ' množina údajov = pd.read_csv('user_data.csv') . Načítaná množina údajov je rozdelená na trénovaciu a testovaciu množinu a potom sme škálovali premennú funkcie.

Výstup pre množinu údajov je uvedený ako:

Naivný Bayesov algoritmus klasifikátora 1

2) Pripojenie Naive Bayes k tréningovej súprave:

Po kroku predspracovania teraz prispôsobíme model Naive Bayes do množiny Training. Nižšie je uvedený kód:

zmeniť názov adresára linux
 # Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train) 

Vo vyššie uvedenom kóde sme použili Gaussovský NB klasifikátor aby sa zmestil do tréningového súboru údajov. Môžeme použiť aj iné klasifikátory podľa našich požiadaviek.

Výkon:

porovnať reťazec v jave
 Out[6]: GaussianNB(priors=None, var_smoothing=1e-09) 

3) Predpoveď výsledku testovacej sady:

Teraz predpovedáme výsledok testovacej sady. Na tento účel vytvoríme novú premennú prediktora y_pred a na vytváranie predpovedí použije funkciu predpovedania.

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

Výkon:

Naivný Bayesov algoritmus klasifikátora 2

Vyššie uvedený výstup ukazuje výsledok pre vektor predikcie y_pred a skutočný vektor y_test. Vidíme, že niektoré predikcie sa líšia od skutočných hodnôt, čo sú nesprávne predpovede.

4) Vytvorenie matice zmätku:

Teraz skontrolujeme presnosť klasifikátora Naive Bayes pomocou matice Confusion. Nižšie je uvedený kód:

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

Výkon:

Naivný Bayesov algoritmus klasifikátora 3

Ako môžeme vidieť vo vyššie uvedenom výstupe zmätkovej matice, existuje 7+3= 10 nesprávnych predpovedí a 65+25=90 správnych predpovedí.

5) Vizualizácia výsledku tréningovej zostavy:

Ďalej vizualizujeme výsledok tréningovej sady pomocou klasifikátora Na�ve Bayes Classifier. Nižšie je 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ýkon:

Naivný Bayesov algoritmus klasifikátora 4

Vo vyššie uvedenom výstupe vidíme, že klasifikátor Na�ve Bayes oddelil dátové body jemnou hranicou. Je to Gaussova krivka, ako sme použili GaussianNB klasifikátor v našom kóde.

6) Vizualizácia výsledku testovacej 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ýkon:

Naivný Bayesov klasifikačný algoritmus 5

Vyššie uvedený výstup je konečným výstupom pre dáta testovacej sady. Ako vidíme, klasifikátor vytvoril Gaussovu krivku na rozdelenie premenných „zakúpené“ a „nekúpené“. Existuje niekoľko nesprávnych predpovedí, ktoré sme vypočítali v matici Confusion. Ale stále je to celkom dobrý klasifikátor.