Naive Bayes алгоритмине киришүү

ML
ML алгоритми
классификациясы
Naive Bayes алгоритмине киришүү cover image

Таблица:

Intro

Naive Bayes - бул Байес теоремасына негизделген классификациялоочу машина үйрөнүү алгоритми. Бул өзгөчө тексттик маалыматтар менен иштөөдө абдан эффективдүү: Сезимди талдоо, Спамды аныктоо жана текстти классификациялоо.

Бул алгоритм "Наив" деп аталат, анткени бардык маалымат топтомунун өзгөрмөлөрү көз карандысыз деген божомол бар, бул дайыма эле боло бербейт.

Naive Bayes кантип иштээрин түшүндүрүп берүүдөн мурун, биз төмөнкүлөрдү түшүнгөнүбүздү текшерип көрөлү:

Шарттуу ыктымалдуулук

Naive Bayes алгоритми шарттуу ыктымалдуулукка негизделген Байес теоремасына негизделген: бул В окуясы болуп өткөн болсо, А окуясынын пайда болуу ыктымалдыгы.

Мисалы:

Түстүү шарларды камтыган эки банка болсун:

  • 1 банкада 3 көк шар, 2 кызыл шар жана 4 жашыл шар бар.

  • 2 банкада 1 көк шар, 4 кызыл шар жана 3 жашыл шар бар.

Биз банкалардын биринен көк шарды кокустан тандап алуу ыктымалдыгын эсептеп алгыбыз келет

equations

Бул Jar1 же Jar2ден көк топту тандоо ыктымалдыктарынын суммасынан башка эч нерсе эмес.

Эми биз Jar1ди тандап алганыбызды эске алуу менен көк шарды тандоо ыктымалдыгын эсептеп алгыбыз келет:

equations

Акырында, биз көк шар тартканыбызды эске алганда, Jar1ди тандоо ыктымалдыгын эсептеп алгыбыз келет. Бул жерде биз төмөндөгүдөй айтылган Байес теоремасын колдонобуз:

equations

equations

Naive Bayes классификациясы

Naive Bayes классификаторунда биз X киргизүү вектору берилген шарттуу ыктымалдуулукту максималдуу кылган классты тапкыбыз келет; Ошентип, Naive Bayes төмөнкүчө чагылдырууга болот:

equations

Бейс теоремасын колдонуу менен функция төмөнкүдөй болот:

equations

Бул формулада Ci классынын ыктымалдыгынан башка эмес P(Ci) эсептөө оңой, ал эми х окуясынын пайда болуу ыктымалдыгы болгон P(x) эсептөө оңой.

Эсептөө кыйын P(x|Ci); Ci классы берилген х окуясынын ыктымалдыгы. Муну дагы жөнөкөйлөтүү үчүн, биз бардык киргизилген өзгөрмөлөр көз карандысыз деп ойлошубуз керек; Ошентип, биз жаза алабыз:

equations

Чындыгында, бул классификаторду "Наив" деп атаганыбыз ушул божомолдон улам, биз ар дайым киргизилген өзгөрмөлөрдүн көз карандысыздыгына кепилдик бере албайбыз. Naive Bayes классификатору төмөнкүдөй болот:

equations

Чынында, биз P(x) жок кылуу менен бул формуланы дагы жөнөкөйлөштүрө алабыз, анткени ал бардык класстар үчүн бирдей:

equations

Эми бир мисалды карап көрөлү:

| Аба ырайы | Убакыт | Аптанын күнү | Кечки тамак |

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

| Таза | Кечки | Weekend | Ашпозчулар |

| Булуттуу | Night | Иш күнү | Заказдар |

| Жамгырлуу | Night | Иш күнү | Заказдар |

| Жамгырлуу | Түшкү | Иш күнү | Заказдар |

| Булуттуу | Түшкү | Weekend | Ашпозчулар |

| Таза | Night | Weekend | Ашпозчулар |

| Snowy | Кечки | Weekend | Заказдар |

| Таза | Night | Иш күнү | Ашпозчулар |

| Таза | Midnight | Weekend | Заказдар |

Бул жерде бизде 3 киргизүү өзгөрмөсүн камтыган кичинекей берилиштер топтому бар: Аба ырайы, Аптанын убактысы жана күнү жана бир Максаттуу өзгөрмө: "Кечки тамак" адам кечки тамагын бышырарын же буйрутмасын көрсөтөт. Биз x={Clear, Evening, Weekend} киргизүү классын тапкыбыз келет:

equations

Биз x={Clear, Evening, Weekend} киргизүүнү эске алуу менен "Ашпозчулар" классы жана "Заказдар" классы үчүн шарттуу ыктымалдыкты эсептеп чыгышыбыз керек. Болжолдонгон класс шарттуу ыктымалдуулугу жогору класс болуп саналат.

Биз "Ашпозчулар" классынын шарттуу ыктымалдыгын эсептөө менен баштайбыз:

equations

Эми биз ар бир шарттуу ыктымалдыкты өз алдынча эсептейбиз:

Аба ырайынын ыктымалдыгы = "Ашпозчулар" классы болсо, бул "Ашпозчулар" классы бар саптардын жалпы санына караганда "Ачык" жана "Ашпозчулар" классынын сызыктарынын саны.

equations

Ошол эле башка шарттуу ыктымалдыктарга да тиешелүү:

equations

Эми P (ашпозчулар) ыктымалдыгы үчүн, бул саптардын жалпы санынан "Ашпозчулар" классындагы саптардын саны:

equations

Эми бул ыктымалдыктардын көбөйтүндүсүн эсептейбиз:

equations

Бул "Ашпозчулар" классы үчүн болчу, эми биз "Буйруктар" классы үчүн да ушундай кылышыбыз керек:

equations

Биз жеке ыктымалдыктарды эсептейбиз:

equations

Акыры, биз ыктымалдыктардын продуктусун эсептейбиз:

equations

Акыр-аягы, биз "Ашпозчулар" классы болгон ыктымалдыгы жогору классты алабыз:

equations

equations

equations

equations

equations

equations

Бул алгоритмдин артыкчылыктары жана чектөөлөрү

Артыкчылыктары:

  • Бул абдан тез классификатор.

  • Аны ишке ашыруу оңой.

  • Эч кандай машыгуу фазасы жок, бирок бул жөн гана тыянак.

  • Корутунду чыгаруу үчүн көп маалыматтарды талап кылбайт.

Чектөөлөр:

  • Naive Bayes киргизүү өзгөрмөлөр көз карандысыз деп болжолдойт, бул дайыма эле туура эмес.

  • Naive Bayes нөл жыштык көйгөйүнөн жабыркайт: ал киргизилген өзгөрмөгө нөл ыктымалдыкты дайындаганда. Бул бардык шарттуу ыктымалдык P(C|x) нөлгө барабар кылат. Мунун алдын алуунун бир ыкмасы - бардык өзгөрмөлөргө минималдуу 1 жыштыгын (0 ордуна) колдонуу.

Көнүгүү

Бул жерде биз мисалда көргөн ошол эле маалымат топтомунун маалымат фрейми.

Сиздин милдетиңиз Python аркылуу Naive Bayesти өзүңүз ишке ашыруу:

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

Чечим


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

Карьера кызматтары

Contact Section background image

байланышта бололу

Code Labs Academy © 2024 Бардык укуктар корголгон.