Naive Bayes Algoritmoaren sarrera

ML
ML algoritmoa
sailkapena
Naive Bayes Algoritmoaren sarrera cover image

Taula:

Sarrera

Naive Bayes sailkapen automatikoko ikaskuntza algoritmo bat da, Bayesen teoreman oinarritzen dena. Oso eraginkorra da batez ere testu-datuekin tratatzerakoan: sentimenduen analisia, spam-a detektatzea eta testuen sailkapena.

Algoritmo honi "Naive" deitzen zaio datu-multzoko aldagai guztiak independenteak direla suposatzen duelako, eta hori ez da beti horrela.

Naive bayes-ek nola funtzionatzen duen azaltzen joan aurretik, ziurtatu honako hau ulertzen dugula:

Probabilitate baldintzatua

Bayes-en algoritmo inozoa probabilitate baldintzatuan oinarritzen den Bayes-en teoreman oinarritzen da: A gertaera bat gertatzeko probabilitatea da, B gertaera bat dagoeneko gertatu dela kontuan hartuta.

Adibidea:

Har ditzagun koloretako bolak dituzten bi pote:

    1. poteak 3 bola urdin, 2 gorri eta 4 berde ditu.
    1. poteak bola urdin 1, 4 bola gorri eta 3 bola berde ditu.

Poteetako batetik bola urdin bat ausaz hautatzeko probabilitatea kalkulatu nahi dugu

equations

Jar1 edo Jar2-ko bola urdin bat hautatzeko probabilitateen batura baino ez da.

Orain, bola urdin bat hautatzeko probabilitatea kalkulatu nahi dugu Jar1 hautatu dugula kontuan hartuta:

equations

Azkenik, Jar1 hautatzeko probabilitatea kalkulatu nahi dugu bola urdin bat atera dugula kontuan hartuta. Hemen Bayes-en teorema erabiltzen dugu, honela adierazten dena:

equations

equations

Naive Bayesen sailkapena

Naive Bayes sailkatzailean, X sarrera-bektorea emanda probabilitate baldintzatua maximizatzen duen klasea aurkitu nahi dugu; horrela, Naive Bayes honela formula daiteke:

equations

Bayes-en teorema erabiliz, funtzioa hau bihurtzen da:

equations

Formulazio honetan, erraza da P(Ci) kalkulatzea, Ci klasearen probabilitatea baino ez dena, eta P(x) x gertaera gertatzeko probabilitatea den kalkulatzea erraza da.

Kalkulatzen zaila dena P(x|Ci); x gertakariaren probabilitatea Ci klasea emanda. Hau gehiago sinplifikatzeko, sarrerako aldagai guztiak independenteak direla suposatu behar dugu; horrela, idatzi dezakegu:

equations

Eta, egia esan, hipotesi hori dela eta, sailkatzaile honi "Inozoa" deitzen diogu, ezin baitugu beti sarrerako aldagaien independentzia bermatu. Naive Bayes sailkatzailea hauxe da:

equations

Izan ere, formulazio hau gehiago sinplifikatu dezakegu P(x) ezabatuz, klase guztietan berdina baita:

equations

Orain, ikus diezaiogun adibide bati:

| Eguraldia | Denbora | Asteko eguna | Afaria |

| ------- | -------- | --------------- | ------ |

| Garbitu | Arratsaldea | Asteburua | Sukaldariak |

| Hodeitsu | Gaua | Asteguna | Eskaerak |

| Euritsua | Gaua | Asteguna | Eskaerak |

| Euritsua | Eguerdia | Asteguna | Eskaerak |

| Hodeitsu | Eguerdia | Asteburua | Sukaldariak |

| Garbitu | Gaua | Asteburua | Sukaldariak |

| Elurra | Arratsaldea | Asteburua | Eskaerak |

| Garbitu | Gaua | Asteguna | Sukaldariak |

| Garbitu | Gauerdia | Asteburua | Eskaerak |

Hemen, 3 sarrera-aldagai dituen datu multzo txiki bat dugu: Eguraldia, ordua eta asteko eguna, eta Helburu-aldagai bat: "Afaria" pertsona batek bere afaria prestatzen edo eskatzen duen adierazten duena. Sarreraren klasea aurkitu nahiko genuke x={Garbi, arratsaldez, asteburuan}:

equations

"Sukaldariak" klasearen eta "Eskaerak" klasearen probabilitatea baldintzatua kalkulatu behar dugu x={Argi, Arratsaldean, Asteburuan} sarrera kontuan hartuta. Iragarritako klasea baldintzazko probabilitate handiena duena da.

"Sukaldariak" klaseko probabilitate baldintzatua kalkulatzen hasiko gara:

equations

Orain baldintzazko probabilitate bakoitza bere kabuz kalkulatuko dugu:

Eguraldiaren probabilitatea="Garbi" klasea "Sukaldariak" dela kontuan hartuta, eguraldia "Garbi" eta "Sukaldariak" klasea duten lerro kopurua "Sukaldariak" klasea duten lerro kopurua da.

equations

Gauza bera gertatzen da beste baldintzapeko probabilitateekin:

equations

Orain P(Sukaldariak) probabilitateari dagokionez, "Sukaldariak" klasea duten lerro kopurua da lerro kopuru osoaren gainean:

equations

Orain probabilitate hauen produktua kalkulatuko dugu:

equations

Hori "Sukaldariak" klaserako izan zen, orain gauza bera egin behar dugu "Eskaerak" klaserako:

equations

Banakako probabilitateak kalkulatzen ditugu:

equations

Eta azkenik probabilitateen produktua kalkulatuko dugu:

equations

Azkenik, probabilitate handiena duen klasea hartuko dugu, hau da, "Sukaldariak" klasea:

equations

equations

equations

equations

equations

equations

Algoritmo honen abantailak eta mugak

Abantailak:

  • Oso sailkatzaile azkarra da.

  • Ezartzeko erraza da.

  • Ez dago entrenamendu faserik, baina inferentzia baino ez da.

  • Ez du datu asko behar inferentziak egiteko.

Mugak:

  • Naive Bayes-ek sarrerako aldagaiak independenteak direla suposatzen du, eta hori ez da beti egia.

  • Naive Bayes-ek zero maiztasun arazoa pairatzen du: sarrerako aldagai bati zero probabilitatea esleitzen dionean da. Honek P(C|x) baldintzapeko probabilitatea zero kenduko du. Hau saihesteko trikimailu bat aldagai guztietan 1eko maiztasun minimoa erabiltzea da (0-ren ordez).

Ariketa

Hona hemen adibidean ikusi dugun datu multzo beraren datu-markoa.

Zure zeregina Naive Bayes zeure burua inplementatzea da python erabiliz:

import pandas as pd
dataset = pd.DataFrame()
dataset['Weather'] = ['Clear', 'Cloudy', 'Rainy', 'Rainy', 'Cloudy', 'Clear', 'Snowy', 'Clear', 'Clear']
dataset['Time'] = ['Evening', 'Night', 'Night', 'Midday', 'Midday', 'Night', 'Evening', 'Night', 'Midnight']
dataset['Day'] = ['Weekend', 'Weekday', 'Weekday', 'Weekday', 'Weekend', 'Weekend', 'Weekend', 'Weekday', 'Weekend']
dataset['Class'] = ['Cooks', 'Orders', 'Orders', 'Orders', 'Cooks', 'Cooks', 'Orders', 'Cooks', 'Orders']

def naive_bayes(weather, time, day):

# res_dict = {class1: probability of class 1, class1: probability of class 1
return res_dict

Irtenbidea


def naive_bayes(x_weather, x_time, x_day):
  TARGET = 'Dinner' # The name of the target variable
  CLASSES = list(dataset['Dinner'].unique()) # The classes of the target variable
len_dataset = len(dataset) # The length of the dataset
res_dict = {} # res_dict = {class1:probability1, ..., class_n:probability_n}

# for each class of the target classes, we calculate the it's conditional probability
for class_name in CLASSES:
# the number of lines that belong to the class "class_name"
len_c  = len(dataset[ (dataset[TARGET] == class_name) ])

# the number of lines that belong to the class "class_name" and have weather="x_weather"
n_weather = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Weather'] == x_weather) ])
# the number of lines that belong to the class "class_name" and have time="x_time"
n_time = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Time'] == x_time) ])

# the number of lines that belong to the class "class_name" and have day="x_day"
n_day  = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Day'] == x_day) ])

# We calculate the conditional probability:
# P(class|x) = P(weather|class) x P(time|class) x P(day|class) x P(class)
p = (n_weather / len_c) * (n_time / len_c) * (n_day / len_c) * (len_c / len_dataset)        res_dict[class_name] = p
return res_dict



Career Services background pattern

Lanbide Zerbitzuak

Contact Section background image

Jarrai gaitezen harremanetan

Code Labs Academy © 2024 Eskubide guztiak erreserbatuta.