Математическое объяснение метода наивного Байеса
Начнем с введения теоремы Байеса. Математически это можно записать так:
P(A|B)=P(B|A)P(A)P(B)
Термин P(A|B) представляет собой условную вероятность, то есть вероятность того, что событие A произойдет, если B истинно. Доказательство прямолинейно, если отметить, что P(A|B)P(B) и P(B|A)P(A) представляют одну и ту же совместную вероятность наблюдения событий A и B, т. е. P(AB) . Важность теоремы Байеса заключается в том, что она позволяет вычислить вероятность того, что часть данных принадлежит данному классу, учитывая наши предварительные знания.
Наивные байесовские методы представляют собой набор алгоритмов классификации, основанных на теореме Байеса с дополнительным «наивным» предположением о том, что переменные X=(x1,x2,x3,…) независимы при заданном классе y, т. е. P(x_i|y ,x1,x2,…)=P(x_i|y). Важность наивных байесовских методов заключается в том, что они выходят за пределы ограничения одной переменной, поэтому их можно применять к задачам классификации с несколькими классами. Математически метод наивного Байеса можно выразить так:
P(y|X)∝P(y)P(x1|y)P(x2|y)P(x3|y) …
Приведенное выше уравнение можно использовать для получения наиболее возможной классификации y заданных значений набора условий X = (x1, x2, x3,…)
Пример игрушки для демонстрации метода наивного Байеса
Чтобы лучше понять и реализовать описанный выше метод наивного Байеса, мы рассмотрим задачу принятия решения о том, стоит ли играть в гольф при различных погодных условиях. Цель y состоит в том, играть в гольф или нет, а погодные условия X состоят из 3 факторов: температуры, ветра и прогноза погоды. Более подробно мы обозначаем температуру как состояние x1, которое классифицируется как горячее, умеренное и прохладное. Мы обозначаем ветреную погоду как x2, которая классифицируется как истинная или ложная, и обозначаем прогноз как x3, который классифицируется как солнечный, облачный и дождливый. Мы собираем выборочные точки данных и используем их в качестве обучающего набора данных для прогнозирования значения (или классификации) y для различных погодных условий X, как указано в следующей таблице.
Учитывая таблицу, мы хотим узнать вероятность игры, если погода пасмурная, жаркая и ветреная. Мы можем применить метод Наивного Байеса для нашей цели. Сначала мы преобразуем наш вопрос в следующее уравнение:
Чтобы оценить вероятность игры при такой погоде, нам нужно вычислить априорную вероятность P(y=”yes”) и три условные вероятности. Априорную вероятность P(y="да") легко вычислить, она равна просто 7/12, потому что в 4-й строке приведенной выше таблицы 7 раз "да" и 5 раз "нет". Для расчета условных вероятностей температуры, ветра и прогноза погоды при заданном значении play=”yes” нам необходимо рассчитать соответствующие таблицы частот. Возьмем, к примеру, температуру. Из 1-й и 4-й строк приведенной выше таблицы мы можем вычислить следующую таблицу частот:
Из приведенной выше таблицы частот мы можем вычислить P(x1="горячо"|y="да")=2/(2+4+1)=2/7.
Мы также можем вычислить P(x1=”горячий”|y=”нет”)=1/(1+1+3)=1/5.
Точно так же мы вычисляем таблицу частот для условной вероятности P (x2 = «истина» | y = «да») следующим образом:
Таким образом, P(x2="правда"|y="да")=2/(2+5)=2/7. Мы также можем вычислить, что P(x2="истина"|y="нет")=3/(3+2)=3/5.
Наконец, мы вычисляем таблицу частот для условной вероятности P (x3 = «облако» | y = «да») следующим образом:
Так что P(x3="облако"|y="да")=2/(4+2+1)=2/7. Мы также можем вычислить P(x3="облако"|y="нет")=1/(1+1+3)=1/5
Наконец, мы используем метод Наивного Байса для вычисления вероятности игры, если погода облачная, жаркая и ветреная, следующим образом:
Нам нужно сравнить P(y=”да”|x1=”горячо”, x2=”правда”, x3=”облако”) с P(y=”нет”|x1=”горячо”, x2=”правда” ,x3="cloud"), чтобы решить, стоит ли нам играть, учитывая погодные условия: жарко, ветрено и облачно. Таким образом, нам также нужно вычислить следующую вероятность с помощью наивного байсовского метода:
Повторяя описанную выше процедуру и используя те же таблицы частот, мы можем вычислить P(y=”нет”|x1=”горячо”, x2=”истинно”, x3=”облако”) = 512153515=0,01.
Следовательно, прогнозируемое решение для игры в гольф — это решение с большей вероятностью, которое здесь «да».
Создайте наивный байесовский классификатор в Python
Чтобы лучше понять наивные байесовские методы, мы используем Python, чтобы показать, как построить модель и как подобрать (или обучить) модель, а затем как предсказать целевые значения с помощью обученной модели. Python, пожалуй, самый популярный и мощный инструмент для анализа данных и машинного обучения. Python предоставляет все пакеты, функции и классы, которые вы можете вызывать напрямую для построения и запуска собственных статистических моделей. В частности, мы будем использовать scikit-learn из Python, который обычно используется для реализации регрессии, уменьшения размерности, классификации и кластеризации и т. д. Мы шаг за шагом покажем, как загрузить набор данных и обучить модели, а также реализовать наивную байесовскую модель. методы. Сначала мы загружаем набор данных распознавания вин из sklearn. scikit-learn поставляется с несколькими небольшими стандартными наборами данных. Эти наборы данных полезны для быстрой иллюстрации поведения различных алгоритмов, реализованных в scikit-learn. В предыдущих статьях мы использовали набор данных о ценах на жилье в Бостоне и набор данных о диабете. В этой статье мы используем набор данных распознавания вин, который содержит 178 экземпляров вин, принадлежащих к одному из трех целевых классов. Существует 13 числовых прогностических атрибутов, таких как алкоголь, яблочная кислота, общее количество фенолов, оттенок и т. д.
from sklearn import datasets wine = datasets.load_wine()
Что касается обучения каждой модели машинного обучения, нам необходимо разделить исходный набор данных на обучающий набор и тестовый набор. Мы устанавливаем test_size = 0,3, чтобы разделить набор данных на 70% обучения и 30% теста.
X_train, X_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.3)
Чтобы на самом деле реализовать модель наивного байесовского классификатора, мы собираемся импортировать GaussianNB из scikit-learn.
from sklearn.naive_bayes import GaussianNB # Create a Gaussian Classifier model = GaussianNB()
Далее нам нужно обучить модель с использованием обучающих наборов следующим образом.
model.fit(X_train,y_train)
После обучения мы можем предсказать класс вин на основе признаков из набора данных тестирования.
y_pred = model.predict(X_test)
Чтобы оценить, как модель предсказывает, мы импортируем пакет метрик из sklearn для вычисления точности.
from sklearn import metrics print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Выходные данные показывают, что точность составляет 0,98, т. е. предсказания классов 98% тестируемых вин верны.
Заключение
В этой статье мы представили математические основы алгоритма наивного Байеса и использовали игрушечную модель, чтобы с помощью пошаговых ручных вычислений проиллюстрировать, как предсказать, будет ли человек играть в гольф, учитывая погодные условия. Затем мы демонстрируем код Python для обучения и прогнозирования класса вина с использованием алгоритма наивного Байеса. Хотя наивный байесовский алгоритм — самый простой алгоритм, он по-прежнему остается важным инструментом машинного обучения.