Skip to content

4.3 拉普拉斯平滑

拉普拉斯平滑

在朴素贝叶斯算法中,我们以邮件分类器为例介绍了文本分类问题。当时我们将整个字典储存起来作为词汇表。但实际上这种做法效率不高。更高效的做法是设定一个常用词汇表,只存储一定量的常用单词。但若遇到词汇表之外的生词,该怎么办呢?

首先,我们分析一下遇到生词会导致什么问题。回顾垃圾邮件分类过程:假设你完成了 CS229 课程并做了出色的研究项目,决定在 20xx 年 6 月将作品投稿到 NeurIPS 会议(机器学习领域的顶级会议,投稿截止日期通常在六月底至七月初你通过邮件讨论了该会议,随后开始收到包含 "neurips" 单词的邮件。然而,这是你的第一篇 NeurIPS 投稿,此前从未收到过包含 "neurips" 的邮件;更重要的是,"neurips" 这个词从未出现在你的垃圾邮件 / 正常邮件训练集中。假设 "neurips" 是词汇表中的第 35000 个词,那么朴素贝叶斯分类器对该参数 的最大似然估计结果如下:

由于分类器从未在垃圾邮件或正常邮件的训练样本中见过 "neurips" 这个词,它认为该词出现在两类邮件中的概率均为 。因此,当需要判断一封包含 "neurips" 的邮件是否为垃圾邮件时,算法计算后验概率得到:

问题在于 中包含了 ,导致整个乘积为 。因此算法得到 ,无法做出预测。

根本原因在于统计学中常将未观测到的事件的概率估计为 ,从而导致了 的情况。为避免此问题,我们引入拉普拉斯平滑 (Laplace smoothing),用一个小概率值替代零概率。具体来说,假设要估计一个在 范围内取值的多项式随机变量 的参数 。给定 个独立观测样本 ,最大似然估计经拉普拉斯平滑后变为:

此处,分子加 ,分母加 。需注意 仍然成立(这是概率估计的必要性质同时,所有 都不为零,从而解决了零概率问题。在某些条件下,拉普拉斯平滑可被证明能给出参数 的良好估计。

回到朴素贝叶斯分类器,应用拉普拉斯平滑后,参数估计公式修正如下:

(实践中,通常无需对 进行拉普拉斯平滑,因为垃圾邮件与非垃圾邮件的比例通常是合理可估计的, 作为 的估计值通常不会接近零

文本分类的事件模型(Event Models for Text Classification)

接下来介绍文本分类的另一种模型。朴素贝叶斯算法已能解决许多分类问题,但还有一种相关算法在文本分类上表现更优。

在之前针对文本分类的朴素贝叶斯方法中,我们使用的是多元伯努利事件模型(Multi-Variate Bernoulli Event Model)。在该模型中,假设邮件是否发送由随机过程决定(先验概率 然后,发件人(无论是否垃圾邮件发送者)独立地遍历词汇表,依据概率分布 决定是否将每个词 包含在邮件中。因此,收到一封垃圾邮件的概率为:

另一种模型称为多项式事件模型(Multinomial Event Model)。为描述此模型,需使用不同的特征表示方法:令 表示邮件中的第 个单词。因此, 是一个整数,取值范围为 ,其中 是词汇表的大小。一封包含 个单词的邮件可表示为一个长度为 的向量 ;注意,不同邮件的 值可以不同。例如,邮件开头是 "A NIPS ...",则 ("a" 是词汇表第一个词), (假设 "nips" 是词汇表第 35000 个词)。

在多项式事件模型中,假设邮件生成过程如下:首先确定是否为垃圾邮件(依据 ,与前模型相同接着,发件人依据多项式分布 生成第一个词 。然后,独立于 地依据相同的多项式分布生成 ,再生成 ,依此类推,直至生成邮件所有词。因此,邮件的整体概率为 。虽然此公式形式与多元伯努利模型相似,但含义截然不同:此处的 服从多项式分布,而非伯努利分布。

新模型的参数仍然是 (与前相同以及 (对任意位置 注意,我们假设 的值与位置 无关,即单词的生成分布不依赖于其在邮件中的位置(词袋模型假设的一种体现

给定训练集 ,其中 是第 个样本的单词数数据的似然函数为:

最大化该似然函数得到参数的最大似然估计:

若应用拉普拉斯平滑(实践中用于提升性能)估计 ,在分子加 ,分母加 ,得到:

当然,这未必是最优的分类算法,但朴素贝叶斯分类器在实践中往往表现优异。因此,它因其简单、易于实现而成为一个很好的首选方案