Sadə Bayes alqoritminə giriş

ML
ML alqoritmi
təsnifatı
Sadə Bayes alqoritminə giriş cover image

Cədvəl:

Giriş

Naive Bayes, Bayes teoreminə əsaslanan təsnifat maşın öyrənmə alqoritmidir. Xüsusilə mətn məlumatları ilə işləyərkən çox səmərəlidir: Sentiment Analizi, Spam aşkarlanması və mətn təsnifatı.

Bu alqoritm bütün verilənlər bazası dəyişənlərinin müstəqil olması fərziyyəsinə görə “Sadəlövh” adlanır, bu həmişə belə olmur.

Naive bayes-in necə işlədiyini izah etməyə davam etməzdən əvvəl, aşağıdakıları anladığımıza əmin olaq:

Şərti ehtimal

Sadə Bayes alqoritmi şərti ehtimala əsaslanan Bayes teoreminə əsaslanır: bu, B hadisəsinin artıq baş verdiyi halda A hadisəsinin baş vermə ehtimalıdır.

Məsələn:

Rəngli toplar olan iki bankaya sahib olaq:

  • 1-ci qabda 3 mavi top, 2 qırmızı top və 4 yaşıl top var.

  • 2-ci bankada 1 mavi top, 4 qırmızı top və 3 yaşıl top var.

Kavanozlardan birindən təsadüfi olaraq mavi top seçmək ehtimalını hesablamaq istəyirik

equations

Bu, Jar1 və ya Jar2-dən mavi topu seçmək ehtimallarının cəmindən başqa bir şey deyil.

İndi Jar1-i seçdiyimiz halda mavi topun seçilmə ehtimalını hesablamaq istəyirik:

equations

Nəhayət, mavi top çəkdiyimizi nəzərə alaraq Jar1-in seçilmə ehtimalını hesablamaq istəyirik. Burada Bayes teoremindən istifadə edirik ki, bu da aşağıdakı kimi ifadə edilir:

equations

equations

Naive Bayes təsnifatı

Naive Bayes klassifikatorunda biz X giriş vektoru ilə şərti ehtimalı maksimuma çatdıran sinfi tapmaq istəyirik; Beləliklə, Naive Bayes aşağıdakı kimi tərtib edilə bilər:

equations

Bayes teoreminin istifadəsi ilə funksiya belə olur:

equations

Bu düsturda Ci sinifinin ehtimalından başqa olmayan P(Ci)-ni hesablamaq asandır və x hadisəsinin baş vermə ehtimalı olan P(x)-i hesablamaq asandır.

Hesablamaq çətin olan P(x|Ci); Ci sinfi verilmiş x hadisəsinin ehtimalı. Bunu daha da sadələşdirmək üçün biz bütün giriş dəyişənlərinin müstəqil olduğunu qəbul etməliyik; beləliklə yaza bilərik:

equations

Və əslində bu fərziyyəyə görə biz bu təsnifatı “Sadəlövh” adlandırırıq, çünki biz həmişə giriş dəyişənlərinin müstəqilliyinə zəmanət verə bilmirik. Naive Bayes təsnifatı belə olur:

equations

Əslində, biz P(x)-i aradan qaldırmaqla bu formulanı daha da sadələşdirə bilərik, çünki bu, bütün siniflər üçün eynidir:

equations

İndi bir nümunəyə nəzər salaq:

| Hava | Zaman | Həftənin günü | Nahar |

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

| Təmiz | Axşam | Həftə sonu | Aşpazlar |

| Buludlu | Gecə | Həftə içi | Sifarişlər |

| Yağışlı | Gecə | Həftə içi | Sifarişlər |

| Yağışlı | Günorta | Həftə içi | Sifarişlər |

| Buludlu | Günorta | Həftə sonu | Aşpazlar |

| Təmiz | Gecə | Həftə sonu | Aşpazlar |

| Qarlı | Axşam | Həftə sonu | Sifarişlər |

| Təmiz | Gecə | Həftə içi | Aşpazlar |

| Təmiz | Gecə yarısı | Həftə sonu | Sifarişlər |

Burada 3 giriş dəyişənini ehtiva edən kiçik bir məlumat dəstimiz var: Hava, Həftənin Saatı və Günü və bir Hədəf dəyişəni: insanın nahar bişirib-bişirmədiyini və ya sifariş etdiyini göstərən “Şam yeməyi”. Biz x={Clear, Evening, Weekend} girişinin sinfini tapmaq istərdik:

equations

X={Clear, Evening, Weekend} daxil edilməklə “Aşpazlar” sinfi və “Sifarişlər” sinfi üçün şərti ehtimalı hesablamalıyıq. Proqnozlaşdırılan sinif ən yüksək şərti ehtimala malik olan sinifdir.

"Aşpazlar" sinfinin şərti ehtimalını hesablamağa başlayırıq:

equations

İndi hər bir şərti ehtimalı özbaşına hesablayırıq:

"Aşpazlar" sinfinin olduğunu nəzərə alsaq, hava ehtimalı = "Aşpazlar" hava şəraiti "Aşpazlar" sinifinə malik olan sətirlərin ümumi sayı üzərində "Aşpazlar" sinifinin sayıdır.

equations

Eyni şey digər şərti ehtimallara da aiddir:

equations

İndi P (Aşpazlar) ehtimalı üçün bu, ümumi sətirlərin sayı üzərində “Aşpazlar” sinfinə malik sətirlərin sayıdır:

equations

İndi bu ehtimalların məhsulunu hesablayırıq:

equations

Bu, "Aşpazlar" sinfi üçün idi, indi "Sifarişlər" sinfi üçün də eyni şeyi etməliyik:

equations

Fərdi ehtimalları hesablayırıq:

equations

Və nəhayət, ehtimalların məhsulunu hesablayırıq:

equations

Nəhayət, “Aşpazlar” sinfi olan ən yüksək ehtimalla sinfi götürürük:

equations

equations

equations

equations

equations

equations

Bu alqoritmin üstünlükləri və məhdudiyyətləri

Üstünlüklər:

  • Bu, çox sürətli təsnifatdır.

  • Həyata keçirmək asandır.

  • Təlim mərhələsi yoxdur, ancaq nəticə çıxarmaqdır.

  • Nəticə çıxarmaq üçün çox məlumat tələb etmir.

Məhdudiyyətlər:

  • Sadəlövh Bayes giriş dəyişənlərinin müstəqil olduğunu fərz edir, bu həmişə doğru deyil.

  • Sadəlövh Bayes sıfır tezlik problemindən əziyyət çəkir: bu, giriş dəyişəninə sıfır ehtimal təyin etdiyi zamandır. Bu, bütün şərti ehtimalı P(C|x) sıfırlayacaq. Bunun qarşısını almaq üçün bir hiylə bütün dəyişənlərə minimal 1 tezliyindən (0 əvəzinə) istifadə etməkdir.

Məşq

Budur, nümunədə gördüyümüz eyni verilənlər toplusunun dataframe.

Tapşırıqınız python istifadə edərək Naive Bayes-i özünüz həyata keçirməkdir:

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

Həll


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

Karyera Xidmətləri

Contact Section background image

Əlaqə saxlayaq

Code Labs Academy © 2024 Bütün hüquqlar qorunur.