Əsas məzmuna keç
Bloqa qayıt

Sadə Bayes alqoritminə giriş

September 27, 2024 yeniləndi5 dəqiqə oxundu


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


Code Labs Academy ilə onlayn texniki bacarıqları öyrənin

Code Labs Academy ilə onlayn texniki bacarıqları öyrənin

Dəstəkləyici birliyimizə qoşulun, potensialınızı açın və mükafatlandırıcı bir karyera yoluna başlayın.

İndi müraciət edin