Никогда не говорите мне о шансах ... без предварительного установления байесовского приора.

Вступление

Наивный алгоритм Байеса - это контролируемый алгоритм классификации, основанный на теореме Байеса с сильной (наивной) независимостью между особенности.

Теорема Байеса

В теории вероятностей и статистике теорема Байеса описывает вероятность события, основанную на предварительном знании условий, которые могут быть связаны с событием - Источник: Википедия

Формулу наивного байесовского классификатора можно записать на основе теоремы Байеса как:

Где,

  • x1,…, xj - это j функций, которые не зависят друг от друга. y - зависимая переменная.
  • P (y | x1,…, xj): Апостериорная вероятность
  • P (x1,…, xj | y): Вероятность характеристик от x1 до xj при условии, что их класс - y.
  • P (y): Априорная вероятность
  • P (x1,…, xj): Предельная вероятность

Как работает наивный байесовский алгоритм?

Давайте разберемся на примере:

Шаг 1. Начнем с импорта набора данных и необходимых зависимостей.

Мы будем использовать набор данных о погоде для обучения. Этот набор данных включает функции [Outlook, Temp, Humidity, Windy] и соответствующую целевую переменную Play. Теперь нам нужно предсказать, будут ли игроки играть или нет, исходя из заданных погодных условий.

#Weather Dataset
Outlook   Temp    Humidity   Windy  Play
Rainy     Hot     High       f      no
Rainy     Hot     High       t      no
Overcast  Hot     High       f      yes
Sunny     Mild    High       f      yes
Sunny     Cool    Normal     f      yes
Sunny     Cool    Normal     t      no
Overcast  Cool    Normal     t      yes
Rainy     Mild    High       f      no
Rainy     Cool    Normal     f      yes
Sunny     Mild    Normal     f      yes
Rainy     Mild    Normal     t      yes
Overcast  Mild    High       t      yes
Overcast  Hot     Normal     f      yes
Sunny     Mild    High       t      no

Шаг 2: Вычислить априорную вероятность классов P (y)

#Frequency table
P(Play=Yes) = 9/14 = 0.64
P(Play=No) = 5/14 = 0.36

Шаг 3. Рассчитайте таблицу правдоподобия для всех функций

#Likelihood Table
#Outlook
Play Overcast Rainy Sunny 
Yes  4/9      2/9   3/9
No   0/5      3/5   2/5
     ___      ___   ___
     4/14     5/14  5/14
#Temp
Play  Cool  Mild  Hot
Yes   3/9   4/9   2/9
No    1/5   2/5   2/5
      ___   ___   ___
      4/14  6/14  4/14
#Humidity 
Play  High  Normal
Yes   3/9   6/9
No    4/5   1/5
      ___   ___  
      7/14  7/14 
#Windy
Play   f     t
Yes    6/9   3/9
No     2/5   3/5
       ___   ___ 
       8/14  6/14  

Шаг 4: Теперь вычислите апостериорную вероятность для каждого класса, используя наивное байесовское уравнение. Класс с максимальной вероятностью - это результат предсказания.

Запрос: Будут ли игроки играть при погодных условиях [Outlook = дождь, температура = умеренная, влажность = нормальная, ветреная = t]?

Расчет апостериорной вероятности:

P(y=Yes|x) = P(Yes|Rainy,Mild,Normal,t)
         P(Rainy,Mild,Normal,t|Yes) * P(Yes)
       = ___________________________________
                P(Rainy,Mild,Normal,t)
         P(Rainy|Yes)*P(Mild|Yes)*P(Normal|Yes)*P(t|Yes)*P(Yes)
       = ______________________________________________________
                    P(Rainy)*P(Mild)*P(Normal)*P(t)

Поскольку условная независимость двух случайных величин, A и B дали C, выполняется на всякий случай
P (A, B | C) = P (A | C) * P (B | C)

         (2/9) * (4/9) * (6/9) * (3/9) * (9/14)
       = _______________________________________
            (5/14) * (6/14) * (7/14) * (6/14)
       
       = 0.43 
P(y=No|x) = P(No|Rainy,Mild,Normal,t)
          P(Rainy,Mild,Normal,t|No) * P(No)
       = ___________________________________
                P(Rainy,Mild,Normal,t)
          P(Rainy|No)*P(Mild|No)*P(Normal|No)*P(t|No)*P(No)
       = ______________________________________________________
                    P(Rainy)*P(Mild)*P(Normal)*P(t)
          (3/5) * (2/5) * (1/5) * (3/5) * (5/14)
       = _______________________________________
            (5/14) * (6/14) * (7/14) * (6/14)
       
       = 0.31

Now, P(Play=Yes|Rainy,Mild,Normal,t) has the highest Posterior probability.

Из приведенного выше расчета мы можем сказать, что существует высокая вероятность того, что игроки сыграют в заданных погодных условиях, т. Е. Данные относятся к классу Да.

Полный исходный код наивного байесовского классификатора:

Вот результат:

Weather Dataset:
Train Accuracy: 92.86
Query 1:- [['Rainy' 'Mild' 'Normal' 't']] ---> ['yes']
Query 2:- [['Overcast' 'Cool' 'Normal' 't']] ---> ['yes']
Query 3:- [['Sunny' 'Hot' 'High' 't']] ---> ['no']

Существует много типов наивной байесовской модели, а именно:

  • Гауссовский наивный байесовский
  • Полиномиальный наивный байесовский
  • Бернулли Наивный Байес
  • Дополнение наивного Байеса
  • Внезапный наивный байесовский

Я также реализовал алгоритм Gaussian Naive Bayes с нуля на python, вы можете получить исходный код здесь.

Заключение:

Наивную байесовскую модель легко построить, и она особенно полезна для очень больших наборов данных. Несмотря на свой наивный дизайн и чрезмерно упрощенные предположения, наивные байесовские классификаторы довольно хорошо работают во многих сложных ситуациях реального мира.

Спасибо за прочтение :)

Я надеюсь, что этот блог поможет вам лучше понять алгоритм Наивного Байеса. Если у вас есть какие-либо вопросы или предложения по этой статье, дайте мне знать. И, это, если это было хорошее чтение.

Ваше здоровье !!

Удачного обучения 😃

использованная литература



Https://medium.com/hackernoon/implementation-of-gaussian-naive-bayes-in-python-from-scratch-c4ea64e3944d