- Naiv Bayes algoritme er en overvåket læringsalgoritme, som er basert på Bayes teorem og brukes til å løse klassifiseringsproblemer.
- Den brukes hovedsakelig i tekstklassifisering som inkluderer et høydimensjonalt opplæringsdatasett.
- Naiv Bayes Classifier er en av de enkle og mest effektive klassifiseringsalgoritmene som hjelper til med å bygge de raske maskinlæringsmodellene som kan gi raske spådommer.
- Noen populære eksempler på naiv Bayes-algoritme er spamfiltrering, sentimental analyse og klassifisering av artikler .
Hvorfor heter det Naive Bayes?
Naiv Bayes-algoritmen består av to ord Naiv og Bayes, som kan beskrives som:
Bayes' teorem:
- Bayes' teorem er også kjent som Bayes regel eller Bayes lov , som brukes til å bestemme sannsynligheten for en hypotese med forkunnskaper. Det avhenger av den betingede sannsynligheten.
- Formelen for Bayes teorem er gitt som:
Hvor,
P(A|B) er posterior sannsynlighet : Sannsynlighet for hypotese A om den observerte hendelsen B.
P(B|A) er sannsynlighet for sannsynlighet : Sannsynligheten for beviset gitt at sannsynligheten for en hypotese er sann.
P(A) er tidligere sannsynlighet : Sannsynlighet for hypotese før observasjon av bevisene.
P(B) er Marginal sannsynlighet : Sannsynlighet for bevis.
bytte tilfelle java
Arbeidet med Naive Bayes' Classifier:
Arbeidet med Naive Bayes' Classifier kan forstås ved hjelp av eksemplet nedenfor:
Anta at vi har et datasett med værforhold og tilsvarende målvariabel ' Spille '. Så ved å bruke dette datasettet må vi bestemme om vi skal spille eller ikke på en bestemt dag i henhold til værforholdene. Så for å løse dette problemet, må vi følge trinnene nedenfor:
- Konverter det gitte datasettet til frekvenstabeller.
- Generer sannsynlighetstabell ved å finne sannsynlighetene for gitte funksjoner.
- Bruk nå Bayes teorem for å beregne den bakre sannsynligheten.
Problem : Hvis været er sol, bør spilleren spille eller ikke?
Løsning : For å løse dette, vurdere først datasettet nedenfor:
Outlook | Spille | |
---|---|---|
0 | Regnfullt | Ja |
1 | Solfylt | Ja |
2 | Overskyet | Ja |
3 | Overskyet | Ja |
4 | Solfylt | Nei |
5 | Regnfullt | Ja |
6 | Solfylt | Ja |
7 | Overskyet | Ja |
8 | Regnfullt | Nei |
9 | Solfylt | Nei |
10 | Solfylt | Ja |
elleve | Regnfullt | Nei |
12 | Overskyet | Ja |
1. 3 | Overskyet | Ja |
Frekvenstabell for værforholdene:
Vær | Ja | Nei |
Overskyet | 5 | 0 |
Regnfullt | 2 | 2 |
Solfylt | 3 | 2 |
Total | 10 | 5 |
Værforhold for sannsynlighetstabell:
Vær | Nei | Ja | |
Overskyet | 0 | 5 | 5/14 = 0,35 |
Regnfullt | 2 | 2 | 4/14=0,29 |
Solfylt | 2 | 3 | 5/14=0,35 |
Alle | 4/14=0,29 | 10/14=0,71 |
Ved å bruke Bayes' teorem:
P(Ja|Sol)= P(Solrik|Ja)*P(Ja)/P(Sol)
P(Sunny|Ja)= 3/10= 0,3
P(Sol)= 0,35
P(Ja)=0,71
Så P(Ja|Sol) = 0,3*0,71/0,35= 0,60
P(Nei|Sol)= P(Solrik|Nei)*P(Nei)/P(Solrik)
P(Sunny|NO)= 2/4=0,5
P(Nei)= 0,29
P(Sol)= 0,35
Så P(Nei|Sol)= 0,5*0,29/0,35 = 0,41
Så som vi kan se fra beregningen ovenfor P(Ja|Sol)>P(Nei|Sol)
Derfor kan spilleren spille spillet på en solrik dag.
Fordeler med Naiv Bayes Classifier:
- Naive Bayes er en av de raske og enkle ML-algoritmene for å forutsi en klasse med datasett.
- Den kan brukes til både binære klassifiseringer og multiklasseklassifiseringer.
- Den fungerer godt i multi-klasse spådommer sammenlignet med de andre algoritmene.
- Det er det mest populære valget for problemer med tekstklassifisering .
Ulemper med Naiv Bayes Classifier:
- Naive Bayes antar at alle funksjoner er uavhengige eller ikke-relaterte, så den kan ikke lære forholdet mellom funksjoner.
Anvendelser av Naive Bayes Classifier:
- Den brukes til Kredittscore .
- Den brukes i klassifisering av medisinske data .
- Den kan brukes i sanntids spådommer fordi Naive Bayes Classifier er en ivrig elev.
- Det brukes i Tekstklassifisering som f.eks Spamfiltrering og Sentimentanalyse .
Typer av naive Bayes-modeller:
Det er tre typer naive Bayes-modeller, som er gitt nedenfor:
Klassifisereren bruker frekvensen av ord for prediktorene.
Python-implementering av den naive Bayes-algoritmen:
Nå skal vi implementere en naiv Bayes-algoritme ved hjelp av Python. Så for dette vil vi bruke ' brukerdata ' datasett , som vi har brukt i vår andre klassifiseringsmodell. Derfor kan vi enkelt sammenligne Naive Bayes-modellen med de andre modellene.
Trinn for å implementere:
- Dataforbehandlingstrinn
- Tilpasse Naive Bayes til treningssettet
- Forutsi testresultatet
- Test nøyaktigheten av resultatet (oppretting av forvirringsmatrise)
- Visualisere testsettets resultat.
1) Dataforbehandlingstrinn:
I dette trinnet vil vi forhåndsbehandle/klargjøre dataene slik at vi kan bruke dem effektivt i koden vår. Det er likt som vi gjorde i dataforbehandling . Koden for dette er gitt 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 koden ovenfor har vi lastet datasettet inn i programmet vårt ved å bruke ' datasett = pd.read_csv('user_data.csv') . Det innlastede datasettet er delt inn i trening og testsett, og så har vi skalert funksjonsvariabelen.
Utdata for datasettet er gitt som:
2) Tilpasning av Naive Bayes til treningssettet:
Etter forbehandlingstrinnet vil vi nå tilpasse Naive Bayes-modellen til treningssettet. Nedenfor er koden for det:
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train)
I koden ovenfor har vi brukt GaussianNB klassifiserer for å tilpasse den til opplæringsdatasettet. Vi kan også bruke andre klassifiserere i henhold til vårt krav.
Produksjon:
Out[6]: GaussianNB(priors=None, var_smoothing=1e-09)
3) Forutsigelse av testsettets resultat:
Nå vil vi forutsi testsettets resultat. For dette vil vi lage en ny prediktorvariabel y_pred , og vil bruke prediksjonsfunksjonen til å lage spådommene.
# Predicting the Test set results y_pred = classifier.predict(x_test)
Produksjon:
Utgangen ovenfor viser resultatet for prediksjonsvektor y_pred og ekte vektor y_test. Vi kan se at noen spådommer er forskjellige fra de virkelige verdiene, som er de uriktige spådommene.
4) Opprette forvirringsmatrise:
Nå skal vi sjekke nøyaktigheten til Naive Bayes-klassifikatoren ved å bruke forvirringsmatrisen. Nedenfor er koden for det:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
Produksjon:
Som vi kan se i forvirringsmatriseutgangen ovenfor, er det 7+3= 10 feil spådommer, og 65+25=90 korrekte spådommer.
5) Visualisere resultatet av treningssettet:
Deretter vil vi visualisere resultatet av treningssettet ved hjelp av Na�ve Bayes Classifier. Nedenfor er koden for 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()
Produksjon:
I utgangen ovenfor kan vi se at Na�ve Bayes-klassifikatoren har segregert datapunktene med den fine grensen. Det er gaussisk kurve slik vi har brukt GaussianNB klassifiserer i koden vår.
6) Visualisere testsettets 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()
Produksjon:
Ovennevnte utgang er endelig utgang for testsettdata. Som vi kan se har klassifikatoren laget en Gauss-kurve for å dele variablene 'kjøpt' og 'ikke kjøpt'. Det er noen feil spådommer som vi har beregnet i forvirringsmatrisen. Men det er fortsatt ganske bra klassifiserer.