- Naiivi Bayes-algoritmi on valvottu oppimisalgoritmi, joka perustuu Bayesin lause ja käytetään luokitteluongelmien ratkaisemiseen.
- Sitä käytetään pääasiassa tekstin luokittelu joka sisältää korkeaulotteisen harjoitustietojoukon.
- Naive Bayes Classifier on yksi yksinkertaisimmista ja tehokkaimmista luokittelualgoritmeista, joka auttaa rakentamaan nopeita koneoppimismalleja, jotka voivat tehdä nopeita ennusteita.
- Joitakin suosittuja esimerkkejä Naive Bayes -algoritmista ovat roskapostin suodatus, tunteellinen analyysi ja artikkeleiden luokittelu .
Miksi sitä kutsutaan Naive Bayesiksi?
Naive Bayes -algoritmi koostuu kahdesta sanasta Naive ja Bayes, joita voidaan kuvata seuraavasti:
Bayesin lause:
- Bayesin lause tunnetaan myös nimellä Bayesin sääntö tai Bayesin laki , jota käytetään hypoteesin todennäköisyyden määrittämiseen ennakkotiedolla. Se riippuu ehdollisesta todennäköisyydestä.
- Bayesin lauseen kaava on annettu seuraavasti:
Missä,
P(A|B) on posteriorinen todennäköisyys : hypoteesin A todennäköisyys havaitulle tapahtumalle B.
P(B|A) on todennäköisyystodennäköisyys : Todistuksen todennäköisyys, kun hypoteesin todennäköisyys on totta.
P(A) on ennakkotodennäköisyys : Hypoteesin todennäköisyys ennen todisteiden havainnointia.
P(B) on marginaalinen todennäköisyys : Todistuksen todennäköisyys.
Naive Bayesin luokittelijan toiminta:
Naive Bayesin luokittelijan toiminta voidaan ymmärtää alla olevan esimerkin avulla:
Oletetaan, että meillä on tietojoukko sääolosuhteet ja vastaava kohdemuuttuja ' pelata '. Joten käyttämällä tätä tietojoukkoa meidän on päätettävä, pitäisikö meidän pelata tiettynä päivänä vai ei sääolosuhteiden mukaan. Joten tämän ongelman ratkaisemiseksi meidän on noudatettava seuraavia vaiheita:
- Muunna annettu tietojoukko taajuustaulukoiksi.
- Luo Todennäköisyystaulukko etsimällä annettujen ominaisuuksien todennäköisyydet.
- Käytä nyt Bayesin lausetta posteriorin todennäköisyyden laskemiseen.
Ongelma : Jos sää on aurinkoinen, pitäisikö Playerin pelata vai ei?
Ratkaisu : Tämän ratkaisemiseksi harkitse ensin alla olevaa tietojoukkoa:
Näkymät | pelata | |
---|---|---|
0 | Sateinen | Joo |
1 | Aurinkoinen | Joo |
2 | Pilvinen | Joo |
3 | Pilvinen | Joo |
4 | Aurinkoinen | Ei |
5 | Sateinen | Joo |
6 | Aurinkoinen | Joo |
7 | Pilvinen | Joo |
8 | Sateinen | Ei |
9 | Aurinkoinen | Ei |
10 | Aurinkoinen | Joo |
yksitoista | Sateinen | Ei |
12 | Pilvinen | Joo |
13 | Pilvinen | Joo |
Taajuustaulukko sääolosuhteille:
binäärihaku
Sää | Joo | Ei |
Pilvinen | 5 | 0 |
Sateinen | 2 | 2 |
Aurinkoinen | 3 | 2 |
Kaikki yhteensä | 10 | 5 |
Todennäköisyystaulukon sääolosuhteet:
Sää | Ei | Joo | |
Pilvinen | 0 | 5 | 5/14 = 0,35 |
Sateinen | 2 | 2 | 4/14 = 0,29 |
Aurinkoinen | 2 | 3 | 5/14 = 0,35 |
Kaikki | 4/14 = 0,29 | 10/14 = 0,71 |
Bayesin lauseen soveltaminen:
P(Kyllä|Aurinkoinen)= P(Aurinkoinen|Kyllä)*P(Kyllä)/P(Aurinkoinen)
P (Aurinkoinen|Kyllä) = 3/10 = 0,3
P (aurinkoinen) = 0,35
P(kyllä) = 0,71
string.compare c#
Joten P(kyllä|aurinkoinen) = 0,3*0,71/0,35= 0,60
P(Ei|Aurinkoinen)= P(Aurinkoinen|Ei)*P(Ei)/P(Aurinkoinen)
P(Aurinkoinen|EI)= 2/4=0,5
P(ei) = 0,29
P (aurinkoinen) = 0,35
Joten P(ei|aurinkoinen)= 0,5*0,29/0,35 = 0,41
Joten kuten voimme nähdä yllä olevasta laskelmasta, että P(kyllä|aurinkoinen)>P(ei|aurinkoinen)
lambda-toiminto java
Näin ollen aurinkoisena päivänä pelaaja voi pelata peliä.
Naive Bayes -luokittimen edut:
- Naive Bayes on yksi nopeista ja helpoista ML-algoritmeista ennustaa tietojoukkojen luokka.
- Sitä voidaan käyttää binääriluokituksessa sekä moniluokkaisissa luokitteluissa.
- Se toimii hyvin moniluokkaisissa ennusteissa verrattuna muihin algoritmeihin.
- Se on suosituin valinta tekstin luokitteluongelmia .
Naive Bayes -luokittelulaitteen haitat:
- Naive Bayes olettaa, että kaikki ominaisuudet ovat itsenäisiä tai toisiinsa liittymättömiä, joten se ei voi oppia ominaisuuksien välistä suhdetta.
Naive Bayes -luokittajan sovellukset:
- Sitä käytetään Luottoluokitus .
- Sitä käytetään lääketieteellisten tietojen luokitus .
- Sitä voidaan käyttää reaaliaikaisia ennusteita koska Naive Bayes Classifier on innokas oppija.
- Sitä käytetään tekstiluokituksessa, kuten Roskapostin suodatus ja Sentimenttianalyysi .
Naiivien Bayes-mallien tyypit:
Naive Bayes -malleja on kolme tyyppiä, jotka on esitetty alla:
Luokitin käyttää sanojen tiheyttä ennustajina.
Naive Bayes -algoritmin Python-toteutus:
Nyt toteutamme Naive Bayes -algoritmin Pythonilla. Joten käytämme tähän käyttäjätiedot ' tietojoukko , jota olemme käyttäneet toisessa luokitusmallissamme. Siksi voimme helposti verrata Naive Bayes -mallia muihin malleihin.
Toteutusvaiheet:
- Tietojen esikäsittelyvaihe
- Naive Bayesin sovittaminen harjoitussarjaan
- Testituloksen ennustaminen
- Tuloksen testin tarkkuus (sekaannusmatriisin luominen)
- Testisarjan tuloksen visualisointi.
1) Tietojen esikäsittelyvaihe:
Tässä vaiheessa esikäsittelemme/valmistamme tiedot, jotta voimme käyttää niitä tehokkaasti koodissamme. Se on samanlainen kuin teimme tietojen esikäsittelyssä. Tämän koodi on alla:
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)
Yllä olevassa koodissa olemme ladanneet tietojoukon ohjelmaamme käyttämällä ' tietojoukko = pd.read_csv('user_data.csv') . Ladattu tietojoukko jaetaan harjoitus- ja testijoukkoon, minkä jälkeen olemme skaalannut ominaisuusmuuttujan.
Tietojoukon tulos annetaan seuraavasti:
2) Naive Bayen sovittaminen harjoitussarjaan:
Esikäsittelyvaiheen jälkeen sovitamme nyt Naive Bayes -mallin harjoitussarjaan. Alla on koodi sille:
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train)
Yllä olevassa koodissa olemme käyttäneet GaussianNB-luokitus sovittaaksesi sen harjoitustietojoukkoon. Voimme käyttää myös muita luokituksia tarpeidemme mukaan.
Lähtö:
Out[6]: GaussianNB(priors=None, var_smoothing=1e-09)
3) Testisarjan tuloksen ennuste:
Nyt ennustamme testisarjan tuloksen. Tätä varten luomme uuden ennustajamuuttujan y_pred , ja käyttää ennustusfunktiota ennusteiden tekemiseen.
# Predicting the Test set results y_pred = classifier.predict(x_test)
Lähtö:
Yllä oleva tulos näyttää ennustevektorin tuloksen y_pred ja todellinen vektori y_test. Voimme nähdä, että jotkut ennusteet poikkeavat todellisista arvoista, jotka ovat vääriä ennusteita.
4) Sekaannusmatriisin luominen:
Nyt tarkistamme Naive Bayes -luokittimen tarkkuuden käyttämällä Confusion-matriisia. Alla on koodi sille:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
Lähtö:
Kuten yllä olevasta hämmennysmatriisilähdöstä näemme, virheellisiä ennusteita on 7+3=10 ja oikeita ennusteita 65+25=90.
5) Harjoittelusarjan tuloksen visualisointi:
Seuraavaksi visualisoimme harjoitussarjan tuloksen Na�ve Bayes Classifierilla. Alla on koodi sille:
junit-testitapaukset
# 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()
Lähtö:
Yllä olevasta lähdöstä näemme, että Na�ve Bayes -luokitin on erotellut datapisteet hienolla rajalla. Se on Gaussin käyrä, kuten olemme käyttäneet GaussianNB luokitin koodissamme.
6) Testisarjan tuloksen visualisointi:
# 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()
Lähtö:
Yllä oleva tulos on testisarjatietojen lopullinen lähtö. Kuten näemme, luokitin on luonut Gaussin käyrän jakaakseen 'ostetut' ja 'ei ostetut' muuttujat. On olemassa joitakin vääriä ennusteita, jotka olemme laskeneet Sekaannusmatriisissa. Mutta silti se on melko hyvä luokitin.