朴素贝叶斯法学习笔记

朴素贝叶斯法简述

朴素贝叶斯法是一种分类方法,不管是二分类或多分类均适用.它的基本假定是输入数据的各个特征之间具备条件独立性,这就是称之为“朴素”的缘由,而后应用贝叶斯定理,学习出数据的特征和类标签之间的联合几率分布,最后把后验几率最大的结果做为类标签.虽然朴素贝叶斯法应用在分类问题中具备简单且易于实现的特色,可是因为它假设了输入特征之间具备条件独立性,因此有时候可能分类的效果并非很好.算法

朴素贝叶斯算法的通常描述

符号约定:\(\boldsymbol{x}^{(i)}\)是输入的第i个样本向量,\(\boldsymbol{x}^{(i)}_j\)是第i个样本向量的第j个特征值,\(y^{(i)}\)为第i个样本的标签.网络

学习步骤为:函数

首先根据训练数据集的输入向量\(\boldsymbol{x}^{(i)}\)和标签\(y\)学习出两者的联合几率分布\(P(X,Y)\),要求出联合几率分布,就得先求出先验几率分布\(P(Y)\)和条件几率分布\(P(X|Y)\).对于先验几率分布,假设有M个样本,根据极大似然估计,能够得出:学习

\[P(Y=c_k) = \frac{\sum\limits^M_{i=1}I(y^{(i)}=c_k)}{M}, \quad k=1,2,...,K \tag{1} \]

其中\(c_k\)表示标签能够取的值,在这里一共能够取\(K\)个不一样的值.\(I(x, y)\)函数则表示括号内两个数字相等则为1,不然为0.因此式(1)就是表示某个标签出现的次数占全部标签出现的次数的比例.再来看条件几率分布,具体地,假设有N个特征,能够用公式表达以下:测试

\[P(X=x|Y=c_k) = P(X_1=x_1, X_2=x_2, ..., X_N=x_N|Y=c_k), \quad k=1,2,...,K \tag{2} \]

因为朴素贝叶斯法假设特征之间是条件独立的,因此式(2)能够写做:spa

\[\begin{align*} P(X=x|Y=c_k) &= P(X_1=x_1, X_2=x_2, ..., X_N=x_N|Y=c_k) \\ &= P(X_1=x_1|Y=c_k)P(X_2=x_2|Y=c_k)...P(X_N=x_N|Y=c_k) \\ &= \prod\limits^{N}_{j=1}P(X_j=x_j|Y=c_k) \end{align*} \tag{3} \]

有了式(1)和式(3),咱们就能够学习出量和几率分布\(P(X,Y)\)it

有了联合几率分布,接下来就能够进行预测的工做了.朴素贝叶斯法是输入一个样本向量,将后验几率最大的标签值做为输出,后验几率的计算须要用到贝叶斯定理.后验几率记做\(P(Y=c_k|X=x)\)\(x\)为任一输入样本向量,应用贝叶斯定理可得.io

\[P(Y=c_k|X=x) = \frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum\limits_{k=1}^KP(X=x|Y=c_k)P(Y=c_k)},\quad k=1,2,...,K \tag{4} \]

式(4)的分子表示在给定某一标签值的状况下,输入样本等于\(x\)的几率;分母表示输入样本在每一个标签值下等于\(x\)的几率之和,即\(P(X=x)\).两者的比值即为输入\(x\)而获得某一输出标签的后验几率.
考虑到式(4)中的\(P(X=x|Y=c_k)P(Y=c_k)\)已在式(3)中求出,因此把式(3)代入到式(4)中,可得:class

\[P(Y=c_k|X=x) = \frac{\left(\prod\limits^{N}_{j=1}P(X_j=x_j|Y=c_k)\right)P(Y=c_k)}{\sum\limits_{k=1}^K\left(\prod\limits^{N}_{j=1}P(X_j=x_j|Y=c_k)\right)P(Y=c_k)} \\ k=1,2,...,K \tag{5} \]

式(5)就是朴素贝叶斯法的基本公式,即对每个可能的标签值,都计算输入的样本属于这个标签值的几率大小.而咱们的目标是推出一个样本的具体标签,因此在这些可能的标签值当中,选出一个可能性也就是几率最大的那个做为标签.因此朴素贝叶斯分类器的预测结果就能够表示为:学习方法

\[\hat{y} = \operatorname*{arg\;max}\limits_{c_k}\frac{\left(\prod\limits^{N}_{j=1}P(X_j=x_j|Y=c_k)\right)P(Y=c_k)}{\sum\limits_{k=1}^K\left(\prod\limits^{N}_{j=1}P(X_j=x_j|Y=c_k)\right)P(Y=c_k)} \\ k=1,2,...,K \tag{6} \]

注意到式(6)的分母考虑了全部不一样的标签值并求和,不针对特定的\(c_k\),也就是和某一个具体的\(c_k\)无关,它就是一个常数,因此对于求出最大的\(c_k\)值没有任何影响,可省略.最终的素朴贝叶斯分类器公式为:

\[\hat{y} = \operatorname*{arg\;max}\limits_{c_k}\left(\prod\limits^{N}_{j=1}P(X_j=x_j|Y=c_k)\right)P(Y=c_k) \\ k=1,2,...,K \tag{7} \]

后验几率最大化等价于指望风险最小化,具体证实过程见参考文献.

参数估计

先验几率\(P(Y=c_k)\)的求解方法在上文已经给出,用的是极大似然估计法,即式(1).下面来估算参数\(P(X_j=x_j|Y=c_k)\),这个参数的意思是在给定的标签下,样本的的某个特征取某一个值的几率,而对于\(\prod\limits^{n}_{j=1}P(X_j=x_j|Y=c_k)\)则是考虑全部特征,而后把全部这些几率相乘以后获得的结果.对于某一个特征来说,能够取不少个不一样的值,那么在给定了标签以后取每个值的几率分别是多少呢?在有M个训练样本的状况下,能够用式(8)来估算:

\[P(X_j=a_{jl}|Y=c_k) = \frac{\sum\limits^{M}_{i=1}I(\boldsymbol{x}^{(i)}_j=a_{jl},y^{(i)}=c_k)}{\sum\limits^{M}_{i=1}I(y_i=c_k)} \\ j = 1,2,...,N; \quad l = 1,2,...,S_j; \quad k = 1,2,...,K \tag{8} \]

下面来解释下式(8).\(a_{jl}\)表示样本第j个特征所取得第l个值,分母\(\sum\limits^{M}_{i=1}I(y_i=c_k)\)表示在全部训练样本中,标签\(c_k\)一共出现的次数,分子\(\sum\limits^{M}_{i=1}I(\boldsymbol{x}^{(i)}_j=a_{jl},y^{(i)}=c_k)\)则表示在全部标签为\(c_k\)的样本中,第j个特征取值\(a_{jl}\)的总数,两者之商则是在给定标签\(c_k\)的状况下,样本的第j个特征取值\(a_{jl}\)的几率.式(8)是针对某一个特征取某一个数值的几率计算,能够由此算出全部的特征取其对应的某一个数值的几率,而后就能够利用式(7)对任一给定的测试样原本预测它的标签了.这就是朴素贝叶斯分类的主要思想,简单的应用例子参见参考文献\(p_50\),能够获取以上算法的直观感觉.

平滑处理

仔细考察式(8),咱们能够很容易地发现,若是给定一个测试样本,它在第j个特征下的值,历来没有在训练样本中出现过,那么对于该值,用式(8)计算就等于0了,即几率为0,这实际上是不符合现实状况的,假若这么处理,那么朴素贝叶斯分类的泛化能力就会很是差.那么如何解决这个问题?咱们能够在式(8)的分子分母上添加一个常数项,避免出现计算的几率为0的状况,具体如式(9):

\[P_{\lambda}(X_j=a_{jl}|Y=c_k) = \frac{\sum\limits^{M}_{i=1}I(\boldsymbol{x}^{(i)}_j=a_{jl},y^{(i)}=c_k)+\lambda}{\sum\limits^{M}_{i=1}I(y_i=c_k)+S_j\lambda} \\ j = 1,2,...,N; \quad l = 1,2,...,S_j; \quad k = 1,2,...,K \tag{9} \]

即在分子上添加一个正数\(\lambda\),在分母上添加第j个特征可能取值的总个数(仅训练集)与\(\lambda\)的乘积.假若\(\lambda\)为0,就是式(8),若是\(\lambda=1\),则称之为拉普拉斯平滑.那么先验估计式(1)一样也能够进行平滑处理:

\[P_{\lambda}(Y=c_k) = \frac{\sum\limits^M_{i=1}I(y^{(i)}=c_k)+\lambda}{M+K\lambda}, \quad k=1,2,...,K \tag{10} \]

式(9)-式(10)符合几率分布的条件,称为贝叶斯估计.

\[\begin{equation} \left\{ \begin{array}{lr} P_{\lambda}(X_j=a_{jl}|Y=c_k) > 0 \\ \sum\limits^{S_j}_{l=1}P_{\lambda}(X_j=a_{jl}|Y=c_k) = 1 \end{array} \right. \end{equation} \tag{11} \]

\[\begin{equation} \left\{ \begin{array}{lr} P_{\lambda}(Y=c_k) > 0 \\ \sum\limits^{K}_{k=1}P_{\lambda}(Y=c_k) = 1 \end{array} \right. \end{equation} \tag{12} \]

注:朴素贝叶斯分类法认为输入样本的各特征之间是条件独立的,若是不知足这个条件,就不是朴素贝叶斯法,而称之为贝叶斯网络.

参考文献

李航.统计学习方法[M].北京:清华大学出版社,2012 47-53.

相关文章
相关标签/搜索