1.9. Наивный Байес#
Методы наивного Байеса — это набор алгоритмов обучения с учителем, основанных на применении теоремы Байеса с «наивным» предположением об условной независимости между каждой парой признаков при заданном значении переменной класса. Теорема Байеса устанавливает следующее соотношение, учитывая переменную класса \(y\) и зависимый вектор признаков \(x_1\) через \(x_n\), :
Используя наивное предположение об условной независимости, что
для всех \(i\), это соотношение упрощается до
Поскольку \(P(x_1, \dots, x_n)\) постоянна при заданных входных данных, мы можем использовать следующее правило классификации:
и мы можем использовать оценку по максимуму апостериорной вероятности (MAP) для оценки \(P(y)\) и \(P(x_i \mid y)\); первое является относительной частотой класса \(y\) в обучающем наборе.
Различные наивные байесовские классификаторы отличаются в основном предположениями, которые они делают относительно распределения \(P(x_i \mid y)\).
Несмотря на их, казалось бы, излишне упрощенные предположения, наивные байесовские классификаторы хорошо работают во многих реальных ситуациях, например, в классификации документов и фильтрации спама. Они требуют небольшого количества обучающих данных для оценки необходимых параметров. (О теоретических причинах, почему наивный байесовский классификатор работает хорошо, и о типах данных, на которых он это делает, см. ссылки ниже.)
Наивные байесовские классификаторы могут быть чрезвычайно быстрыми по сравнению с более сложными методами. Разделение распределений признаков по классам означает, что каждое распределение можно независимо оценивать как одномерное распределение. Это, в свою очередь, помогает смягчить проблемы, вызванные проклятием размерности.
С другой стороны, хотя наивный Байес известен как хороший классификатор, он считается плохим оценщиком, поэтому вероятностные выходы из
predict_proba не следует воспринимать слишком серьезно.
Ссылки#
H. Zhang (2004). Оптимальность наивного байесовского классификатора. Proc. FLAIRS.
1.9.1. Наивный байесовский классификатор с гауссовским распределением#
GaussianNB реализует алгоритм Гауссовского наивного байесовского классификатора. Предполагается, что правдоподобие признаков имеет гауссовское распределение:
Параметры \(\sigma_y\) и \(\mu_y\) оцениваются с использованием метода максимального правдоподобия.
>>> 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)
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (X_test.shape[0], (y_test != y_pred).sum()))
Number of mislabeled points out of a total 75 points : 4
1.9.2. Мультиномиальный наивный байесовский классификатор#
MultinomialNB реализует наивный байесовский алгоритм для мультиномиально распределенных данных и является одним из двух классических вариантов наивного байесовского классификатора, используемых в классификации текстов (где данные обычно представлены в виде векторов подсчета слов, хотя векторы tf-idf также хорошо работают на практике). Распределение параметризуется векторами
\(\theta_y = (\theta_{y1},\ldots,\theta_{yn})\)
для каждого класса \(y\), где \(n\) — это количество признаков (в классификации текстов — размер словаря) и \(\theta_{yi}\) является вероятностью \(P(x_i \mid y)\)
признака \(i\) появляющийся в образце, принадлежащем классу \(y\).
Параметры \(\theta_y\) оцениваются с помощью сглаженной версии максимального правдоподобия, т.е. подсчета относительных частот:
где \(N_{yi} = \sum_{x \in T} x_i\) это количество раз, когда признак \(i\) появляется во всех выборках класса \(y\) в обучающем наборе \(T\), и \(N_{y} = \sum_{i=1}^{n} N_{yi}\) это общее количество всех признаков для класса \(y\).
Сглаживающие априорные значения \(\alpha \ge 0\) учитывать признаки, отсутствующие в обучающих выборках, и предотвращать нулевые вероятности в дальнейших вычислениях. Установка \(\alpha = 1\) называется сглаживанием Лапласа, в то время как \(\alpha < 1\) называется сглаживанием Лидстоуна.
1.9.3. Комплементарный наивный байесовский классификатор#
ComplementNB реализует алгоритм комплементарного наивного байесовского классификатора (CNB). CNB — это адаптация стандартного алгоритма мультиномиального наивного байесовского классификатора (MNB), особенно подходящая для несбалансированных наборов данных. В частности, CNB использует статистику из complement каждого класса для вычисления весов модели.
Создатели CNB эмпирически показывают, что оценки параметров для CNB
более стабильны, чем для MNB. Кроме того, CNB регулярно превосходит MNB (часто
с значительным отрывом) в задачах классификации текстов.
Расчёт весов#
Процедура расчета весов следующая:
где суммирование производится по всем документам \(j\) не в классе \(c\), \(d_{ij}\) является либо количеством, либо значением tf-idf термина \(i\) в документе \(j\), \(\alpha_i\) является гиперпараметром сглаживания, как в MNB, и \(\alpha = \sum_{i} \alpha_i\). Вторая нормализация решает проблему тенденции более длинных документов доминировать в оценках параметров в MNB. Правило классификации:
т.е., документ назначается классу, который является наихудший дополнение совпадение.
Ссылки#
Rennie, J. D., Shih, L., Teevan, J., & Karger, D. R. (2003). Решение проблем неадекватных предположений наивных байесовских классификаторов текста. В ICML (Том 3, стр. 616-623).
1.9.4. Наивный байесовский классификатор Бернулли#
BernoulliNB реализует алгоритмы обучения и классификации наивного Байеса
для данных, распределенных по многомерным распределениям Бернулли;
т.е. может быть несколько признаков, но каждый из них предполагается
бинарным (Бернулли, булевским).
Поэтому этот класс требует, чтобы выборки были представлены как бинарные
векторы признаков; если переданы данные другого типа, BernoulliNB экземпляр может бинаризовать свои входные данные (в зависимости от binarize параметр).
Правило принятия решений для наивного байесовского классификатора Бернулли основано на
которая отличается от правила мультиномиального наивного байесовского классификатора тем, что явно штрафует отсутствие признака \(i\) См., например, теорему 3 из \(y\), где мультиномиальный вариант просто игнорирует невстречающийся признак.
В случае классификации текстов, векторы встречаемости слов (а не векторы
подсчёта слов) могут использоваться для обучения и применения этого классификатора. BernoulliNB
может работать лучше на некоторых наборах данных, особенно с более короткими документами.
Рекомендуется оценить обе модели, если позволяет время.
Ссылки#
C.D. Manning, P. Raghavan и H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press, стр. 234-265.
A. McCallum и K. Nigam (1998). Сравнение моделей событий для классификации текста методом Наивного Байеса. Proc. AAAI/ICML-98 Workshop on Learning for Text Categorization, pp. 41-48.
В. Метсис, И. Андроутсопулос и Г. Палиурас (2006). Фильтрация спама с помощью наивного байесовского классификатора – Какой именно наивный байесовский классификатор? 3-я Конференция по электронной почте и антиспаму (CEAS).
1.9.5. Категориальный наивный Байес#
CategoricalNB реализует категориальный наивный байесовский алгоритм для категориально распределенных данных. Он предполагает, что каждый признак, описываемый индексом \(i\)имеет собственное категориальное распределение.
Для каждого признака \(i\) в обучающем наборе \(X\),
CategoricalNB оценивает категориальное распределение для каждого признака i из X, обусловленного классом y. Набор индексов образцов определяется как
\(J = \{ 1, \dots, m \}\), с \(m\) как количество образцов.
Расчет вероятности#
Вероятность категории \(t\) в признаке \(i\) заданный класс \(c\) оценивается как:
где \(N_{tic} = |\{j \in J \mid x_{ij} = t, y_j = c\}|\) это количество раз, когда категория \(t\) появляется в образцах \(x_{i}\), которые принадлежат классу \(c\), \(N_{c} = |\{ j \in J\mid y_j = c\}|\) это количество выборок с классом c, \(\alpha\) является параметром сглаживания и \(n_i\) — это количество доступных категорий признака \(i\).
CategoricalNB предполагает, что матрица выборки \(X\) кодируется (например, с помощью OrdinalEncoder) такой, что все категории для каждого признака \(i\) представлены числами
\(0, ..., n_i - 1\) где \(n_i\) — это количество доступных категорий признака \(i\).
1.9.6. Подгонка наивной байесовской модели вне ядра#
Модели наивного Байеса могут использоваться для решения задач классификации большого масштаба, когда полный обучающий набор может не поместиться в память. Для обработки этого случая,
MultinomialNB, BernoulliNB, и GaussianNB
предоставляют partial_fit метод, который может использоваться
инкрементально, как с другими классификаторами, как показано в
Классификация текстовых документов вне памятикоторый вызвал бы ошибку, когда
В отличие от fit метод, первый вызов partial_fit необходимо передать список всех ожидаемых меток классов.
Для обзора доступных стратегий в scikit-learn см. также обучение вне ядра документация.
Примечание
The partial_fit Вызов метода наивных байесовских моделей вносит некоторые вычислительные накладные расходы. Рекомендуется использовать размеры блоков данных, которые как можно больше, то есть насколько позволяет доступная оперативная память.