logo

Naivus Bayes klasifikatoriaus algoritmas

  • Naive Bayes algoritmas yra prižiūrimas mokymosi algoritmas, pagrįstas Bayes teorema ir naudojami klasifikavimo problemoms spręsti.
  • Jis daugiausia naudojamas teksto klasifikacija kuri apima didelio masto mokymo duomenų rinkinį.
  • Naive Bayes klasifikatorius yra vienas iš paprastų ir efektyviausių klasifikavimo algoritmų, padedančių sukurti greitus mašininio mokymosi modelius, kurie gali greitai prognozuoti.
  • Tai tikimybinis klasifikatorius, o tai reiškia, kad jis prognozuoja pagal objekto tikimybę.
  • Kai kurie populiarūs Naive Bayes algoritmo pavyzdžiai pašto šiukšlių filtravimas, sentimentali analizė ir straipsnių klasifikavimas .

Kodėl jis vadinamas Naive Bayes?

Naive Bayes algoritmą sudaro du žodžiai Naive ir Bayes, kuriuos galima apibūdinti taip:

    Naivus: Jis vadinamas Naivu, nes daro prielaidą, kad tam tikros savybės atsiradimas nepriklauso nuo kitų požymių atsiradimo. Pavyzdžiui, jei vaisius identifikuojamas pagal spalvą, formą ir skonį, tada raudonas, sferinis ir saldus vaisius atpažįstamas kaip obuolys. Taigi kiekviena savybė atskirai padeda nustatyti, kad tai yra obuolys, nepriklausantis vienas nuo kito.Bayes: Jis vadinamas Bayes, nes priklauso nuo Bayes teoremos principo.

Bayeso teorema:

  • Bayeso teorema taip pat žinoma kaip Bayeso taisyklė arba Bayeso dėsnis , kuris naudojamas hipotezės tikimybei nustatyti turint išankstines žinias. Tai priklauso nuo sąlyginės tikimybės.
  • Bayeso teoremos formulė pateikiama taip:
Naivus Bayes klasifikatoriaus algoritmas

kur,

P(A|B) yra užpakalinė tikimybė : Hipotezės A tikimybė dėl stebimo įvykio B.

P(B|A) yra tikimybės tikimybė : įrodymų tikimybė, atsižvelgiant į tai, kad hipotezės tikimybė yra teisinga.

P(A) yra išankstinė tikimybė : hipotezės tikimybė prieš stebint įrodymus.

P(B) yra ribinė tikimybė : Įrodymų tikimybė.

rodyti paslėptas programas

Naive Bayes klasifikatoriaus veikimas:

Naive Bayes klasifikatoriaus veikimą galima suprasti naudojant toliau pateiktą pavyzdį:

Tarkime, kad turime duomenų rinkinį oro sąlygos ir atitinkamas tikslinis kintamasis ' žaisti “. Taigi, naudodamiesi šiuo duomenų rinkiniu, turime nuspręsti, ar žaisti tam tikrą dieną, ar ne, atsižvelgiant į oro sąlygas. Taigi, norėdami išspręsti šią problemą, turime atlikti šiuos veiksmus:

  1. Konvertuokite pateiktą duomenų rinkinį į dažnių lenteles.
  2. Sukurkite Tikimybių lentelę, surasdami nurodytų savybių tikimybes.
  3. Dabar, norėdami apskaičiuoti užpakalinę tikimybę, naudokite Bayes teoremą.

Problema : Jei oras saulėtas, žaidėjas turėtų žaisti ar ne?

Sprendimas : Norėdami tai išspręsti, pirmiausia apsvarstykite toliau pateiktą duomenų rinkinį:

Outlook žaisti
0 Lietingas Taip
1 Saulėta Taip
2 Debesuota Taip
3 Debesuota Taip
4 Saulėta Nr
5 Lietingas Taip
6 Saulėta Taip
7 Debesuota Taip
8 Lietingas Nr
9 Saulėta Nr
10 Saulėta Taip
vienuolika Lietingas Nr
12 Debesuota Taip
13 Debesuota Taip

Oro sąlygų dažnių lentelė:

Orai Taip Nr
Debesuota 5 0
Lietingas 2 2
Saulėta 3 2
Iš viso 10 5

Tikimybių lentelės oro sąlygos:

Orai Nr Taip
Debesuota 0 5 5/14 = 0,35
Lietingas 2 2 4/14=0,29
Saulėta 2 3 5/14=0,35
Visi 4/14=0,29 10/14=0,71

Bajeso teoremos taikymas:

P(taip|saulėtas)= P(saulėtas|taip)*P(taip)/P(saulėtas)

P (saulėtas|taip) = 3/10 = 0,3

P (saulėtas) = ​​0,35

P(taip)=0,71

Taigi P(taip|saulėtas) = ​​0,3*0,71/0,35= 0,60

pakeičiant eilutę Java

P(ne|saulėtas)= P(saulėtas|ne)*P(ne)/P(saulėtas)

P(saulėtas|NE)= 2/4=0,5

P(Ne)= 0,29

P (saulėtas) = ​​0,35

Taigi P(ne|saulėtas)= 0,5*0,29/0,35 = 0.41

Taigi, kaip matome iš aukščiau pateikto skaičiavimo, tai P(taip|saulėtas)>P(ne|saulėtas)

Taigi saulėtą dieną žaidėjas gali žaisti žaidimą.

Naive Bayes klasifikatoriaus privalumai:

  • Naive Bayes yra vienas iš greitų ir paprastų ML algoritmų, leidžiančių numatyti duomenų rinkinių klasę.
  • Jis gali būti naudojamas tiek dvejetainei, tiek kelių klasių klasifikacijai.
  • Jis gerai veikia kelių klasių prognozėse, palyginti su kitais algoritmais.
  • Tai populiariausias pasirinkimas teksto klasifikavimo problemos .

Naive Bayes klasifikatoriaus trūkumai:

  • Naive Bayes daro prielaidą, kad visos savybės yra nepriklausomos arba nesusijusios, todėl ji negali išmokti santykių tarp savybių.

Naive Bayes klasifikatoriaus programos:

  • Jis naudojamas Kredito įvertinimas .
  • Jis naudojamas medicininių duomenų klasifikacija .
  • Jis gali būti naudojamas prognozės realiuoju laiku nes Naive Bayes klasifikatorius noriai mokosi.
  • Jis naudojamas teksto klasifikacijoje, pvz Šlamšto filtravimas ir Sentimentų analizė .

Naive Bayes modelio tipai:

Yra trys Naive Bayes modelio tipai, kurie pateikiami žemiau:

    Gauso: Gauso modelis daro prielaidą, kad ypatybės atitinka normalųjį pasiskirstymą. Tai reiškia, kad jei prognozuotojai imasi ištisinių, o ne diskrečių verčių, tada modelis daro prielaidą, kad šios vertės yra atrinktos iš Gauso skirstinio.Daugiavardis: Multinomial Naive Bayes klasifikatorius naudojamas, kai duomenys paskirstomi daugianariu būdu. Jis pirmiausia naudojamas dokumentų klasifikavimo problemoms spręsti, tai reiškia, kad konkretus dokumentas priklauso kokiai kategorijai, pavyzdžiui, sportas, politika, švietimas ir kt.
    Klasifikatorius prognozėms naudoja žodžių dažnį.Bernulis: Bernoulli klasifikatorius veikia panašiai kaip Multinomial klasifikatorius, tačiau prognozuojamieji kintamieji yra nepriklausomi Būlio kintamieji. Pavyzdžiui, ar tam tikras žodis yra dokumente, ar jo nėra. Šis modelis taip pat garsėja dokumentų klasifikavimo užduotimis.

Naive Bayes algoritmo „Python“ įgyvendinimas:

Dabar mes įdiegsime naivų Bayes algoritmą naudodami Python. Taigi tam naudosime „ vartotojo_duomenys ' duomenų rinkinys , kurį naudojome kitame klasifikavimo modelyje. Todėl galime nesunkiai palyginti Naive Bayes modelį su kitais modeliais.

Įdiegimo žingsniai:

  • Duomenų išankstinio apdorojimo žingsnis
  • Naive Bayes pritaikymas prie treniruočių rinkinio
  • Testo rezultato numatymas
  • Rezultato tikslumo patikrinimas (sumišimo matricos kūrimas)
  • Testo rinkinio rezultato vizualizavimas.

1) Išankstinio duomenų apdorojimo žingsnis:

Šiame žingsnyje mes iš anksto apdorosime / paruošime duomenis, kad galėtume juos efektyviai panaudoti savo kode. Tai panašiai, kaip ir išankstinio duomenų apdorojimo metu. Tam skirtas kodas pateiktas žemiau:

 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) 

Aukščiau pateiktame kode duomenų rinkinį įkėlėme į savo programą naudodami „ duomenų rinkinys = pd.read_csv('user_data.csv') . Įkeltas duomenų rinkinys yra padalintas į mokymo ir bandymo rinkinį, tada mes padidinome funkcijos kintamąjį.

Duomenų rinkinio išvestis pateikiama taip:

Naivus Bayes klasifikatoriaus algoritmas 1

2) Naive Bayes pritaikymas prie treniruočių rinkinio:

Atlikę išankstinį apdorojimą, dabar Naive Bayes modelį pritaikysime prie mokymo rinkinio. Žemiau yra jo kodas:

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

Aukščiau pateiktame kode mes panaudojome GaussianNB klasifikatorius kad tilptų į treniruočių duomenų rinkinį. Taip pat galime naudoti kitus klasifikatorius pagal mūsų reikalavimus.

Išvestis:

kiek savaičių per mėnesį
 Out[6]: GaussianNB(priors=None, var_smoothing=1e-09) 

3) Bandymo rinkinio rezultato numatymas:

Dabar mes prognozuosime testų rinkinio rezultatą. Tam sukursime naują prognozuojamąjį kintamąjį y_pred , ir naudos numatymo funkciją prognozėms atlikti.

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

Išvestis:

Naivus Bayes klasifikatoriaus algoritmas 2

Aukščiau pateikta išvestis rodo prognozės vektoriaus rezultatą y_pred ir realus vektorius y_testas. Matome, kad kai kurios prognozės skiriasi nuo realių verčių, kurios yra neteisingos prognozės.

4) Supainiojimo matricos kūrimas:

Dabar mes patikrinsime Naive Bayes klasifikatoriaus tikslumą naudodami painiavos matricą. Žemiau yra jo kodas:

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

Išvestis:

Naivus Bayes klasifikatoriaus algoritmas 3

Kaip matome aukščiau pateiktoje painiavos matricos išvestyje, yra 7 + 3 = 10 neteisingų prognozių ir 65 + 25 = 90 teisingų prognozių.

5) Treniruočių rinkinio rezultato vizualizavimas:

Toliau vizualizuosime treniruočių rinkinio rezultatą naudodami Na�ve Bayes klasifikatorių. Žemiau yra jo kodas:

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

Išvestis:

Naivus Bayes klasifikatoriaus algoritmas 4

Aukščiau pateiktame išvestyje matome, kad Na�ve Bayes klasifikatorius atskyrė duomenų taškus su tikslia riba. Tai yra Gauso kreivė, kaip mes naudojome GaussianNB klasifikatorius mūsų kode.

6) Testo rinkinio rezultato vizualizavimas:

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

Išvestis:

Naivus Bayes klasifikatoriaus algoritmas 5

Aukščiau pateikta išvestis yra galutinė bandymo rinkinio duomenų išvestis. Kaip matome, klasifikatorius sukūrė Gauso kreivę, kuri padalija kintamuosius „pirkta“ ir „nepirkta“. Yra keletas klaidingų prognozių, kurias apskaičiavome painiavos matricoje. Bet vis tiek tai gana geras klasifikatorius.