- 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.
- 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:
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:
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:
- Konverter det givne datasæt til frekvenstabeller.
- Generer sandsynlighedstabel ved at finde sandsynligheden for givne funktioner.
- 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:
Klassifikatoren bruger frekvensen af ord til prædiktorerne.
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:
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:
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:
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:
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:
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.