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

Что это за теорема Байеса?

В теории вероятностей и статистике теорема Байеса (альтернативно закон Байеса или правило Байеса), названная в честь преподобного Томаса Байеса, описывает вероятность события, основанную на предварительном знании условий, которые могут быть связаны с событием.

Это может показаться сложным, но на самом деле это легко понять. Я знаю, звучит чушь, просто подождите, пока я объясню. Иногда определения с других сайтов, например, приведенного выше из Википедии, трудно переварить. Когда у вас есть пример для ссылки на тему, это оказывается проще простого. Это моя цель в этой статье. Давайте нырнем!

Представьте, у вас есть некоторые вероятности, и вы хотите найти другую вероятность с существованием этих вероятностей. Вот что такое теорема Байеса.

Продолжим формулу:

P (A | B) → Как часто А случается с существованием Б.?

P (B | A) → Как часто Б случается с существованием А?

P (A) → Как часто встречается A?

P (B) → Как часто встречается B?

Продолжим отличный пример:

P (Огонь | Дым) → Как часто встречается Огонь с существованием Дыма?

P (Дым | Огонь) → Как часто встречается дым с огнем?

P (Огонь) → Как часто случается возгорание?

P (Дым) → Как часто бывает Дым?

Я думаю, мы как бы рассмотрим этот раздел. Как я уже сказал, это действительно легко. Пришло время для наивного байесовского алгоритма!

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

Наивные методы Байеса - это набор алгоритмов обучения с учителем, основанных на применении теоремы Байеса с «наивным» предположением об условной независимости между каждой парой характеристик с учетом значения переменной класса.

Это определение взято из документации Sklearn. Это отличное объяснение, но давайте попробуем в последний раз.

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

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

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

Формула, которую я привел выше, была формулой, которую можно вычислить только с одним признаком, x. Что, если бы у нас было более одной x функций? Давайте проверим новую формулу.

Изменилось немногое.

Используя наивное предположение об условной независимости, что:

Для всех i эта связь упрощается до:

Поскольку P (x1,…, xn) является константой на входе, мы можем использовать следующее правило классификации:

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

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

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

У нас есть информация о функциях "Погода" и "Играть". Таблица показывает нам, игралась ли игра или нет, в зависимости от погоды. Как вы видите выше, сначала нам нужно преобразовать эту таблицу в таблицу частот. Теперь мы можем ясно видеть, когда есть что. Мы можем использовать уравнение теоремы Байеса.

Вопрос будет: P (Да | Солнечно)? Что это значит? Попытайтесь понять на мгновение. (Подсказка: я только что дал вам ответ выше!)

Будут ли игроки играть в солнечную погоду?

Я почти уверен, что вы узнали ответ! Отличная работа!

Теперь пришло время превратить это в уравнение теоремы Байеса.

P (Да | Солнечно) = P (Солнечно | Да) * P (Да) / P (Солнечно)

P (Солнечный | Да) ответ: 3/9 = 0,33. Из таблицы правдоподобия видно, что в солнечную погоду играли 3 игры из 9 игр.

P (Да) ответ: 9/14 = 0,64. 9 - количество воспроизведений, 14 - общее количество воспроизведений вне зависимости от того, играли они или нет.

P (Солнечный): 5/14 = 0,36. 5 - количество воспроизведений при солнечной погоде, 14 - общее количество воспроизведений в любую погоду.

У нас есть все необходимое.

P (Да | Солнечно) = 0,33 * 0,64 / 0,36 = 0,60, что является высокой вероятностью.

Да, мы это сделали.

Обычно это используется для классификации текста и если у вас несколько классов.

Гауссовский наивный байесовский

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

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)

Полиномиальный наивный байесовский

MultinomialNB реализует наивный байесовский алгоритм для полиномиально распределенных данных и является одним из двух классических наивных байесовских вариантов, используемых в классификации текста (где данные обычно представлены как счетчики векторов слов, хотя векторы tf-idf также хорошо работают на практике. ). Распределение параметризуется векторами θy = (θy1,…, θyn) для каждого класса y, где n - количество функций (в классификации текста, размер словаря), а θyi - вероятность P (xi∣y) признак i, появляющийся в выборке, принадлежащей классу y.

import numpy as np
rng = np.random.RandomState(1)
X = rng.randint(5, size=(6, 100))
y = np.array([1, 2, 3, 4, 5, 6])
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X, y)

Бернулли Наивный Байес

BernoulliNB реализует наивный байесовский алгоритм обучения и классификации данных, которые распределяются согласно многомерному распределению Бернулли; то есть может быть несколько функций, но предполагается, что каждая из них является двоичной (Бернулли, логической) переменной. Следовательно, этот класс требует, чтобы образцы были представлены как векторы признаков с двоичными значениями; при передаче любых других данных экземпляр BernoulliNB может преобразовать свой ввод в двоичную форму (в зависимости от параметра binarize).

import numpy as np
rng = np.random.RandomState(1)
X = rng.randint(5, size=(6, 100))
Y = np.array([1, 2, 3, 4, 4, 5])
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB()
clf.fit(X, Y)

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

Это все, что у меня есть для тебя. Я надеюсь помочь вам разобраться в основах наивного Байеса. Все, что вам нужно делать, это практика, практика и практика.

Увидимся в следующих статьях! Удачного обучения!

ССЫЛКИ





Https://www.geeksforgeeks.org/naive-bayes-classifiers/#:~:text=Naive%20Bayes%20classifiers%20are%20a,is%20independent%20of%20each%20other.





«Теорема Байеса
Вы когда-нибудь задумывались, как компьютеры узнают о людях? При поиске в Интернете по запросу "автоматические шнурки для обуви" появляется фраза "Назад к… www.mathsisfun.com"