Алгоритмы классификации - наивный Байес
Введение в наивный байесовский алгоритм
Наивные байесовские алгоритмы - это метод классификации, основанный на применении теоремы Байеса с сильным предположением, что все предикторы независимы друг от друга. Проще говоря, предполагается, что наличие функции в классе не зависит от наличия любой другой функции в том же классе. Например, телефон можно считать умным, если у него есть сенсорный экран, доступ в Интернет, хорошая камера и т. Д. Хотя все эти функции зависят друг от друга, они независимо влияют на вероятность того, что телефон является смартфоном.
В байесовской классификации основной интерес состоит в том, чтобы найти апостериорные вероятности, то есть вероятность метки с учетом некоторых наблюдаемых характеристик (|). С помощью теоремы Байеса мы можем выразить это в количественной форме следующим образом:
$$ 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 создает систему рекомендаций, которая может использоваться для фильтрации невидимой информации и прогнозирования погоды, которую пользователь захочет использовать в данном ресурсе или нет.