logo

Naiivi Bayesin luokittelualgoritmi

  • 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.
  • Se on todennäköisyysluokitus, mikä tarkoittaa, että se ennustaa kohteen todennäköisyyden perusteella.
  • 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:

    Naiivi: Sitä kutsutaan Naiiviksi, koska se olettaa, että tietyn piirteen esiintyminen on riippumaton muiden piirteiden esiintymisestä. Jos hedelmä tunnistetaan värin, muodon ja maun perusteella, niin punainen, pallomainen ja makea hedelmä tunnistetaan omeniksi. Näin ollen jokainen ominaisuus erikseen auttaa tunnistamaan, että se on omena riippumatta toisistaan.Bayes: Sitä kutsutaan Bayesiksi, koska se riippuu Bayesin lauseen periaatteesta.

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:
Naiivi Bayesin luokittelualgoritmi

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:

  1. Muunna annettu tietojoukko taajuustaulukoiksi.
  2. Luo Todennäköisyystaulukko etsimällä annettujen ominaisuuksien todennäköisyydet.
  3. 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:

    Gaussin: Gaussin malli olettaa, että piirteet noudattavat normaalijakaumaa. Tämä tarkoittaa, että jos ennustajat ottavat jatkuvia arvoja diskreettien sijaan, niin malli olettaa, että nämä arvot on otettu Gaussin jakaumasta.Multinomi: Multinomial Naive Bayes -luokittajaa käytetään, kun tiedot on jaettu moninomisesti. Sitä käytetään ensisijaisesti asiakirjojen luokitteluongelmiin, se tarkoittaa, että tietty asiakirja kuuluu mihin luokkaan, kuten urheilu, politiikka, koulutus jne.
    Luokitin käyttää sanojen tiheyttä ennustajina.Bernoulli: Bernoulli-luokitin toimii samalla tavalla kuin Multinomiaalinen luokitin, mutta ennustajamuuttujat ovat riippumattomia Boolean-muuttujia. Esimerkiksi, onko tietty sana asiakirjassa vai ei. Tämä malli on myös kuuluisa asiakirjojen luokittelutehtävistään.

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:

Naiivi Bayesin luokittelualgoritmi 1

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ö:

Naiivi Bayesin luokittelualgoritmi 2

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ö:

Naiivi Bayesin luokittelualgoritmi 3

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ö:

Naiivi Bayesin luokittelualgoritmi 4

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ö:

Naiivi Bayesin luokittelualgoritmi 5

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.