Статистический метод обучения — метод наивного Байеса

искусственный интеллект

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

Предположим, у нас есть известный набор данных{(x1,y1),,(xn,yn)}\{(\mathbf{x_1}, y_1),\cdots,(\mathbf{x_n}, y_n)\}xi=(xi(1),,xi(m))T,yiе{c0,c1,,ck}\mathbf{x_i}=(x_{i}^{(1)},\cdots,x_{i}^{(m)})^\mathrm{T}, y_i\in \{c_0,c_1,\cdots ,с_к\}; здесь означает, что у нас есть n наборов наборов данных, каждый из которых имеет m объектов в качестве входных данных, каждый из которых принадлежит одной из k категорий.

Наше требование состоит в том, что если в настоящее время существует функция \mathbf{x}, на основе приведенного выше набора данных нам нужно сделать вывод о категории, к которой принадлежит \mathbf{x}.

Из набора данных мы можем рассчитать априорную вероятность:

P(Y=ck),k=1,2,,KP(Y=c_k), k=1,2,\cdots,K

Есть формула:

P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)P(X=\mathbf{x}|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(n)}=x^{(n)}|Y=c_k)

Чтобы сократить вычисление параметров, Наивный Байес предполагает, что все параметры независимы. Следовательно, приведенное выше выражение может быть эквивалентно:

P(X=xY=ck)=i=1nP(X(j)=x(j)Y=ck)P(X=\mathbf{x}|Y=c_k)=\prod_{i=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_k)

Согласно формуле Байеса:

P(Y=ckX=x)=P(X=xY=ck)P(Y=ck)kP(X=xY=ck)P(Y=ck)P(Y=c_k|X=\mathbf{x})=\frac{P(X=\mathbf{x}|Y=c_k)P(Y=c_k)}{\sum_{k}P(X=\mathbf{x}|Y=c_k)P(Y=c_k)}

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

f(x)=argmaxk P(X=xY=ck)P(Y=ck)=argmaxk P(Y=ck)i=1nP(X(j)=x(j)Y=ck)f(\mathbf{x})=\mathop{argmax}_k \ P(X=\mathbf{x}|Y=c_k)P(Y=c_k)\\= \mathop{argmax}_k\ P(Y=c_k)\prod_{i=1}^{n}P(X^{(j)}=x^{(j)}|Y=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

Предположим, что данные функцииx={1,F}\mathbf{x}=\{1,F\}, решить классификацию.

P(Y=1)=25P(Y=1)=\frac{2}{5}

P(Y=1)=35P(Y=-1)=\frac{3}{5}

P(X(1)=1Y=1)=12,P(X(2)=FY=1)=12P(X^{(1)}=1|Y=1)=\frac{1}{2}, P(X^{(2)}=F|Y=1)=\frac{1}{2}

P(X(1)=1Y=1)=1,P(X(2)=FY=1)=1P(X^{(1)}=1|Y=-1)=1, P(X^{(2)}=F|Y=-1)=1

k=1, результат25×12×12=110k=1, результат \frac{2}{5} \times\frac{1}{2}\times\frac{1}{2}=\frac{1}{10}

k=2, результат35×1×1=35k=2, результат \frac{3}{5}\times1\times1=\frac{3}{5}

Таким образом, окончательный результат -1

сглаживание по Лапласу

Этот метод позволяет избежать случая 0 в знаменателе, в числителе +λ\lambda, в знаменателе +SjλS_j\lambda

Приложения

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

Мы используем пример с радужной оболочкой и используем кодовую базу 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