贝叶斯分类器(3)朴素贝叶斯分类器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贝叶斯分类器(3)朴素贝叶斯分类器相关的知识,希望对你有一定的参考价值。

参考技术A

根据 贝叶斯分类器(1)贝叶斯决策论概述、贝叶斯和频率、概率和似然 ,我们对贝叶斯分类器所要解决的问题、问题的求解方法做了概述,将贝叶斯分类问题转化成了求解 的问题,在上一篇 贝叶斯分类器(2)极大似然估计、MLE与MAP
中,我们分析了第一个求解方法:极大似然估计。在本篇中,我们来介绍一个更加简单的 求解方法,并在此基础上讲讲常用的一个贝叶斯分类器的实现:朴素贝叶斯分类器(Naive Bayes classifier)。

我们的目标是通过对样本的学习来得到一个分类器,以此来对未知数据进行分类,即求后验概率 。在 贝叶斯分类器(1)贝叶斯决策论概述、贝叶斯和频率、概率和似然 中,我们描述了贝叶斯分类器是以生成式模型的思路来处理这个问题的,如下面的公式所示,贝叶斯分类器通过求得联合概率 来计算 ,并将联合概率 转化成了计算类先验概率 、类条件概率 、证据因子 。

其中的难点是类条件概率 的计算,因为样本 本身就是其所有属性的联合概率,各种属性随意组合,变幻莫测,要计算其中某一种组合出现的概率真的是太难了,而朴素贝叶斯的出现就是为了解决这个问题的。

要想计算联合概率 ,我们肯定是希望事件 与事件 是相互独立的,可以简单粗暴的 ,多想对着流星许下心愿:让世界上复杂的联合概率都变成简单的连乘!

朴素贝叶斯实现了我们的梦想!朴素贝叶斯中的朴素就是对多属性的联合分布做了一个大胆的假设,即 的 个维度之间相互独立:

朴素贝叶斯通过这一假设大大简化了 的计算,当然,使用这个假设是有代价的,一般情况下,大量样本的特征之间独立这个条件是弱成立的,毕竟哲学上说联系是普遍的,所以我们使用朴素贝叶斯会降低一些准确性;如果实际问题中的事件的各个属性非常不独立的话,甚至是无法使用朴素贝叶斯的。总的来说,朴素贝叶斯大大简化了计算,同时牺牲了一些结果的准确性,具体要不要使用、怎么使用就看我们在实际问题中的权衡了。

在朴素贝叶斯的思想下再看回分类问题,事件 有 个属性,可将分类问题按下式转化:

只需要计算出上式不同类别 下的值,令值最大的类别 即为分类结果。

其中,根据大数定律, , 是类别 下的后验概率,其计算要取决于先验 ,这里需要分为 是离散或连续两种情况:

为样本中类别为 的频数, 为类别为 的样本中,第 个属性中 出现的频数。
不过有些出现的概率比较低的属性,在我们的样本中不一定会出现,即频数为0,如果不作处理的话会导致其 为0,会导致包含这个属性的样本永远都不会被分类到类别 ,而现实不一定是这样,因此我们需要对没出现的情况做平滑处理,比如常见的拉普拉斯平滑,给分子 的频数加上一个定值 ,而分母加上 ,表示为第 个属性中的每一种取值的频数都加定值 :

举例:垃圾邮件判断
朴素贝叶斯分类在垃圾邮件的判断上有不错的实践效果,这是一个二分类问题, ,假设 为垃圾邮件, 为正常邮件,统计出:

现在收到一封邮件包含一些关键词:【中奖,笔记本电脑,特朗普,大选,...】,根据大量的数据可以统计出这些词出现的频数,除以类别中所有词的总频数得到其出现的后验概率,在垃圾邮件中:

在正常邮件中:

可以计算得到:

时的值是 时值的26倍,所以判断此邮件是垃圾邮件。

我们判断西瓜好坏的问题也可以转化成离散型随机变量的分类问题,过程与上面类似。

比如垃圾邮件的例子,在多项式朴素贝叶斯中:

如果我们只关心“中奖”出现与否,不管词频,则在伯努利朴素贝叶斯中:

举例:性别判断
下面是一组人类身体特征的统计资料。

有人身高6英尺、体重130磅,脚掌8英寸,判断此人性别:

各属性为连续变量,假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差。男性的身高是均值5.855、方差0.035的正态分布。所以,例如男性的身高为6英尺的概率的相对值等于1.5789(密度函数的值,并不是概率,只用来反映各个值的相对可能性)。

分布确定后,就可以计算性别的分类了:

女性的概率比男性要高出将近10000倍,所以判断该人为女性。

在前文1.2.1小节中我们已经提过平滑处理,主要针对于那些在样本中没有出现过的词,它们的概率是0,导致在分类中完全没有存在感,所以要对这些进行平滑处理。

平滑处理的方法也有很多种,包括我们上面说过的拉普拉斯平滑,除此之外还有古德图灵平滑,线性插值法,回退法(K-Z回退)等,不过这些方法在自然语言处理中比较常用,我们暂时先不多介绍了,还是聚焦在朴素贝叶斯上,下面我们看看朴素贝叶斯在sklearn中的实现。

sklearn中有3种常用的不同类型的朴素贝叶斯:

1)高斯分布型朴素贝叶斯

Parameters
priors: array-like of shape (n_classes,)
类别的先验概率,如果指定,则不再根据数据计算调整
var_smoothing: float, default=1e-9
Portion of the largest variance of all features that is added to variances for calculation stability.(不是很明白)

2)多项式分布型朴素贝叶斯

Parameters
alpha: float, default=1.0
Additive (Laplace/Lidstone) smoothing parameter (0 for no smoothing).

fit_prior: bool, default=True
Whether to learn class prior probabilities or not. If false, a uniform prior will be used.

class_prior: array-like of shape (n_classes,), default=None
Prior probabilities of the classes. If specified the priors are not adjusted according to the data.

其常用函数与高斯型一样。

3)伯努利分布型朴素贝叶斯

Parameters
binarize: float or None, default=0.0
Threshold for binarizing (mapping to booleans) of sample features. If None, input is presumed to already consist of binary vectors.(用于设置二值化的阈值)

官方例子与多项式型的基本一样,而且也没有设置binarize,相当于默认使用binarize=0.0,根据源码 sklearn/preprocessing/_data.py
中的binarize(X, *, threshold=0.0, copy=True)函数可以发现,大于binarize的都赋值为1,其他为0。

优点

缺点

可见,朴素贝叶斯的缺点很大程度来来源于其假设太强,对于其假设符合程度较低的问题会损失较多的准确性,因此,如果我们能把假设弱化一下,是不是就能提高朴素贝叶斯的性能呢?在接下来的篇章中我们来继续探索。



主要参考资料

《机器学习》周志华
《统计学习方法》 李航
scikit-learn Naive Bayes文档

机器学习系列-朴素贝叶斯分类器

贝叶斯分类器

什么是贝叶斯分类器

贝叶斯分类器是一类分类器的总称,这些分类器均以贝叶斯定理为基础,故统称为贝叶斯分类器。这些分类器中最简单的是朴素贝叶斯分类器,它几乎完全按照贝叶斯定理进行分类,因此我们从朴素贝叶斯分类器说起。

贝叶斯定理:

贝叶斯定理是概率论中一个比较重要的定理,在讲解贝叶斯定理之前,首先回顾一下贝叶斯定理的基础:条件概率和全概率公式。

  • 条件概率:设\(A,B\)是两个事件,且\(P(A)>0\),称
    \[P(B|A)=\frac{P(AB)}{P(A)}\]
    为在事件\(A\)发生的情况下事件\(B\)发生的条件概率。

条件概率很容易理解。一般情况下,概率可以表示为事件所包含的基本事件数(表示为\(count(B)\))与样本空间的基本事件数(表示为\(count(S)\))之商,即
\[P(A)=\frac{count(B)}{count(S)}\]
当我们在求条件概率时,分母不再是\(count(S)\)而是\(count(A\cap S)\),而分子也变成了\(count(A\cap B)\),因此
\[P(B|A)=\frac{count(AB)}{count(AS)}=\frac{count(AB)}{count(A)}\]
因为\(\frac{count(AB)}{count(A)}=\frac{P(AB)count(A)}{P(A)count(A)}\),约去\(count(A)\),就得到了条件概率公式。

  • 全概率公式:设试验\(E\)的样本空间为\(S\)\(A\)\(E\)的事件,\(B_1,B_2,...,B_n\)\(S\)的一个划分,且\(P(B_i)>0(i=1,2,...n)\),则
    \[P(A)=\sum_{i=1}^{n}P(A|B_i)P(B_i)\]称为全概率公式。

全概率公式的证明也很简单:

\(A=AS=A(B_1\cup B_2\cup ...\cup B_n)=AB_1\cup AB_2\cup ...\cup AB_n\),因为\(P(B_i)>0\)\((AB_i)(AB_j)=\varnothing,i\neq j,i,j=1,2,...,n\),所以,
\(P(A)=\sum_{i=1}^{n} P(AB_i)=\sum_{i=1}^{n} P(A|B_i)P(B_i)\)

介绍完上面两个公式,就可以引出贝叶斯公式:

  • 设试验\(E\)的样本空间为\(S\)\(A\)\(E\)的事件,\(B_1,B_2,...,B_n\)\(S\)的一个划分,且\(P(A_i)>0,P(B_i)>0(i=1,2,...n)\),则
    \[P(B_i|A)=\frac{P(A|B_i)P(B_i)}{\sum_{j=1}^{n}P(A|B_j)P(B_j)}\]
    称为贝叶斯公式。

    贝叶斯分类器

    贝叶斯公式的直观意义显而易见:当我们得知了\(P(B_i|A),P(B_i)\)就可以求\(P(A|B_i)\)。对应到分类任务中,就是当我们得知了\(P(\)属性\(|\)类别\(),P(\)属性\()\)就可以求\(P(\)类别\(|\)属性\()\)

朴素贝叶斯分类的定义如下:

1、设\(X=\{a_1,a_2,...,a_m\}\)为一个待分类项,而每个\(a\)\(x\)的一个特征属性。

2、有类别集合\(C=\{y_1,y_2,...,y_n\}\)

3、计算\(P(y_1|x),P(y_2|x),...,P(y_n|x)\)

4、如果\(P(y_k|x)=max\{P(y_1|x),P(y_2|x),...,P(y_n|x)\}\),则\(x\in y_k\)

计算\(P(y_i|x)\)的方式如下:统计得到在各类别下各个特征属性的条件概率估计。即\(P(a_1|y_1),P(a_2|y_1),...,P(a_m|y_1);P(a_1|y_2),P(a_2|y_2),...,P(a_m|y_2);...;P(a_1|y_n),P(a_2|y_n),...,P(a_m|y_n)\),如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:
\(P(y_i|x)=\frac{P(x|y_i)P(y_i)}{P(x)}\),因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:
\[P(x|y_i)P(y_i)=P(a_1|y_i)P(a_2|y_i)...P(a_m|y_i)P(y_i)=P(y_i)\prod_{j=1}^{m}P(a_j|y_i)\]

估计类别下特征属性划分的条件概率及Laplace校准

由上文看出,计算各个划分的条件概率\(P(a|y)\)是朴素贝叶斯分类的关键性步骤,当特征属性为离散值时,只要很方便的统计训练样本中各个划分在每个类别中出现的频率即可用来估计\(P(a|y)\),下面重点讨论特征属性是连续值的情况。当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:
\(g(x,\eta ,\sigma)=\frac{1}{\sqrt{2\pi}\sigma}e^{\frac{-(x-\eta)^2}{2\sigma^2}}\),而\(P(a_k|y_i)=g(a_k,\eta_{y_i} ,\sigma_{y_i})\),因此只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。均值与标准差的计算在此不再赘述。另一个需要讨论的问题就是当\(P(a|y)=0\)怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准,它的思想非常简单,就是对没类别下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。

朴素贝叶斯算法的优缺点

优点:

  1. 数学基础坚实,分类效率稳定,容易解释;
  2. 所需估计的参数很少,对缺失数据不太敏感;
  3. 无需复杂的迭代求解框架,适用于规模巨大的数据集。

缺点:

  1. 属性之间的独立性假设往往不成立(可考虑用聚类算法先将相关性较大的属性进行聚类);
  2. 需要知道先验概率,分类决策存在错误率。

朴素贝叶斯分类器是个非常简单的分类器,原理完全基于概率论中的贝叶斯定理,但是它的假设条件对于现实应用有些严苛,不过,这并不妨碍朴素贝叶斯分类器在垃圾邮件识别,不真实账号检测等领域发挥重大作用。用已故的统计学家George E. P. Box的话来说,就是:All models are wrong, but some are useful.

以上是关于贝叶斯分类器(3)朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

19贝叶斯分类器:半朴素贝叶斯分类器(属性之间存在依赖)

动态朴素贝叶斯分类器和朴素贝叶斯分类器有啥区别

18贝叶斯分类器:朴素贝叶斯分类器(属性之间条件独立)

机器学习:贝叶斯分类器——高斯朴素贝叶斯分类器代码实现

“移花接木”(朴素贝叶斯分类器)

数据挖掘-贝叶斯分类器