朴素贝叶斯

朴素贝叶斯方法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布。然后基于此模型,对给定的输入,利用贝叶斯定理求出后验概率最大的输出。朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常用的方法。

设输入空间为n维向量的集合,输出空间为类标记集合 。输入为特征向量x,输出为类标记y。X是定义在输入空间上的随机向量,y是定义在输出空间上的随机变量。 P(X,Y)是其联合概率分布,朴素贝叶斯法通过训练数据集学习联合概率分布P(X,Y),具体地,学习先验概率分布及条件概率分布。

朴素贝叶斯法对条件概率分布作了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯法也由此得名。朴素贝叶斯法实际上学习到生成数据的机制,所以属于生成模型。条件独立假设,等于是说用于分类的特征在类确定的条件下都是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。

式1

式1即朴素贝叶斯中“朴素”二字的解释,将输入变量的各特征分量认为是相互独立的,从而将单个完整的条件概率展开为每个特征分量的条件概率乘积的形式。

朴素贝叶斯分类时,对于给定的输入x,通过学习到的模型计算后验概率分布P(Y=ck , X=x),将后验概率最大的类作为x的类输出。后验概率计算根据贝叶斯定理进行:

式2

式2是根据贝叶斯定理计算输出为ck的后验概率,这里的后验是指此处获得了输入特征为 X=x 这一信息,具体来看,分子部分是先验概率与条件概率相乘,分母是全概率公式,朴素贝叶斯方法是知道了某一新样本x的情况下,分别计算在这一情况下的所有类的后验概率,并取其最大值作为类标号输出的过程(即式4)。

将式1的展开代入式2分子中的条件概率得到式3:

式3

则朴素贝叶斯分类器可以表示为:

式4

很自然地可以发现这是一个排序模型,即比较各类别ck下P(Y=ck | X=x)的大小,由于所有类别后验概率的分母计算部分都是全概率展开,即分母部分相同,并不影响大小比较,因此可以只取分子分布,那么朴素贝叶斯分类器又可以表示为:

式5

这里主要需要计算各类别下的先验概率与条件概率,可以根据训练集/历史数据进行计算:

式6 & 式7

其中I为示性函数,简单来说就是计数。先验概率计算就是在训练集/历史数据中计算原本各类别的概率,条件概率计算就是在特定类别下特征的分布情况。

这里可能会发生一种特殊情况,即训练集/历史数据中缺失了某部分数据,因此可以使用一种技巧避免发生该情况导致后验概率为0的情况。拉普拉斯平滑,在各类别下均加上某个常数值,通常取1,这并不会影响朴素贝叶斯的分类结果排序,但可以避免之前提到的特殊情况。

式8

以文本分类任务来具体介绍朴素贝叶斯的使用方法:

假设现有正常邮件9封,垃圾邮件4封,任务是通过朴素贝叶斯法判断新收到的邮件是否是垃圾邮件。不难想到,输入的特征向量可以用文档的特征词向量替代。

对邮件内的特征词进行统计,为了简化描述,这里假定文章中只有“dear”、“friend”、“lunch”、“money”四个词。

根据朴素贝叶斯方法,接下来就是计算先验概率与条件概率:

假设收到一封新邮件,即获得新样本为“Dear friend”,根据先验概率与条件概率使用贝叶斯公式计算后验概率:

根据“朴素”假设,将特征词向量拆开,并使用之前先验概率与条件概率进行计算:

可以发现,获得“Dear friend”这一信息后,该封邮件属于正常邮件的后验概率要大于其属于垃圾邮件的后验概率,因此该邮件可以归于正常邮件。

考虑一种特殊情况,如果某个词没有出现,则某个条件概率会等于0,这样计算后验概率时也会为0,因此我们需要使用到前面提到的贝叶斯估计方法,即拉普拉斯平滑。

左图假设历史数据中无“friend”,导致只要涉及到该特征词的后验概率都会为0,无论其他特征词如何(因为是累乘的形式),右图将所有特征词频数都加了1,因此可以避免这一特殊情况。

这是简化后的例子为了说明NBC的执行过程,实际操作时,首先样本数量会大大增加,可能有数万或数十万个历史样本数据,另一方面,每个文本的特征词数量也会大大增加,但总体上来说,只是工作量变大,工作流程并没有发生改变。