Panimula sa Naive Bayes Algorithm

ML
ML algorithm
pag-uuri
Panimula sa Naive Bayes Algorithm cover image

Talahanayan:

Intro

Ang Naive Bayes ay isang classification machine learning algorithm na batay sa Bayes theorem. Ito ay napakahusay lalo na kapag nakikitungo sa data ng teksto tulad ng: Pagsusuri ng Sentimento, Pagtukoy sa Spam at pag-uuri ng teksto.

Ang algorithm na ito ay tinatawag na "Naive" dahil sa pagpapalagay na ang lahat ng mga variable ng dataset ay independyente, na hindi palaging nangyayari.

Bago magpatuloy sa pagpapaliwanag kung paano gumagana ang Naive bayes, siguraduhin nating nauunawaan natin ang sumusunod:

May kundisyon na posibilidad

Ang algorithm ng Naive Bayes ay nakabatay sa Bayes theorem na nakabatay sa conditional probability: ito ang probabilidad ng paglitaw ng isang event A na ibinigay na ang isang event B ay naganap na.

Halimbawa:

Magkaroon tayo ng dalawang garapon na naglalaman ng mga bolang may kulay:

  • Ang Jar 1 ay may 3 asul na bola, 2 pulang bola at 4 na berdeng bola.

  • Ang Jar 2 ay may 1 asul na bola, 4 na pulang bola at 3 berdeng bola.

Gusto naming kalkulahin ang posibilidad ng random na pagpili ng isang asul na bola mula sa isa sa mga garapon

equations

Ito ay walang iba kundi ang kabuuan ng mga probabilidad ng pagpili ng asul na bola mula sa Jar1 o Jar2.

Ngayon, gusto naming kalkulahin ang posibilidad ng pagpili ng isang asul na bola dahil pinili namin ang Jar1:

equations

Sa wakas, gusto naming kalkulahin ang posibilidad ng pagpili ng Jar1 na ibinigay na iginuhit namin ang isang asul na bola. Dito ginagamit namin ang Bayes Theorem na nakasaad bilang mga sumusunod:

equations

equations

Pag-uuri ng Naive Bayes

Sa Naive Bayes classifier, gusto naming hanapin ang klase na nagpapalaki sa conditional probability na ibinigay sa input vector X; kaya, ang Naive Bayes ay maaaring mabuo bilang sumusunod:

equations

Sa paggamit ng Bayes Theorem, ang function ay nagiging:

equations

Sa formulation na ito, madaling kalkulahin ang P(Ci) na walang iba kundi ang probabilidad ng class Ci, at madaling kalkulahin ang P(x) na probabilidad ng kaganapang x na naganap.

Ang mahirap kalkulahin ay ang P(x|Ci); ang posibilidad ng kaganapan x na ibinigay sa klase Ci. Upang higit pang gawing simple ito, kailangan nating ipagpalagay na ang lahat ng mga variable ng input ay independyente; kaya, maaari nating isulat:

equations

At talagang dahil sa pagpapalagay na ito na tinatawag nating "Naive" ang classifier na ito, dahil hindi natin palaging magagarantiya ang kalayaan ng mga variable ng input. Ang Naive Bayes classifier ay nagiging:

equations

Sa katunayan, maaari pa nating gawing simple ang pormulasyon na ito sa pamamagitan ng pag-aalis ng P(x), dahil pareho ito para sa lahat ng klase:

equations

Ngayon, tingnan natin ang isang halimbawa:

| Panahon | Oras | Araw ng linggo | Hapunan |

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

| Maaliwalas | Gabi | Weekend | Mga Cook |

| Maulap | Gabi | Linggo | Mga Order |

| Maulan | Gabi | Linggo | Mga Order |

| Maulan | Tanghali | Linggo | Mga Order |

| Maulap | Tanghali | Weekend | Mga Cook |

| Maaliwalas | Gabi | Weekend | Mga Cook |

| Maniyebe | Gabi | Weekend | Mga Order |

| Maaliwalas | Gabi | Linggo | Mga Cook |

| Maaliwalas | Hatinggabi | Weekend | Mga Order |

Dito, mayroon kaming maliit na dataset na naglalaman ng 3 input variable: Taya ng Panahon, Oras at Araw ng linggo, at isang Target na variable: "Hapunan" na nagsasaad kung ang isang tao ay nagluluto o nag-order ng kanilang hapunan . Gusto naming hanapin ang klase ng input x={Clear, Evening, Weekend}:

equations

Kailangan nating kalkulahin ang conditional na posibilidad para sa klase na "Cooks" at ang klase na "Mga Order" na binigyan ng input na x={Clear, Evening, Weekend}. Ang hinulaang klase ay ang may pinakamataas na posibilidad na may kondisyon.

Nagsisimula kami sa pamamagitan ng pagkalkula ng kondisyon na posibilidad ng klase na "Cooks":

equations

Ngayon kinakalkula namin ang bawat kondisyon na posibilidad sa sarili nitong:

Ang posibilidad ng lagay ng panahon="Clear" na ibinigay na ang klase ay "Cooks" ay ang bilang ng mga linya na may weather "Clear" at class na "Cooks" sa kabuuang bilang ng mga linya na may class na "Cooks"

equations

Ang parehong napupunta para sa iba pang mga kondisyon na probabilidad:

equations

Ngayon para sa posibilidad na P(Cooks) ito ang bilang ng mga linya na may klase na "Cooks" sa kabuuang bilang ng mga linya:

equations

Ngayon kinakalkula namin ang produkto ng mga probabilidad na ito:

equations

Iyon ay para sa klase na "Mga Tagapagluto", ngayon ay kailangan nating gawin ang parehong para sa klase na "Mga Order":

equations

Kinakalkula namin ang mga indibidwal na probabilidad:

equations

At sa wakas ay kinakalkula namin ang produkto ng mga probabilidad:

equations

Sa wakas, kinukuha namin ang klase na may pinakamataas na posibilidad na ang klase na "Cooks":

equations

equations

equations

equations

equations

equations

Mga kalamangan at limitasyon ng algorithm na ito

Mga Bentahe:

  • Ito ay isang napakabilis na classifier.

  • Ito ay madaling ipatupad.

  • Walang yugto ng pagsasanay, ngunit ito ay hinuha lamang.

  • Hindi ito nangangailangan ng maraming data upang makagawa ng mga hinuha.

Mga Limitasyon:

  • Ipinapalagay ng Naive Bayes na ang mga variable ng input ay independyente, na hindi palaging totoo.

  • Ang Naive Bayes ay dumaranas ng problema sa zero-frequency: ito ay kapag nagtalaga ito ng zero probability sa isang input variable. Aalisin nito ang lahat ng conditional probability P(C|x). Ang isang trick upang maiwasan ito ay ang paggamit ng kaunting dalas ng 1 ( sa halip na 0 ) sa lahat ng mga variable.

Mag-ehersisyo

Narito ang dataframe ng parehong dataset na nakita namin sa halimbawa.

Ang iyong gawain ay ipatupad ang Naive Bayes sa iyong sarili gamit ang python:

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

Solusyon


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

Mga Serbisyo sa Karera

Contact Section background image

Manatiling nakikipag-ugnayan tayo

Code Labs Academy © 2024 Lahat ng karapatan ay nakalaan.