1.9. Наивные методы Байеса

Наивные методы Байеса — это набор алгоритмов контролируемого обучения, основанных на применении теоремы Байеса с «наивным» предположением об условной независимости между каждой парой характеристик при заданном значении переменной класса. Теорема Байеса утверждает следующее отношение, учитывая переменную классаy и зависимый вектор признаков x1 через xn,:
$$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(x1,…,xn) является константой с учетом входных данных, мы можем использовать следующее правило классификации:
$$P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y)$$
$$\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y),$$
$$P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y)$$
$$\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y),$$

и мы можем использовать оценку Maximum A Posteriori (MAP) для оценки $P(y)$ а также $P(x_i∣y)$; первое — это относительная частота занятий $y$ в обучающем наборе.

Различные наивные байесовские классификаторы различаются в основном предположениями, которые они делают относительно распределения $P(x_i∣y)$.

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

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

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

Рекомендации:

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 (часто со значительным отрывом) в задачах классификации текста. Порядок расчета весов следующий:
$$\\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}|}$$

где суммирования по всем документам $j$ не в классе $c, d_{ij}$ это либо значение count, либо tf-idf термина $i$ в документе $j$, $α_i$ является сглаживающим гиперпараметром, подобным тому, который находится в MNB, и $\alpha = \sum_{i} \alpha_i$. Вторая нормализация направлена ​​на то, чтобы более длинные документы преобладали над оценками параметров в MNB. Правило классификации:
$$\hat{c} = \arg\min_c \sum_{i} t_i w_{ci}$$

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

Рекомендации:

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

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

Решающее правило для наивного Байеса Бернулли основано на
$$P(x_i \mid y) = P(i \mid y) x_i + (1 — P(i \mid y)) (1 — x_i)$$

которое отличается от правила полиномиального NB тем, что в нем явно наказывается отсутствие признака $i$ это показатель класса y, где полиномиальный вариант просто игнорирует отсутствующую функцию.

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

Рекомендации:

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

CategoricalNB реализует категориальный наивный алгоритм Байеса для категориально распределенных данных. Предполагается, что каждая функция, описываемая индексом $i$, имеет свое категориальное распределение.

Для каждой функции i в тренировочном наборе $X$, CategoricalNB оценивает категориальное распределение для каждого признака $i$ из $X$, обусловленного классом $y$. Набор индексов образцов определяется как $J={1,…,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, $α$ параметр сглаживания и $n_i$ количество доступных категорий функций $i$.

CategoricalNB предполагает, что матрица выборки $X$ кодируется (например, с помощью OrdinalEncoder) таким образом, что все категории для каждой функции $i$ представлены числами $0, …, n_i — 1$ где $n_i$ количество доступных категорий функций $i$.

1.9.6. Подгонка нестандартной наивной байесовской модели

Наивные байесовские модели могут использоваться для решения крупномасштабных задач классификации, для которых полный обучающий набор может не поместиться в памяти. Чтобы справиться с этим делом, MultinomialNBBernoulliNB, и GaussianNB выставить partial_fit метод , который может быть использован пошагово , как это сделано с другими классификаторами , как показано в вне ядра классификации текстовых документов . Все наивные байесовские классификаторы поддерживают взвешивание выборки.

В отличие от fit метода, при первом вызове partial_fit необходимо передать список всех ожидаемых меток классов.

Для обзора доступных стратегий в scikit-learn см. Также документацию по внешнему обучению .

Примечание

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