机器学习:贝叶斯分类器(一)——朴素贝叶斯分类器
一 理论基础
- 对于分类任务来说,贝叶斯决策论在所有相关概率已知的理想情况下,考虑如何基于这些概率和误判损失来选择最优的类别标记。下面推导其基本原理,\(X\)为输入空间上的随机向量,\(Y\)为输出空间上的随机变量,选择0-1损失函数,:$$\mathit{L}(Y,f(X))=\left{\begin{matrix}
1, &Y\neq f(X) \
0,& Y=f(X)
\end{matrix}\right.$$
式中f(X)为分类决策函数。这时,期望风险函数为$$R_{exp}(f)=E[L(Y,f(X))]$$期望是对联合分布取得。由此取条件期望$$R_{exp}(f)=E_X\sum_{k=1}{K}[L(c_k,f(X))]p(c_k|X)$$为使期望风险最小化,只需要对$X=\mathbf{x}$逐个极小化,由此得到:$$f(X)=argmin\sum_{k=1}L(c_k,y)p(c_k|X=\mathbf{x})\=argmin(1-p(y=c_k|X=\mathbf{x}))\~~~~~~~~~~~~=argmaxP(y=c_k|X=\mathbf{x})$$根据期望最小化准则就得到了后验概率最大化准则:$$f(\mathbf{x})=argmaxP(c_k|X=\mathbf{x})$$=argmin\sum_{k=1}^{K}p(y\neq c_k|X=\mathbf{x})\ - 贝叶斯公式。$$p(B|A)=\frac{p(A|B)p(B)}{p(A)}=\frac{p(A|B)p(B)}{\sum_{k=1}^{K}p(A|B_k)p(B_k)}$$
二 朴素贝叶斯分类器
- 根据上面的贝叶斯决策论基本原理,我们知道对于一个新的样本,要估计它的类别,只需要计算出属于各个类别的后验概率\(P(c_1|\mathbf{x}),P(c_2|\mathbf{x}),...,P(c_K|\mathbf{x})\),其中概率最大的类别即为新样本类别。因此我们需求出\(P(c_k|\mathbf{x})\)
- 由贝叶斯公式可得$$P(c_k|\mathbf{x})=\frac{P(\mathbf{x}|c_k)P(c_k)}{P(\mathbf{x})}$$其中\(P(c_k)\)为类别的先验概率,\(P(\mathbf{x}|c_k)\)是样本相对于类别的类别条件概率,\(P(\mathbf{x})\)为用于归一化的证据因子。对于给定样本,\(P(\mathbf{x})\)与类别无关。
- 因此问题转化为了如何基于训练集数据来估计先验概率\(P(c_k)\)与似然\(P(\mathbf{x}|c_k)\)。
1).类别先验概率表达了样本空间中各类样本所占的比例,根据大数定理,当训练集包含足够的独立同分布时,先验概率可以根据各类样本出现的频率进行估计.
2).而对于类别条件概率\(P(\mathbf{x}|c_k)\),由于它涉及关于\(X\)所有属性的联合概率,直接基于有限的训练样本频率估计会遇到严重的困难。在计算上会遭遇组合爆炸问题,在数据上将会遭遇样本稀疏问题,属性越多,问题越严重。
例如假设样本有n个属性,第j个属性的取值有\(S_j\)个,类别取值有K个,那么参数个数为\(K\prod_{j=1}^{n}S_j\)。因此直接用频率来估计显然不可行。 - 基于此,朴素贝叶斯分类器采用了“属性条件独立性假设”即用于分类的属性在类确定的条件下都是相互独立的。\(P(\mathbf{x}|c_k)=P(x^{(1)},x^{(2)},...,x^{(n)}|c_k)=\prod_{j=1}^{n}P(x^{(j)}|c_k)\)
- 因此后验概率如下:$$P(c_k|\mathbf{x})= \frac{P(\mathbf{x}|c_k)P(c_k)}{P(\mathbf{x})}=\frac{P(c_k)\prod_{j=1}{n}P(x|c_k)}{\sum_{k=1}^{K}P(\mathbf{x}|c_k)P(c_k)} =\frac{P(c_k)\prod_{j=1}{n}P(x|c_k)}{\sum_{k=1}{K}P(c_k)\prod_{j=1}P(x^{(j)}|c_k)} $$
- 于是基于后验概率的朴素贝叶斯分类器可表示如下:$$y=f(\mathbf{x})=\underset{c_k}{argmax}\frac{P(c_k)\prod_{j=1}{n}P(x|c_k)}{\sum_{k=1}{K}P(c_k)\prod_{j=1}P(x^{(j)}|c_k)}
\[注意到对于一个确定的样本,上式中分母对所有类别都是相同的,所以$$y=f(\mathbf{x})=\underset{c_k}{argmax}~~{P(c_k)\prod_{j=1}^{n}P(x^{(j)}|c_k)}
\]
三 参数估计与拉普拉斯平滑
-
首先根据训练集计算出类别先验概率与条件概率(\(K\)个类别,\(n\)个特征,每个特征取值个数为\(S_j,j=1,2,...,n\),因此参数个数为$ K\sum_{j=1}^{n}S_j$)
- 类别先验概率(其中m为训练集样本个数):采用贝叶斯估计$$P(c_k)=\frac{\sum_{i=1}^{m}I(y_i=c_k)+\lambda}{m+K\lambda},k=1,2,..,K$$
- 条件概率:采用贝叶斯估计$$P(X{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda }{\sum_{i=1}^{m}I(y_i=c_k)+S_j\lambda }\j=1,2,..,n;l=1,2,...,S_j;k=1,2,...,K
\[
- 根据新的实例计算每个类别下各个特征的条件概率乘积再乘以类别先验概率,注意此时由于多个比较小的数相乘,会造成下溢出。因此可以先对每个概率取对数然后相加。比较最后结果,取最大的概率对应类别为新实例的类别
- 贝叶斯估计中$\lambda$=0时,就是极大似然估计。常取1,此时称为拉普拉斯平滑,取小于1大于0时,为利德斯通平滑。
- 需要注意的是,以上都是假设特征为离散取值的情况,当特征取值为连续值时,假设特征各个类别上满足正态分布!!!当数据不同特征有的是离散值,有的是连续值时,根据需要离散化或者连续化,然后总体选用某个类型朴素贝叶斯分类器。
####四 注意
sklearn中朴素贝叶斯分类器主要分为高斯朴素贝叶斯,伯努利朴素贝叶斯及多项式朴素贝叶斯。具体参考[http://sklearn.apachecn.org/cn/0.19.0/modules/naive_bayes.html#multinomial-naive-bayes]。
- 高斯模型。适用于特征为连续值得情况。
- 伯努利模型。适用于离散特征的情况,需要注意的是伯努利模型中要求样本特征必须为二值化,所以可以先把数据二值化,或者利用设置伯努利模型的binarize参数进行二值化。
- 多项式朴素贝叶斯。适用于离散特征的情况,注意这里特征的取值,为特征出现的次数!!处理文本分类时很容易理解。但是进行其他数据分类时,需要先对数据特征维度进行处理。
```
```\]
如有错误,欢迎批评指正。转载请注明出处。沟通交流liuyingxinwy@163.com