logo

Naiv Bayes-klassificeringsalgoritme

  • Naiv Bayes algoritme er en overvåget læringsalgoritme, som er baseret på Bayes sætning og bruges til at løse klassifikationsproblemer.
  • Det bruges hovedsageligt i tekstklassificering der inkluderer et højdimensionelt træningsdatasæt.
  • Naiv Bayes Classifier er en af ​​de enkle og mest effektive klassifikationsalgoritmer, som hjælper med at bygge de hurtige maskinlæringsmodeller, der kan lave hurtige forudsigelser.
  • Det er en probabilistisk klassifikator, hvilket betyder, at den forudsiger på grundlag af sandsynligheden for et objekt.
  • Nogle populære eksempler på Naiv Bayes Algorithm er spamfiltrering, sentimental analyse og klassificering af artikler .

Hvorfor hedder det Naive Bayes?

Naiv Bayes-algoritmen består af to ord Naiv og Bayes, som kan beskrives som:

    Naiv: Det kaldes naivt, fordi det antager, at forekomsten af ​​et bestemt træk er uafhængigt af forekomsten af ​​andre træk. Såsom hvis frugten identificeres på basis af farve, form og smag, så genkendes rød, sfærisk og sød frugt som et æble. Derfor bidrager hver funktion individuelt til at identificere, at det er et æble uden at være afhængige af hinanden.Bayes: Det kaldes Bayes, fordi det afhænger af princippet i Bayes' sætning.

Bayes' sætning:

  • Bayes' sætning er også kendt som Bayes' Regel eller Bayes lov , som bruges til at bestemme sandsynligheden for en hypotese med forudgående viden. Det afhænger af den betingede sandsynlighed.
  • Formlen for Bayes' sætning er givet som:
Naiv Bayes-klassificeringsalgoritme

Hvor,

P(A|B) er posterior sandsynlighed : Sandsynlighed for hypotese A om den observerede hændelse B.

P(B|A) er Sandsynlighedssandsynlighed : Sandsynlighed for beviset givet for, at sandsynligheden for en hypotese er sand.

P(A) er forudgående sandsynlighed : Sandsynlighed for hypotese før observation af beviserne.

P(B) er Marginal Sandsynlighed : Sandsynlighed for beviser.

streng til int i java

Funktionen af ​​Naive Bayes' Classifier:

Funktionen af ​​Naive Bayes' Classifier kan forstås ved hjælp af nedenstående eksempel:

Antag at vi har et datasæt af vejrforhold og tilsvarende målvariabel ' Spil '. Så ved at bruge dette datasæt skal vi beslutte, om vi skal spille eller ej på en bestemt dag i henhold til vejrforholdene. Så for at løse dette problem skal vi følge nedenstående trin:

  1. Konverter det givne datasæt til frekvenstabeller.
  2. Generer sandsynlighedstabel ved at finde sandsynligheden for givne funktioner.
  3. Brug nu Bayes sætning til at beregne den bageste sandsynlighed.

Problem : Hvis vejret er solrigt, skal spilleren så spille eller ej?

Løsning : For at løse dette skal du først overveje nedenstående datasæt:

Outlook Spil
0 Regnfuld Ja
1 Solrig Ja
2 Overskyet Ja
3 Overskyet Ja
4 Solrig Ingen
5 Regnfuld Ja
6 Solrig Ja
7 Overskyet Ja
8 Regnfuld Ingen
9 Solrig Ingen
10 Solrig Ja
elleve Regnfuld Ingen
12 Overskyet Ja
13 Overskyet Ja

Hyppighedstabel for vejrforholdene:

Vejr Ja Ingen
Overskyet 5 0
Regnfuld 2 2
Solrig 3 2
Total 10 5

Sandsynlighedstabel vejrforhold:

Vejr Ingen Ja
Overskyet 0 5 5/14 = 0,35
Regnfuld 2 2 4/14=0,29
Solrig 2 3 5/14=0,35
Alle 4/14=0,29 10/14=0,71

Anvendelse af Bayes' sætning:

P(Ja|Solrig)= P(Solrig|Ja)*P(Ja)/P(Solrig)

P(Solrig|Ja)= 3/10= 0,3

P(solrig)= 0,35

P(Ja)=0,71

Så P(Ja|Solrig) = 0,3*0,71/0,35= 0,60

P(Nej|Solrig)= P(Solrig|Nej)*P(Nej)/P(Solrig)

P(Solrig|NEJ)= 2/4=0,5

P(Nej)= 0,29

P(solrig)= 0,35

Så P(Nej|Solrig)= 0,5*0,29/0,35 = 0,41

Så som vi kan se af ovenstående beregning, at P(Ja|Solrig)>P(Nej|Solrig)

Derfor kan spilleren spille spillet på en solrig dag.

Fordele ved Naiv Bayes Classifier:

  • Naive Bayes er en af ​​de hurtige og nemme ML-algoritmer til at forudsige en klasse af datasæt.
  • Det kan bruges til både binære klassifikationer og multiklasseklassifikationer.
  • Det klarer sig godt i multi-klasse forudsigelser sammenlignet med de andre algoritmer.
  • Det er det mest populære valg til problemer med tekstklassificering .

Ulemper ved Naiv Bayes Classifier:

  • Naiv Bayes antager, at alle funktioner er uafhængige eller ikke-relaterede, så den kan ikke lære forholdet mellem funktioner.

Anvendelser af Naive Bayes Classifier:

  • Det bruges til Kreditvurdering .
  • Det bruges i klassificering af medicinske data .
  • Den kan bruges i forudsigelser i realtid fordi Naive Bayes Classifier er en ivrig lærende.
  • Det bruges i Tekstklassificering som f.eks Spamfiltrering og Følelsesanalyse .

Typer af naive Bayes-modeller:

Der er tre typer af naive Bayes-modeller, som er angivet nedenfor:

    Gaussisk: Den Gaussiske model antager, at træk følger en normalfordeling. Dette betyder, at hvis prædiktorer tager kontinuerte værdier i stedet for diskrete, så antager modellen, at disse værdier er samplet fra den Gaussiske fordeling.Multinomial: Multinomial Naive Bayes-klassificeringen bruges, når dataene er multinomialfordelte. Det bruges primært til dokumentklassificeringsproblemer, det betyder, at et bestemt dokument tilhører hvilken kategori som sport, politik, uddannelse osv.
    Klassifikatoren bruger frekvensen af ​​ord til prædiktorerne.Bernoulli: Bernoulli-klassifikatoren fungerer på samme måde som Multinomial-klassifikatoren, men prædiktorvariablerne er de uafhængige booleanske variable. Som om et bestemt ord er til stede eller ej i et dokument. Denne model er også berømt for dokumentklassificeringsopgaver.

Python-implementering af den naive Bayes-algoritme:

Nu vil vi implementere en naiv Bayes-algoritme ved hjælp af Python. Så til dette vil vi bruge ' brugerdata ' datasæt , som vi har brugt i vores anden klassifikationsmodel. Derfor kan vi nemt sammenligne Naive Bayes-modellen med de andre modeller.

Trin til implementering:

  • Dataforbehandlingstrin
  • Tilpasning af Naive Bayes til træningssættet
  • Forudsigelse af testresultatet
  • Test nøjagtigheden af ​​resultatet (Oprettelse af forvirringsmatrix)
  • Visualisering af testsætresultatet.

1) Trin til dataforbehandling:

I dette trin vil vi forbehandle/forberede dataene, så vi kan bruge dem effektivt i vores kode. Det ligner, som vi gjorde i data-forbehandling . Koden til dette er angivet nedenfor:

 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) 

I ovenstående kode har vi indlæst datasættet i vores program ved hjælp af ' dataset = pd.read_csv('user_data.csv') . Det indlæste datasæt er opdelt i trænings- og testsæt, og så har vi skaleret featurevariablen.

Outputtet for datasættet er givet som:

Naiv Bayes-klassificeringsalgoritme 1

2) Tilpasning af Naive Bayes til træningssættet:

Efter forbehandlingstrinnet vil vi nu tilpasse Naive Bayes-modellen til træningssættet. Nedenfor er koden til det:

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

I ovenstående kode har vi brugt GaussianNB klassificerer for at tilpasse det til træningsdatasættet. Vi kan også bruge andre klassifikatorer i henhold til vores krav.

Produktion:

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

3) Forudsigelse af testsættets resultat:

Nu vil vi forudsige testsættets resultat. Til dette vil vi oprette en ny prædiktorvariabel y_pred , og vil bruge forudsigelsesfunktionen til at lave forudsigelserne.

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

Produktion:

Naiv Bayes Classifier Algorithm 2

Ovenstående output viser resultatet for forudsigelsesvektor y_pred og reel vektor y_test. Vi kan se, at nogle forudsigelser er forskellige fra de reelle værdier, som er de forkerte forudsigelser.

4) Oprettelse af forvirringsmatrix:

Nu vil vi kontrollere nøjagtigheden af ​​Naive Bayes-klassifikatoren ved hjælp af forvirringsmatricen. Nedenfor er koden til det:

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

Produktion:

Naiv Bayes Classifier Algorithm 3

Som vi kan se i ovenstående forvirringsmatrix-output, er der 7+3= 10 forkerte forudsigelser og 65+25=90 korrekte forudsigelser.

5) Visualisering af træningssættets resultat:

Dernæst vil vi visualisere træningssættets resultat ved hjælp af Na�ve Bayes Classifier. Nedenfor er koden til det:

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

Produktion:

Naiv Bayes Classifier Algorithm 4

I ovenstående output kan vi se, at Na�ve Bayes-klassifikatoren har adskilt datapunkterne med den fine grænse. Det er gaussisk kurve, som vi har brugt GaussianNB klassificerer i vores kode.

6) Visualisering af testsættets resultat:

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

Produktion:

Naiv Bayes Classifier Algorithm 5

Ovenstående output er det endelige output for testsætdata. Som vi kan se, har klassifikatoren lavet en Gauss-kurve til at opdele variablerne 'købt' og 'ikke købt'. Der er nogle forkerte forudsigelser, som vi har beregnet i forvirringsmatrix. Men det er stadig en ret god klassificering.