【分类算法】朴素贝叶斯(Naive Bayes)
0 - 算法
给定如下数据集
$$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$
假设$X$有$J$维特征,且各维特征是独立分布的,$Y$有$K$种取值。则对于输入$x$,朴素贝叶斯算法的输出为
$$y=arg\max_{c_k}P(Y=c_k)\prod_j P(X^{(j)}=x^{(j)}|Y=c_k),j=1,\cdots,J,k=1,\cdots,K,$$
其中先验概率$P(Y=c_k)$和条件概率$P(X^{(j)}=x^{(j)}|Y=c_k)$的极大似然估计在下一节给出。
1 - 推导
朴素贝叶斯的基本公式为
$$P(B|A)=\frac{P(A|B)P(B)}{P(A)},$$
因此,对于输入数据$x$,预测类别$c_k$的概率可以表示为
$$\begin{align}P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{P(X=x)}\end{align}$$
且有,
$$\begin{align}P(X=x)=P(Y=c_k)\sum_{k}P(X=x|Y=c_k)\end{align}$$
根据特征之间独立分布,又有
$$\begin{align}P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(J)}=x^{(J)}|Y=c_k)=\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)\end{align}$$
将式$(3)$代入式$(2)$可得
$$\begin{align}P(X=x)=\sum_{k}P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)\end{align}$$
将式$(3)(4)$代入式$(1)$可得
$$\begin{align}P(Y=c_k|X=x)=\frac{P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)}\end{align}$$
注意到,对于所有类别$Y=c_k$,其分母均是一样的,因此最终算法可以将分母去掉而不影响预测概率的相对大小。朴素贝叶斯算法可写成如下形式
$$y=arg\max_{c_k}P(Y=c_k|X=x)=arg\max_{c_k}P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k),$$
由上式可知,朴素贝叶斯算法只需要对$P(Y=c_k)$和$P(X^{(j)}=x^{(j)}|Y=c_k)$进行参数估计(极大似然估计)即可。
先验概率$P(Y=c_k)$的极大似然估计可以表示为
$$P(Y=c_k)=\frac{\sum_{j=1}^N I(y_i=c_k)}{N},\ k=1,2,\cdots,K,$$
条件概率$P(X^{(j)}=x^{(j)}|Y=c_k)$的极大似然估计,假设第$j$个特征$x^{(j)}$的取值集合为$\{a_{j1},a_{j2},\cdots,a_{jS_j}\}$,则有
$$P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum_{i=1}^N I(y_i=c_k)},\ j=1,2,\cdots,J;l=1,2,\cdots,S_j;k=1,2,\cdots,K.$$
2 - 参考资料
《统计学习方法》,李航