Наивные байесовские классификаторы

Опубликовано: 26 Июля, 2021

В этой статье обсуждается теория, лежащая в основе наивных байесовских классификаторов, и их реализация.

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

Для начала рассмотрим набор данных.

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

Вот табличное представление нашего набора данных.



Перспективы Температура Влажность Ветреный Играть в гольф
0 Дождливый Горячий Высокая Ложь Нет
1 Дождливый Горячий Высокая Правда Нет
2 Пасмурная погода Горячий Высокая Ложь да
3 Солнечно Мягкий Высокая Ложь да
4 Солнечно Прохладный Обычный Ложь да
5 Солнечно Прохладный Обычный Правда Нет
6 Пасмурная погода Прохладный Обычный Правда да
7 Дождливый Мягкий Высокая Ложь Нет
8 Дождливый Прохладный Обычный Ложь да
9 Солнечно Мягкий Обычный Ложь да
10 Дождливый Мягкий Обычный Правда да
11 Пасмурная погода Мягкий Высокая Правда да
12 Пасмурная погода Горячий Обычный Ложь да
13 Солнечно Мягкий Высокая Правда Нет

Набор данных разделен на две части: матрицу признаков и вектор ответа .

  • Матрица признаков содержит все векторы (строки) набора данных, в которых каждый вектор состоит из значений зависимых признаков . В приведенном выше наборе данных это «Outlook», «Температура», «Влажность» и «Ветреный ветер».
  • Вектор ответа содержит значение переменной класса (прогноз или результат) для каждой строки матрицы признаков. В приведенном выше наборе данных имя переменной класса - «Играть в гольф».

Предположение:

Фундаментальное предположение Наивного Байеса состоит в том, что каждая функция создает:

  • независимый
  • равный

вклад в результат.

Применительно к нашему набору данных эту концепцию можно понять как:

  • Мы предполагаем, что никакая пара функций не является зависимой. Например, «высокая» температура не имеет ничего общего с влажностью, или «дождливый» прогноз не влияет на ветер. Следовательно, предполагается, что функции независимы .
  • Во-вторых, каждой функции присваивается одинаковый вес (или важность). Например, зная только температуру и влажность, нельзя точно предсказать результат. Ни один из атрибутов не имеет значения и предполагается, что они в равной степени влияют на результат.

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

Теперь, прежде чем перейти к формуле наивного Байеса, важно знать о теореме Байеса.

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



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

где A и B - события и P (B)? 0.

  • По сути, мы пытаемся найти вероятность события A, если событие B истинно. Событие B также называется свидетельством .
  • P (A) - это априорная вероятность A (априорная вероятность, т. Е. Вероятность события до того, как будет видно свидетельство). Свидетельство - это значение атрибута неизвестного экземпляра (здесь это событие B).
  • P (A | B) - это апостериорная вероятность B, то есть вероятность события после того, как будет обнаружено свидетельство.

Теперь, что касается нашего набора данных, мы можем применить теорему Байеса следующим образом:

где y - переменная класса, а X - зависимый вектор признаков (размера n ), где:

Чтобы прояснить, примером вектора признаков и соответствующей переменной класса может быть: (см. 1-ю строку набора данных)

 X = (Rainy, Hot, High, False) y = No

Таким образом, P (y | X) здесь означает вероятность «Не играть в гольф», учитывая, что погодные условия следующие: «Дождь», «Высокая температура», «Высокая влажность» и «Без ветра».

Наивное предположение

Теперь пришло время сделать наивное предположение теоремы Байеса о независимости между функциями. Итак, теперь мы разделяем доказательства на независимые части.

Теперь, если любые два события A и B независимы, то

 P(A,B) = P(A)P(B)

Отсюда и приходим к результату:

что может быть выражено как:

Теперь, когда знаменатель остается постоянным для данного ввода, мы можем удалить этот член:

Теперь нам нужно создать модель классификатора. Для этого мы находим вероятность данного набора входов для всех возможных значений переменной класса y и выбираем выход с максимальной вероятностью. Математически это можно выразить как:

Итак, наконец, нам остается вычислить P (y) и P (x i | y).

Обратите внимание, что P (y) также называется вероятностью класса, а P (x i | y) называется условной вероятностью .

Различные наивные байесовские классификаторы различаются в основном предположениями, которые они делают относительно распределения P (x i | y).

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

Нам нужно найти P (x i | y j ) для каждого x i в X и y j в y. Все эти расчеты продемонстрированы в таблицах ниже:

Итак, на рисунке выше мы вычислили P (x i | y j ) для каждого x i в X и y j в y вручную в таблицах 1-4. Например, вероятность игры в гольф при низкой температуре, то есть P (темп. = Прохладно | играть в гольф = Да) = 3/9.

Кроме того, нам нужно найти вероятности классов (P (y)), которые были вычислены в таблице 5. Например, P (играть в гольф = Да) = 9/14.

Итак, мы закончили наши предварительные вычисления, и классификатор готов!

Давайте протестируем его на новом наборе функций (назовем его сегодня):

 today = (Sunny, Hot, Normal, False)

Итак, вероятность игры в гольф определяется по формуле:

а вероятность не играть в гольф определяется по формуле:

Поскольку P (сегодня) является общим для обеих вероятностей, мы можем игнорировать P (сегодня) и найти пропорциональные вероятности как:

а также

Теперь, поскольку

Эти числа можно преобразовать в вероятность, сделав сумму равной 1 (нормализация):

а также

С

Итак, предсказание, что в гольф будут играть - «Да».

Метод, который мы обсуждали выше, применим для дискретных данных. В случае непрерывных данных нам необходимо сделать некоторые предположения относительно распределения значений каждой функции. Различные наивные байесовские классификаторы различаются в основном предположениями, которые они делают относительно распределения P (x i | y).

Теперь мы обсудим здесь один из таких классификаторов.

Гауссовский наивный байесовский классификатор

В гауссовском наивном байесовском методе предполагается, что непрерывные значения, связанные с каждой функцией, распределены согласно гауссовскому распределению . Распределение Гаусса также называется нормальным распределением. При построении он дает колоколообразную кривую, которая симметрична среднему значению характеристик, как показано ниже:

Предполагается, что вероятность появления признаков является гауссовой, следовательно, условная вероятность определяется как:

Теперь мы рассмотрим реализацию гауссовского наивного байесовского классификатора с помощью scikit-learn.




# load the iris dataset
from sklearn.datasets import load_iris
iris = load_iris()
# store the feature matrix (X) and response vector (y)
X = iris.data
y = iris.target
# splitting X and y into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4 , random_state = 1 )
# training the model on training set
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(X_train, y_train)
# making predictions on the testing set
y_pred = gnb.predict(X_test)
# comparing actual response values (y_test) with predicted response values (y_pred)
from sklearn import metrics
print ( "Gaussian Naive Bayes model accuracy(in %):" , metrics.accuracy_score(y_test, y_pred) * 100 )

Выход:

 Точность гауссовской наивной байесовской модели (в%): 95,0 

Другие популярные наивные байесовские классификаторы:

  • Полиномиальный наивный байесовский анализ : векторы признаков представляют частоты, с которыми определенные события были сгенерированы полиномиальным распределением . Это модель событий, обычно используемая для классификации документов.
  • Бернулли Наивный Байес : в многомерной модели событий Бернулли функции являются независимыми логическими значениями (двоичными переменными), описывающими входные данные. Как и полиномиальная модель, эта модель популярна для задач классификации документов, где используются особенности вхождения бинарного термина (то есть слово встречается в документе или нет), а не частота терминов (то есть частота слова в документе).

Когда мы дойдем до конца этой статьи, вот несколько важных моментов, над которыми стоит задуматься:

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

Рекомендации:

  • https://en.wikipedia.org/wiki/Naive_Bayes_classifier
  • http://gerardnico.com/wiki/data_mining/naive_bayes
  • http://scikit-learn.org/stable/modules/naive_bayes.html

Этот блог предоставлен Нихилом Кумаром. Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.