Наш следующий алгоритм машинного обучения - наивный байесовский классификатор. Как и другие мои статьи об алгоритмах машинного обучения, я буду учиться вместе с вами.
Что это за теорема Байеса?
В теории вероятностей и статистике теорема Байеса (альтернативно закон Байеса или правило Байеса), названная в честь преподобного Томаса Байеса, описывает вероятность события, основанную на предварительном знании условий, которые могут быть связаны с событием.
Это может показаться сложным, но на самом деле это легко понять. Я знаю, звучит чушь, просто подождите, пока я объясню. Иногда определения с других сайтов, например, приведенного выше из Википедии, трудно переварить. Когда у вас есть пример для ссылки на тему, это оказывается проще простого. Это моя цель в этой статье. Давайте нырнем!
Представьте, у вас есть некоторые вероятности, и вы хотите найти другую вероятность с существованием этих вероятностей. Вот что такое теорема Байеса.
Продолжим формулу:
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, потому что считаю их пояснительными. Я не мог найти более подходящих слов, чтобы описать их для вас.
Это все, что у меня есть для тебя. Я надеюсь помочь вам разобраться в основах наивного Байеса. Все, что вам нужно делать, это практика, практика и практика.
Увидимся в следующих статьях! Удачного обучения!
ССЫЛКИ
1.9. Наивный Байес - документация scikit-learn 0.23.2
Наивные методы Байеса - это набор алгоритмов контролируемого обучения, основанных на применении теоремы Байеса с «наивным… scikit-learn .org »
«Теорема Байеса
Вы когда-нибудь задумывались, как компьютеры узнают о людях? При поиске в Интернете по запросу "автоматические шнурки для обуви" появляется фраза "Назад к… www.mathsisfun.com"