在前面几章内容中,我们分别介绍了一种回归模型和两种分类模型及模型的改善与泛化。在接下来的这章内容中,我们将介绍下一个新的分类模型——朴素贝叶斯(Naive Bayes, NB)。整个第7章的学习路线如图7-1所示,我们将先以朴素贝叶斯为例来介绍详细介绍贝叶斯算法背后的思想和原理以及如何从零实现,然后再来介绍基于不同条件概率下的贝叶斯算法模型。
7.1 朴素贝叶斯算法#
7.1.1 概念介绍#
什么是朴素贝叶斯呢?从名字也可以看出,朴素贝叶斯算法与贝叶斯公式有着莫大的关联,说得简单点朴素贝叶斯就是由贝叶斯公式加“朴素”这一条件所构成的。在看贝叶斯算法的相关内容时,相信各位读者一定会被突如其来的数学概念搞得头昏脑涨。例如先验概率(Prior Probability)、后验概率(Posteriori Probability)、极大似然估计(Maximum Likelihood Estimation)、极大后验概率估计(Maximum A Posteriori Estimation)等等,所以接下来我们将先简单地介绍一下这几个概念,让读者先对这部分内容有一个感性的认识,然后继续介绍后面的内容。
1. 先验概率
所谓先验概率指的是根据历史经验得出来的概率。例如可以通过西瓜的颜色、敲击的声音来判断其是否成熟。因为已经有了通过颜色和声音来判断的“经验”,不管这个经验是自己学会的还是别人告诉的,它都是你在执行一项任务之前已经知道的信息。又如在某二分类数据集中,其中正样本有4个,负样本有6个,通过这个数据集能够学习到的先验知识便是任取一个样本,其为正样本的可能性为40%,为负样本的可能性为60%。最后再举个例子,假如办公室失窃了,理论上每个人都可能是小偷,但可以根据对每个人的了解分析得出一个可能性,例如张三偷窃的可能性为20%,李四偷窃的可能性为30%,王五偷窃的可能性为50%,而这就被称为先验概率,它是通过历史经验得来的。
2. 后验概率
所谓后验概率指的是通过贝叶斯公式推断得到的结果。例如上述例子中,不可能因为负样本出现的可能性为60%就判定任意取出的样本为负样本,也不能因为王五偷窃的可能性最大就判定每次办公室失窃都是由他所为。先验知识只能帮助我们先取得一个大致的判断,而事实情况需要根据先验概率和条件概率进行计算。
3. 极大后验概率估计
一言以蔽之,极大后验概率指的是在所有后验概率中选择其中最大的一个。例如上述例子中,根据先验概率和条件概率便可以计算出每个样本属于正样本还是负样本的后验概率。最后在判断该样本属于何种类别时,挑选后验概率最大的类别即可。
4. 极大似然估计
所谓极大似然估计(最大似然估计)指的是用来估计使当前已知结果最有可能发生的模型参数值(参见3.4.3节)。例如上述例子中,已知的当前结果为正样本有4个,负样本有6个。那么什么样的模型参数能够使这一结果最可能发生呢?此时只需最大化式(7-1)即可。
$$ \left( \begin{matrix} 10 \\ 4 \\ \end{matrix} \right){{p}^{4}}{{(1-p)}^{6}}\tag{7-1} $$其中,$p$ 为属于正样本的概率。
7.1.2 朴素贝叶斯原理#
由贝叶斯公式可知
$$ P(B|A)=\frac{P(AB)}{P(A)}\tag{7-2} $$假设$B$为最终的分类标签,$A$为一系列的特征属性,那么在使用朴素贝叶斯进行样本分类时,实际计算的是每个样本在当前的特征取值为$A$的情况下,它属于类别$B$的概率,因此,当进一步计算出特征值$A$属于每个类别的概率后,再挑选概率值最大时所对应的类别即可作为该样本的类标。但是,在实际情况中对于$A$和$B$之间的联合概率分布$P(AB)$并不知道,说得直白点就是我们不知道数据集的生成规则,但是可通过先验概率分布$P(B)$乘以条件概率分布$P(A|B)$来得到联合分布,即公式(7-2)可转换为
$$ P(B|A)=\frac{P(B)P(A|B)}{P(A)}\tag{7-3} $$现在假设输入空间$\mathcal{X}\subseteq R^n$,为$n$维向量的集合,输出空间为类标记$\mathcal{Y}=\{{{c}_{1}},{{c}_{2}},...,{{c}_{K}}\}$,输入为特征向量$x\in\mathcal{X}$,输出为类标记$y\in \mathcal{Y}$。同时,$X$ 是定义在输入空间$\mathcal{X}$上的随机向量,$Y$是定义在输出空间$\mathcal{Y}$上的随机变量,也就是说$X$是一个$m\times n$的矩阵,$y$为类标签。$P(X,Y)$是$X$和$Y$的联合概率分布,训练集$T=\{(x_1,y_1),(x_2,y_2),…,(x_m,y_m)\}$由$P(X,Y)$独立同分布产生。
根据上面的分析可知,可以通过学习数据的先验分布,再学习数据的条件概率分布,即可得到联合概率分布$P(X,Y)$。具体地,对于每个类别来讲其先验概率分布为
$$ P(Y={{c}_{k}})=\frac{\#{{c}_{k}}}{m},k=1,2,...,K\tag{7-4} $$其中,$\#{{c}_{k}}$表示该类别一共有多少个样本,$m$表示样本总数。
同时,对于已知类标下的条件概率分布为
$$ P(X=x|Y={{c}_{k}})=P({{X}^{(1)}}={{x}^{(1)}},...,{{X}^{(n)}}={{x}^{(n)}}|Y={{c}_{k}})\tag{7-5} $$其中,${{x}^{(i)}}$表示第$i$个特征的取值。
从式(7-5)可知,在实际情况中我们并不知道对应的条件概率,因此朴素贝叶斯对条件概率分布又做了一个条件独立性假设,即$P(AB|D)=P(A|D)P(B|D)$,而这也是“朴素”一词的由来。故,式(7-5)可改写为
$$ P(X=x|Y={{c}_{k}})=\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})\tag{7-6} $$由此,根据式(7-3)的分析可知,对于已知特征属性在$X=x$的条件下,其属于类别$Y=c_k$的后验概率为
$$ P(Y={{c}_{k}}|X=x)=\frac{P(X=x|Y={{c}_{k}})P(Y={{c}_{k}})}{\sum\limits_{k=1}^{K}{P}(X=x|Y={{c}_{k}})P(Y={{c}_{k}})}\tag{7-7} $$进一步,将式(7-6)代入式(7-7)可得
$$ P(Y={{c}_{k}}|X=x)=\frac{P(Y={{c}_{k}})\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})}{\sum\limits_{k=1}^{K}{P}(Y={{c}_{k}})\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})}\tag{7-8} $$于是,朴素贝叶斯分类器可以表示为
$$ y=\underset{{{c}_{k}}}{\mathop{\arg \max }}\,=\frac{P(Y={{c}_{k}})\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})}{\sum\limits_{k=1}^{K}{P}(Y={{c}_{k}})\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})}\tag{7-9} $$即通过计算出任意样本属于类别$c_k$的概率后,选择其中概率最大者作为其分类的类标,但是,我们发现在式(7-9)中,对于每个样本的后验概率的计算来讲,其都有相同的分母,因此,式(7-9)可进一步简化为
$$ y=\underset{{{c}_{k}}}{\mathop{\arg \max }}\,P(Y={{c}_{k}})\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})\tag{7-10} $$注意:$\arg {{\max }_{{{c}_{k}}}}$的含义是,使$y$取最大值时$c_k$的取值。
虽然朴素贝叶斯算法看似做了一个极其简单的假设,但是在实际运用过程中却有着不错的效果,尤其是在文本分类这一场景下仅需要少量数据集就能获得不错的效果[1]。
7.1.3 计算示例#
通过7.1.2节内容的介绍,朴素贝叶斯算法的整个原理过程就介绍完了。下面再通过一个实际的计算示例来体会一下朴素贝叶斯分类器的计算流程。
如表7-1所示,此数据集为一个信用卡审批数据集,其中$X^{(1)}\in A_1=\{1,0\}$表示有无工作,$X^{(2)}\in A_2=\{1,0\}$表示是否有房,${{X}^{(3)}}\in {{A}_{3}}=\{D,S,T\}$表示学历等级,$Y\in C=\{1,0\}$表示是否审批通过的类标记。试由表7-1中的训练集学习朴素贝叶斯分类器,并确定$x=(0,1,D)$的类标记$Y$。
根据式(7-4),由表7-1易知,各个类别的先验概率为
$$ P(Y=0)=\frac{5}{15}\tag{7-11} $$$$ P(Y=1)=\frac{10}{15}\tag{7-12} $$
条件概率为
$$ \begin{aligned} & P({{X}^{(1)}}=0|Y=0)=\frac{4}{5},P({{X}^{(1)}}=1|Y=0)=\frac{1}{5} \\[1ex] & P({{X}^{(2)}}=0|Y=0)=\frac{4}{5},P({{X}^{(2)}}=1|Y=0)=\frac{1}{5} \\[1ex] & P({{X}^{(3)}}=D|Y=0)=\frac{1}{5},P({{X}^{(3)}}=S|Y=0)=\frac{1}{5} \\[1ex] & P({{X}^{(3)}}=T|Y=0)=\frac{3}{5},P({{X}^{(1)}}=0|Y=1)=\frac{3}{10} \\[1ex] & P({{X}^{(1)}}=1|Y=1)=\frac{7}{10},P({{X}^{(2)}}=0|Y=1)=\frac{4}{10} \\[1ex] & P({{X}^{(2)}}=1|Y=1)=\frac{6}{10},P({{X}^{(3)}}=D|Y=1)=\frac{2}{10} \\[1ex] & P({{X}^{(3)}}=S|Y=1)=\frac{3}{10},P({{X}^{(3)}}=T|Y=1)=\frac{5}{10} \end{aligned}\tag{7-13} $$以上计算过程便是根据训练集训练朴素贝叶斯分类器模型参数的过程。根据这些参数,便可以对给定的$x=(0,1,D)$进行预测。 首先根据式(7-10)分别计算出其属于各个类别的后验概率为
$$ \begin{aligned} & P(Y=0|X=x) \\[1ex] & =P(Y=0)\cdot P({{X}^{(1)}}=0|Y=0)\cdot P({{X}^{(2)}}=1|Y=0)\cdot P({{X}^{(3)}}=D|Y=0) \\[1ex] & =\frac{5}{15}\cdot \frac{4}{5}\cdot \frac{1}{5}\cdot \frac{1}{5}=\frac{4}{375} \\[1ex] \end{aligned}\tag{7-14} $$$$ \begin{aligned} & P(Y=1|X=x) \\[1ex] & =P(Y=1)\cdot P({{X}^{(1)}}=0|Y=1)\cdot P({{X}^{(2)}}=1|Y=1)\cdot P({{X}^{(3)}}=D|Y=1) \\[1ex] & =\frac{10}{15}\cdot \frac{3}{10}\cdot \frac{6}{10}\cdot \frac{2}{10}=\frac{3}{125} \\[1ex] \end{aligned}\tag{7-15} $$于是可以知道,样本$x=(0,1,D)$属于$y=1$的可能性最大。
7.1.4 求解步骤#
根据上面两节的介绍,可以将朴素贝叶斯分类算法的求解步骤总结如下:
输入: 训练数据$T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}$,其中${{x}_{i}}={{(x_{i}^{(1)},x_{i}^{(2)},...,x_{i}^{(n)})}^{T}}$,$x_{i}^{(j)}$是第$i$个样本的第$j$维特征,$x_i^{(j)}\in\{a_{j1},a_{j2},...,a_{jS_j}\}$,$a_{jl}$是第$j$维特征可能取得的第$l$个值。同时,$j=1,2,...,n$,$l=1,2,...,S_j$,${{y}_{i}}\in \{{{c}_{1}},{{c}_{2}},...,{{c}_{K}}\}$。以及实例$x$。
输出: 实例$x$的分类[2]。
1. 计算先验概率与条件概率
根据极大似然估计,用给定的数据集来计算各类别的先验概率和条件概率。
$$ P(Y={{c}_{k}})=\frac{\sum\limits_{i=1}^{m}{I}({{y}_{i}}={{c}_{k}})}{m},k=1,2,...,K\;\tag{7-16} $$$$ P({{X}^{(j)}}={{a}_{jl}}|Y={{c}_{k}})=\frac{\sum\limits_{i=1}^{m}{I}(x_{i}^{(j)}={{a}_{jl}},{{y}_{i}}={{c}_{k}})}{\sum\limits_{i=1}^{m}{I}({{y}_{i}}={{c}_{k}})}\\[2ex] \;\;\;\;\;j=1,2,...,n;\; l=1,2,...,{{S}_{j}};\; k=1,2,...,K \tag{7-17} $$其中$I(·)$为指示函数,当$y_i=c_k$时输出值为1,反之则为0。
2. 计算各特征取值下的后验概率
$$ P(Y={{c}_{k}})\prod\limits_{j=1}^{n}{P}({{X}^{(j)}}={{x}^{(j)}}|Y={{c}_{k}}),k=1,2,...,K\tag{7-18} $$3. 极大化后验概率确定类别
$$ y=\underset{{{c}_{k}}}{\mathop{\arg \max }}\,P(Y={{c}_{k}})\prod\limits_{j=1}^{n}{P}({{X}^{(j)}}={{x}^{(j)}}|Y={{c}_{k}})\tag{7-19} $$至此,对于朴素贝叶斯算法的原理及计算过程就介绍完了,其对应的建模示例代码将在下一节内容中进行介绍。
7.1.5 小结#
在本节中,我们首先介绍了朴素贝叶斯算法中的几个基本概念,然后详细介绍了朴素贝叶斯算法的原理,知道了“朴素”一词的含义及为什么可以通过贝叶斯算法来完成分类任务,最后对朴素贝叶斯算法的具体计算流程进行了总结。