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

Коротко

Definition

Наивный Байес — это вероятностный классификатор, который применяет теорему Байеса и делает «наивное» предположение, что признаки независимы друг от друга при известном классе.

Наивный байесовский классификатор оценивает вероятность каждого класса для объекта и выбирает класс с максимальной апостериорной вероятностью.

Идея:

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

Интуиция

Модель отвечает на вопрос:

Какой класс наиболее вероятен, если мы увидели такие признаки?

Например, если письмо содержит слова free, winner, click, модель может оценить:

  • вероятность класса spam;
  • вероятность класса not spam.

Затем выбирается класс с большей вероятностью.

Слово «наивный» означает, что модель упрощает задачу: она считает, что признаки независимы друг от друга внутри каждого класса.

Это предположение почти никогда не выполняется идеально, но сильно упрощает оценку вероятностей.

Формальное описание

Наивный Байес решает задачи классификации.

СвойствоЗначение
Тип моделиВероятностный классификатор
Тип обученияОбучение с учителем
ЗадачаКлассификация
Тип данныхЧасто Табличные данные или текстовые признаки
Целевая переменная

Основная формула Байеса:

где:

  • — апостериорная вероятность класса после наблюдения признаков;
  • — likelihood, вероятность признаков при данном классе;
  • — априорная вероятность класса;
  • — полная вероятность признаков.

Знаменатель одинаков для всех классов, поэтому для выбора класса его можно не считать явно:

Наивное предположение независимости

Главное упрощение модели:

То есть при известном классе признаки считаются условно независимыми.

Тогда:

На практике обычно используют логарифмы, чтобы избежать численного underflow при перемножении маленьких вероятностей:

Входы и выходы

Вход модели:

где:

  • — число объектов;
  • — число признаков.

Выход:

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

Для текстов входом часто является не исходный текст, а вектор признаков:

  • частоты слов;
  • bag-of-words;
  • TF-IDF;
  • бинарные признаки наличия слов.

Для числовых табличных признаков часто используют Gaussian Naive Bayes.

Как обучается

Обучение наивного Байеса состоит в оценке вероятностей по обучающим данным.

Типовой алгоритм:

  1. Посчитать априорную вероятность каждого класса .
  2. Для каждого класса оценить распределение признаков.
  3. Для нового объекта посчитать score каждого класса.
  4. Выбрать класс с максимальным score.

Априорная вероятность класса:

где:

  • — число объектов класса ;
  • — общее число объектов.

Для Gaussian Naive Bayes для каждого класса и признака оценивают:

  • среднее ;
  • дисперсию .

Затем вероятность признака считается через нормальное распределение:

Функция потерь

У наивного Байеса нет функции потерь в привычном оптимизационном смысле, как у логистической регрессии или нейронных сетей.

Модель не обучается через обратное распространение ошибки и градиентное обновление параметров.

Вместо этого она оценивает вероятности из данных:

  • частоты классов;
  • частоты признаков внутри классов;
  • параметры распределений признаков.

Для предсказания используется правило максимума апостериорной вероятности:

Варианты модели

Gaussian Naive Bayes

Используется для непрерывных числовых признаков.

Предполагает, что каждый признак внутри класса распределён нормально:

Хорошо подходит как простой baseline для числовых табличных данных.

Multinomial Naive Bayes

Используется для счётчиков и частот.

Часто применяется в классификации текстов:

  • bag-of-words;
  • частоты слов;
  • count vectors.

Bernoulli Naive Bayes

Используется для бинарных признаков.

Например, в тексте:

  • слово встречается;
  • слово не встречается.

Complement Naive Bayes

Вариант для несбалансированных текстовых задач. Часто может работать лучше MultinomialNB при дисбалансе классов.

Гиперпараметры

Гиперпараметры зависят от варианта наивного Байеса.

Для Gaussian Naive Bayes:

  • var_smoothing — доля наибольшей дисперсии, добавляемая к дисперсиям для стабильности вычислений.

Это нужно, чтобы избежать деления на слишком маленькую дисперсию.

Для Multinomial и Bernoulli Naive Bayes:

  • alpha — параметр сглаживания;
  • fit_prior — учитывать ли априорные вероятности классов;
  • class_prior — заданные вручную априорные вероятности.

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

Когда использовать

Наивный Байес хорошо использовать, если:

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

Наивный Байес особенно известен как простой и сильный baseline для текстовой классификации.

Когда не использовать

Наивный Байес может быть плохим выбором, если:

  • признаки сильно зависимы друг от друга;
  • важны сложные взаимодействия признаков;
  • нужна высокая точность на сложной задаче;
  • вероятности должны быть хорошо откалиброваны;
  • распределение признаков плохо соответствует выбранному варианту модели;
  • данных достаточно для более гибких моделей.

Для сложных табличных задач часто лучше работают:

Метрики оценки

Наивный Байес оценивают как обычный классификатор.

Основные метрики:

  • accuracy;
  • precision;
  • recall;
  • F1-score;
  • ROC-AUC;
  • confusion matrix.

Подробнее см. Метрики качества классификаторов и ROC-кривая.

Если классы несбалансированы, accuracy может быть обманчивой. В таком случае особенно важно смотреть precision, recall и F1-score.

Типичные ошибки понимания

Думать, что признаки действительно должны быть независимыми

Наивное предположение независимости редко выполняется идеально. Но модель может хорошо работать, даже если признаки зависимы.

Это практическая модель, а не утверждение, что реальные данные устроены независимо.

Путать априорную и апостериорную вероятность

— априорная вероятность класса до наблюдения признаков.

— апостериорная вероятность после наблюдения признаков.

Не использовать сглаживание

Без сглаживания редкий признак может получить нулевую вероятность. Тогда произведение вероятностей для класса станет нулевым.

Использовать GaussianNB для неподходящих признаков

Если признаки являются счётчиками слов, MultinomialNB часто подходит лучше, чем GaussianNB.

Слишком доверять вероятностям

Наивный Байес может хорошо ранжировать классы, но его вероятности не всегда хорошо откалиброваны.

Минимальный пример

Пусть нужно классифицировать письмо как spam или not spam.

Есть признаки:

  • слово free встречается;
  • слово winner встречается;
  • слово meeting встречается.

Модель оценивает:

и

Если первая величина больше второй, модель предсказывает spam.

Даже если слова не являются полностью независимыми, такое приближение может работать хорошо.

Практические замечания

Хороший workflow:

  1. Определить тип признаков.
  2. Выбрать вариант Naive Bayes: Gaussian, Multinomial или Bernoulli.
  3. Разделить данные на train, validation и test.
  4. Проверить баланс классов.
  5. Обучить модель как baseline.
  6. Оценить качество через Метрики качества классификаторов.
  7. Сравнить с логистической регрессией и другими моделями.
  8. Проверить ошибки на редких классах.

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

Связанные понятия