Наивный байесовский алгоритм
Предположим, у нас есть известный набор данных,в; здесь означает, что у нас есть n наборов наборов данных, каждый из которых имеет m объектов в качестве входных данных, каждый из которых принадлежит одной из k категорий.
Наше требование состоит в том, что если в настоящее время существует функция \mathbf{x}, на основе приведенного выше набора данных нам нужно сделать вывод о категории, к которой принадлежит \mathbf{x}.
Из набора данных мы можем рассчитать априорную вероятность:
Есть формула:
Чтобы сократить вычисление параметров, Наивный Байес предполагает, что все параметры независимы. Следовательно, приведенное выше выражение может быть эквивалентно:
Согласно формуле Байеса:
Знаменатель равен для всех c_k, поэтому окончательный результат обучения, который мы хотим вычислить, равен
Обе приведенные выше формулы могут быть рассчитаны по набору данных. Например:
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
X^{(1)} | 1 | 1 | 2 | 1 | 3 |
X^{(2)} | M | F | F | F | M |
Y | -1 | 1 | -1 | -1 | 1 |
Предположим, что данные функции, решить классификацию.
Таким образом, окончательный результат -1
сглаживание по Лапласу
Этот метод позволяет избежать случая 0 в знаменателе, в числителе +, в знаменателе +
Приложения
Наивный Байес можно быстро использовать для классификации больших объемов интернет-текста.
Мы используем пример с радужной оболочкой и используем кодовую базу sklearn для расчета:
from sklearn.naive_bayes import GaussianNB
from sklearn import datasets
iris = datasets.load_iris()
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d" %
(iris.data.shape[0], (iris.target != y_pred).sum()))
Конечный результат вывода:
Number of mislabeled points out of a total 150 points : 6