Spec-Zone.ru › scikit-learn

1.9. Наивный Байес

Методы наивного Байеса — это набор алгоритмов обучения с учителем, основанных на применении теоремы Байеса с «наивным» предположением об условной независимости каждой пары признаков при заданном значении целевой переменной класса. Теорема Байеса задаёт следующую зависимость для целевой переменной класса \(y\) и вектора зависимых признаков от \(x_1\) до \(x_n\):

\[P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots, x_n \mid y)} {P(x_1, \dots, x_n)}\]

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

\[P(x_i | y, x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n) = P(x_i | y),\]

для всех \(i\), эту зависимость можно упростить до

\[P(y \mid x_1, \dots, x_n) = \frac{P(y) \prod_{i=1}^{n} P(x_i \mid y)} {P(x_1, \dots, x_n)}\]

Поскольку \(P(x_1, \dots, x_n)\) — константа при заданных входных данных, можно использовать следующее правило классификации:

\[ \begin{align}\begin{aligned}P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y)\\\Downarrow\\\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y),\end{aligned}\end{align} \]

Для оценки \(P(y)\) и \(P(x_i \mid y)\) можно использовать оценивание максимума апостериорной вероятности (MAP); в первом случае это относительная частота класса \(y\) в обучающей выборке.

Различные классификаторы наивного Байеса различаются главным образом предположениями о распределении \(P(x_i \mid y)\).

Несмотря на кажущиеся чрезмерно упрощёнными предположения, классификаторы наивного Байеса хорошо работают во многих реальных задачах, в частности при классификации документов и фильтрации спама. Для оценки необходимых параметров им требуется небольшой объём обучающих данных. (Теоретические объяснения того, почему наивный Байес хорошо работает и на каких типах данных это происходит, см. в приведённых ниже источниках.)

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

С другой стороны, хотя наивный Байес считается неплохим классификатором, он известен как плохой оцениватель, поэтому к вероятностным выходам predict_proba не следует относиться слишком серьёзно.

Ссылки
  • H. Zhang (2004). Оптимальность наивного Байеса. Proc. FLAIRS.

1.9.1. Гауссовский наивный Байес

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

\[P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)\]

Параметры \(\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\) оцениваются с помощью сглаженной версии метода максимального правдоподобия, то есть подсчёта относительных частот:

\[\hat{\theta}_{yi} = \frac{ N_{yi} + \alpha}{N_y + \alpha n}\]

где \(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 использует статистику по дополнению каждого класса для вычисления весов модели. Авторы CNB эмпирически показывают, что оценки параметров для CNB стабильнее, чем для MNB. Кроме того, CNB часто превосходит MNB (нередко со значительным отрывом) в задачах классификации текстов.

Расчёт весов

Весовые коэффициенты рассчитываются следующим образом:

\[ \begin{align}\begin{aligned}\hat{\theta}_{ci} = \frac{\alpha_i + \sum_{j:y_j \neq c} d_{ij}} {\alpha + \sum_{j:y_j \neq c} \sum_{k} d_{kj}}\\w_{ci} = \log \hat{\theta}_{ci}\\w_{ci} = \frac{w_{ci}}{\sum_{j} |w_{cj}|}\end{aligned}\end{align} \]

где суммирование выполняется по всем документам \(j\), не принадлежащим классу \(c\), \(d_{ij}\) — частота или значение tf-idf термина \(i\) в документе \(j\), \(\alpha_i\) — сглаживающий гиперпараметр, подобный используемому в MNB, а \(\alpha = \sum_{i} \alpha_i\). Вторая нормализация позволяет учесть склонность более длинных документов сильнее влиять на оценки параметров в MNB. Правило классификации имеет вид:

\[\hat{c} = \arg\min_c \sum_{i} t_i w_{ci}\]

то есть документ относится к классу, который хуже всего соответствует дополнению.

Ссылки
  • Rennie, J. D., Shih, L., Teevan, J., & Karger, D. R. (2003). Преодоление недостатков предположений классификаторов текстов на основе наивного Байеса. In ICML (Vol. 3, pp. 616-623).

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

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

Правило принятия решений для наивного Байеса Бернулли основано на выражении

\[P(x_i \mid y) = P(x_i = 1 \mid y) x_i + (1 - P(x_i = 1 \mid y)) (1 - x_i)\]

Оно отличается от правила мультиномиального наивного Байеса тем, что явно учитывает отсутствие признака \(i\), являющегося индикатором класса \(y\), тогда как мультиномиальный вариант просто игнорирует отсутствующий признак.

Для классификации текстов при обучении и использовании этого классификатора можно применять векторы наличия слов (вместо векторов частот слов). На некоторых наборах данных, особенно содержащих короткие документы, BernoulliNB может работать лучше. Если позволяет время, рекомендуется оценить обе модели.

Ссылки
  • C.D. Manning, P. Raghavan and H. Schütze (2008). Введение в информационный поиск. Cambridge University Press, pp. 234-265.
  • A. McCallum and K. Nigam (1998). Сравнение моделей событий для классификации текстов на основе наивного Байеса. Proc. AAAI/ICML-98 Workshop on Learning for Text Categorization, pp. 41-48.
  • V. Metsis, I. Androutsopoulos and G. Paliouras (2006). Фильтрация спама с помощью наивного Байеса — какой наивный Байес? 3rd Conf. on Email and Anti-Spam (CEAS).

1.9.5. Категориальный наивный Байес

CategoricalNB реализует алгоритм категориального наивного Байеса для данных с категориальным распределением. Он предполагает, что у каждого признака, обозначенного индексом \(i\), есть собственное категориальное распределение.

Для каждого признака \(i\) в обучающей выборке \(X\) CategoricalNB оценивает категориальное распределение для каждого признака i из X при условии класса y. Множество индексов объектов задаётся как \(J = \{ 1, \dots, m \}\), где \(m\) — число объектов.

Расчёт вероятности

Вероятность категории \(t\) признака \(i\) при условии класса \(c\) оценивается следующим образом:

\[P(x_i = t \mid y = c \: ;\, \alpha) = \frac{ N_{tic} + \alpha}{N_{c} + \alpha n_i},\]

где \(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 стратегий см. также в документации по обучению вне оперативной памяти.

Примечание

Вызов метода partial_fit для моделей наивного Байеса создаёт дополнительные вычислительные затраты. Рекомендуется использовать максимально возможный размер блока данных, ограниченный объёмом доступной оперативной памяти.

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/naive_bayes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API