Алгоритмы классификации - наивный Байес

Введение в наивный байесовский алгоритм

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

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

$$ P (L | features) = \ frac {P (L) P (features | L)} {()} $$

Здесь (|) - апостериорная вероятность класса.

() - априорная вероятность класса.

(|) - это вероятность, которая представляет собой вероятность предиктора данного класса.

() - априорная вероятность предсказателя.

Построение модели с использованием наивного байеса в Python

Библиотека Python, Scikit learn - самая полезная библиотека, которая помогает нам построить наивную байесовскую модель на Python. У нас есть следующие три типа модели Наивного Байеса в библиотеке Scikit learn Python:

Гауссовский наивный байесовский

Это простейший наивный байесовский классификатор, предполагающий, что данные каждой метки взяты из простого распределения Гаусса.

Полиномиальный наивный байесовский

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

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

Другой важной моделью является Bernoulli Naïve Bayes, в которой предполагается, что функции являются двоичными (0 и 1). Классификация текста с помощью модели «мешка слов» может быть применением наивного Байеса Бернулли.

пример

В зависимости от нашего набора данных мы можем выбрать любую из наивных байесовских моделей, описанных выше. Здесь мы реализуем гауссовскую наивную байесовскую модель в Python -

Мы начнем с необходимого импорта следующим образом -

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

Теперь, используя функцию make_blobs () Scikit learn, мы можем генерировать капли точек с распределением по Гауссу следующим образом:

from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');

Затем для использования модели GaussianNB нам нужно импортировать и создать ее объект следующим образом:

from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);

Теперь нам нужно сделать прогноз. Это можно сделать после создания некоторых новых данных следующим образом:

rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)

Затем мы рисуем новые данные, чтобы найти его границы -

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);

Теперь, с помощью следующей строки кодов, мы можем найти апостериорные вероятности первой и второй меток -

yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)

Вывод

array([[0.998, 0.002],
   [1.   , 0.   ],
   [0.987, 0.013],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [1.   , 0.   ],
   [0.   , 1.   ],
   [0.986, 0.014]]
)

За и против

Плюсы

Ниже приведены некоторые плюсы использования наивных байесовских классификаторов.

  • Наивная байесовская классификация проста в применении и быстро.

  • Он будет сходиться быстрее, чем дискриминационные модели, такие как логистическая регрессия.

  • Требуется меньше данных для обучения.

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

  • Он может делать вероятностные прогнозы и обрабатывать как непрерывные, так и дискретные данные.

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

Минусы

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

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

  • Еще одна проблема с наивной байесовской классификацией - это ее `` нулевая частота '', что означает, что если категориальная переменная имеет категорию, но не наблюдается в наборе обучающих данных, тогда наивная байесовская модель присвоит ей нулевую вероятность, и она не сможет сделать предсказание.

Применение наивной байесовской классификации

Ниже приведены некоторые общие применения наивной байесовской классификации:

Real-time prediction - Благодаря простоте реализации и быстроте вычислений его можно использовать для прогнозирования в реальном времени.

Multi-class prediction - Наивный алгоритм классификации Байеса может использоваться для прогнозирования апостериорной вероятности нескольких классов целевой переменной.

Text classification- Благодаря функции предсказания нескольких классов, алгоритмы наивной байесовской классификации хорошо подходят для классификации текста. Вот почему он также используется для решения таких задач, как фильтрация спама и анализ настроений.

Recommendation system - Наряду с такими алгоритмами, как совместная фильтрация, Naïve Bayes создает систему рекомендаций, которая может использоваться для фильтрации невидимой информации и прогнозирования погоды, которую пользователь захочет использовать в данном ресурсе или нет.