朴素贝叶斯法,就是使用贝叶斯公式的学习方法,朴素就是它假设输入变量(向量)的各个分量之间是相互独立的。所以对于分量之间不独立的分布,如果使用它学习和预测效果就不会很好。
简化策略它是目标是通过训练数据集学习联合概率分布$P(X, Y)$用来预测。书上说,具体是先学习到先验概率分布以及条件概率分布,分别如下:(但我认为,直接学习$P(X, Y)$就行了,它要多此一举算出这两个再乘起来变成$P(X, Y)$,但其实计算量差不多,可能这样更好理解吧)
$P(Y = c_k), k = 1, 2, 3, ..., K$
$P(X = x|Y = c_k) = P(X^{(1)} = x^{(1)}, ..., X^{(n)} = x^{(n)}|Y = c_k), k = 1, 2, 3, ..., K$
其中输入空间$\mathcal{X} \subseteq R^n$为$n$维向量的集合,输出空间为标记集合$\mathcal{Y} = \{c_1, c_2, ..., c_K\}$。
上面提到了先验概率分布,这里记一下先验概率分布与后验概率分布。先验概率分布与后验概率分布是相对而言的量,通常是要放在一起讨论的。如:$P(Y)$是直接测量的,或是我们经验中所认为的$Y$的概率分布,而当我们测量$X$后,条件概率分布$P(Y|X)$就是发生$X$后$Y$的后验概率分布。
书中说,因为条件概率分布$P(X = x|Y = c_k)$有指数级数量的参数,它的估计实际不可行(实际上样本的数量也不够支撑那么多参数之间的潜在交叉关系)。事实上,假设$x^{(j)}$可取值有$S_j$个,j = 1, 2,… ,n , Y 可取值有K 个,那么参数个数就是$K\prod\limits_{j=1}^{n}S_j$。所以对输入的各个分量的分布进行了假设,假设各个分量之间相互独立(所以它们的联合分布就是直接乘起来),这是一个较强的假设,朴素贝叶斯因此得名。如下:
$P(X= x|Y = c_k) = P(X^{(1)} = x^{(1)}, ..., X^{(n)} = x^{(n)}|Y = c_k)$
$ = \prod\limits_{j=1}^{n}P(X^{(j)} = x^{(j)}|Y = c_k)$
学习方式那么如何学习呢?对于有限离散输入输出来说的表达,可以直接计算样本集的概率分布当做总体分布。
而对于连续的输入输出来说,通常要先假设$P(X, Y)$服从某个多维分布。然后,基于上面的独立性假设,$X$的各个分量是相互独立的,而各个分量和$Y$并不独立,所以可以分别拟合$P(X^{(j)}|Y), j = 1, 2, ..., n$(可以用极大似然估计拟合$P(X^{(j)}, Y)$,再计算$P(X^{(j)}|Y)$),然后把它们全都乘起来得$P(X|Y) = \prod\limits_{j=1}^{n}P(X^{(j)}|Y)$(这里和上面不一样,因为是连续的,所以不能等于某个特定的值$x_j$),再拟合边缘分布$P(Y)$,然后与$P(X|Y)$相乘获得联合分布$P(X, Y)$。 当然也可以直接拟合$P(X, Y)$,因为$X$的分量之间相互独立,所以除了外协方差矩阵中除了对角线以及包含$Y$的协方差外,其它协方差$Cov(X^{(j)}, X^{(i)})$都为0,所以要优化的参数也少了很多,形如:
$\begin{bmatrix} Cov(X^{(0)}, X^{(0)}) & 0 & . & . & . & Cov(X^{(0)}, Y) \\ 0 &Cov(X^{(1)}, X^{(1)}) & . & .& . & Cov(X^{(1)}, Y) \\ . & & . & & & . \\ .& & & . && . \\ .& & && . & . \\Cov(Y, X^{(0)}) & Cov(Y, X^{(1)}) & . & . & . &Cov(Y, Y)&\end{bmatrix}$
分类的时候,通过贝叶斯公式计算后验概率分布,取后验概率最大的$Y$作为预测结果:
$y = f(x) = \mathop{\arg\max}\limits_{c_k} P(Y = c_k|X = x) $
$= \mathop{\arg\max}\limits_{c_k} \frac{P(Y = c_k, X = x)}{\sum\limits_{k}P(X = x|Y = c_k)P(Y = c_k)}$
因为分母对每个$Y$都是一样的,所以可以简化为:
$= \mathop{\arg\max}\limits_{c_k} P(Y = c_k, X = x)$
因此在这里最大后验概率的预测等价于最大联合概率。
后验最大化的含义这里的后验概率最大化等价于机器学习中常用的期望风险最小化。如果用期望风险最小化来推出预测函数,就要定义损失函数,书上选择0-1损失函数(也可以是别的损失函数形式)。具体证明直接贴书上的图: